详解阿里云视频直播PHP-SDK接入教程
作者:文臣灬 发布时间:2023-11-21 02:19:17
阿里云 视频直播 配置 及 PHP-SDK 接入教程
个人感觉,阿里的文档比微信的要坑很多…
微信最多是有些比较重要的东西放到比较不起眼、比较难发现的地方.
阿里的文档就是要么就是sdk已经更新了,但是文档还没更新,导致文档与SDK不匹配.在关键点卡我一下…
要么是同样的功能有好几个版本的SDK以及文档,却不告诉你哪个是最新的…
吐槽结束~
准备工作
1.最重要的,先仔细看下视频直播文档!
2. 购买阿里云的视频直播服务 ,用量不大的时候建议使用按量收费的方式结算,接通之后消耗了流量才扣钱;
3. 准备好备案的域名,到时候需要解析两个二级域名(推流域名与拉流域名);
4. 如果需要存储直播视频文件的话,需要使用对象存储OSS服务,因为直播录制的视频都会到这里面.这也是可以先使用后收费的(按量收费).
域名管理
首先进入视频直播的>>>>
添加两次,分别是播流域名和推流域名,
添加完成之后进行域名解析配置这两个域名的CDN加速指向分配的CNAME.
然后配置将它们两个域名(一个推流,一个播流)关联起来.
配置鉴权
推流与播流的链接都是以一定的规则自己拼起来的,首先要在域名配置
地址生成器及DEMO演示-熟悉鉴权
AppName:随意理解,或者理解为分组吧;
StreamName:理解为直播的id,一个StreamName同时只能推一个直播流.可以开始直播-终止直播-开始直播-终止直播…
有关鉴权的规则是这样的:鉴权规则
代码如下:
<?php
$AppName = 'AppName'; //app名称 ,随意设定
$StreamName = "StreamName"; //直播流名称 ,随意设定
$now = time();
//------------------- 阿里云视频直播控制台 地址生成器 鉴权设置 -----------
//加密key,即直播后台鉴权里面自行设置
$pull_key = 'oCudfghYGM'; //播流 主key
$push_key = '0hgggfjAhT'; //推流 主key
$time = $now + 60*60*3; //URL的有效期 180分钟 随意设定
//------------------------ end ---------------------------------------------
$strpush = "/{$AppName}/{$StreamName}-{$time}-0-0-{$push_key}";
$push_cdn = 'push.paxy365.com';
$pull_cdn = 'pull.paxy365.com';
//推流地址 一个
$pushurl = "rtmp://{$push_cdn}/{$AppName}/{$StreamName}?auth_key={$time}-0-0-".md5($strpush);
//播流地址
$strviewrtmp = "/{$AppName}/{$StreamName}-{$time}-0-0-{$pull_key}";
$strviewflv = "/{$AppName}/{$StreamName}.flv-{$time}-0-0-{$pull_key}";
$strviewm3u8 = "/{$AppName}/{$StreamName}.m3u8-{$time}-0-0-{$pull_key}";
$rtmpurl = "rtmp://{$pull_cdn}/{$AppName}/{$StreamName}?auth_key={$time}-0-0-".md5($strviewrtmp);//播流地址
$flvurl = "http://{$pull_cdn}/{$AppName}/{$StreamName}.flv?auth_key={$time}-0-0-".md5($strviewflv);//播流地址
$m3u8url = "http://{$pull_cdn}/{$AppName}/{$StreamName}.m3u8?auth_key={$time}-0-0-".md5($strviewm3u8);//播流地址
获取到推流URL和播流URL就可以愉快地玩直播啦,可以下载阿里的DEMO(APP)到手机上,测试这URL是否有用~
接入SDK
阿里是将所有的SDK打包一起下载,里面不仅有视频直播的SDK,还有别的业务的SDK…T_T
PHP SDK 下载地址
我的项目是TP框架(还是3.2的T_T)
在一开始拿到SDK代码的时候很懵逼,无从下手…
度娘了下才知道要引入的是这两个文件 ! ! !
<?php
use OSS\OssClient;
use OSS\Core\OssException;
include_once LIB_PATH . 'Vendor/aliyun-openapi/aliyun-php-sdk-core/Config.php'; // LIB_PATH 指向的是 项目地址/ThinkPHP/Library/
include_once LIB_PATH . 'Vendor/aliyun-oss-php/autoload.php';
配置AccessKeyID AccessKeySecret
这里并没有用子账号RAM权限,因此我这种方法配置的密钥对阿里的所有密钥有效,不建议这么做!
直播在线流SDK接入,我这里是用已知的直播流名称去检测它是否在线
<?php
/**
* 在线流判断
* 获取某直播流正在推的流的信息
*/
public function StreamsOnlineList($stream_name=''){
$iClientProfile = \DefaultProfile::getProfile("cn-shenzhen", 'AccessKeyID', 'AccessKeySecret'; //cn-shenzhen 这个貌似都可以,我填cn-hangzhou也没问题 Access Key ID,Access Key Secret
$client = new \DefaultAcsClient($iClientProfile);
$request = new \live\Request\V20161101\DescribeLiveStreamsOnlineListRequest();
$request ->setAppName('应用名称'); //应用名称。
$request ->setStreamName($stream_name); //流名称。不填的话就是查AppName下所有的在线直播流
$request ->setDomainName('pull.xxx.com'); //您的加速域名。播流域名
$request ->setPageNum('1'); //取得第几页,默认1。
//以下参数我都没有用到,因此注释了
//$request ->setStreamType('all'); //流类型。取值范围:all raw trans 对应查询所有流、原始流、转码流,默认all返回所有流信息
//$request ->setStartTime('2019-03-04T00:00:00Z');
//$request ->setEndTime('2019-03-04T23:59:59Z');
//$request ->setPageSize('2000'); //每页大小,最大3000。 取值:1~3000之前的任意整数。 默认值:2000
//$request ->setQueryType('strict'); //指定是否模糊匹配流名称。 取值: fuzzy:模糊匹配 strict:精准匹配
//$request ->setOrderBy(''); //文档中没有,sdk有该参数,非必填
//$request ->setOwnerId(''); //文档中没有,sdk有该参数,非必填
//针对阿里云进行请求
$response = $client->getAcsResponse($request);
//对象转数组,总感觉我这种方法太土了...网上也有很多自定义的函数可以对象转数组
$response = json_decode(json_encode($response,true),true);
dump($response);exit;
推流回调的配置
将回调接收到的数据打印出来
["action"]=>
string(7) "publish"//publish 推流开始 publish_done推流结束
["ip"]=>
string(14) "139.147.54.224"
["id"]=>
string(24) "y-12005-870-1-2019030610"//StreamName 自己设定的直播流名称(这里叫id)
["app"]=>
string(16) "push.xxxxx.com"
["appname"]=>
string(6) "gifoge"//App名称
["time"]=>
string(10) "1551839491"
["usrargs"]=>
string(277) "vhost=pull.paxy365.com&auth_key=1551850143-0-0-6f97891e39859d558b8e583860f22094&ali_publisher_ip=119.137.54.224&ali_edge_node_ip=175.6.241.195&ali_node_via=cache2.cn541%2clive11.l2em21-3&alilive_streamidv2=2.cn541_6638_355280423_1551839490901&alilive_clienthost=live11.l2em21-3"
["node"]=>
string(13) "135.6.541.195"
来源:https://blog.csdn.net/qq_41976646/article/details/88317894


猜你喜欢
- Python 2.x 很快就要 失去官方支持 了,尽管如此,从 Python 2 迁移到 Python 3 却并没有想象中那么难。我在上周用
- 身为一名小小的程序猿,在日常开发中不可以避免的要和where in和like打交道,在大多数情况下我们传的参数不多简单做下单引号、敏感字符转
- 深度遍历:原则:从上到下,从左到右逻辑(本质用递归):1)、找根节点2)、找根节点的左边3)、找根节点的右边class Node(objec
- 目的:了解常用的ORM框架;使用SQLObject框架操作MySQL数据库。面试题:在Python语言中有哪些常用的ORM框架,它们有什么区
- 1.安装pyinstaller https://www.jb51.net/article/177160.htm2.安装pywin32 htt
- 最近一段时间都在学django,现在的网站基本都要使用到富文本编辑器,今天就记录下使用django的管理后台的一个富文本编辑器的第三方库 D
- 本文实例讲述了Python多进程原理与用法。分享给大家供大家参考,具体如下:进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了
- 图片太大了,上百张图用photoshop改太慢,就想到用python写个简单的批处理。功能简单就是把原图按比例缩小# -*- coding:
- 在导入Python模块时,我们可以用import os也可以用from os import *当然,不推荐第二种方法,这样,会导入太多的os
- mysql简介MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语
- VSCode配置python调试环境很久之前的一个东东,翻出来看看VSCode配置python调试环境 * 1.下载p
- PM2实现Nodejs项目自动部署首先简单说下思路:本地git仓库与远程仓库关联(github、码云等平台),然后pm2按照指定配置登录服务
- 1. 介绍通俗的来讲,MobaXterm就是一款SSH客户端,它帮助我们在Windows操作系统下去连接并操作Linux服务器。MobaXt
- 接口压力测试500次,查看响应时间import jsonimport requestsimport logginglogging.basic
- 场景需求:需要在Flask服务器的本地找一张图片返回给前端展示出来。问题疑点:通常前端的<img>标签只会接受url的形式来展示
- 导语元宵节,又称上元节、灯节,是春节之后的第一个重要节日。相传,汉文帝(前179—前157年)为庆祝周勃于正月十五勘平诸
- 在SQL查询分析器执行以下代码就可以了。01.declare @t varchar(255),@c varchar(255) 02.decl
- MaxDB是MySQL AB公司通过SAP认证的数据库。MaxDB数据库服务器补充了MySQL AB产品系列。某些MaxDB特性在MySQL
- 参考网址构建网络我们可以通过torch.nn包来构建网络,现在你已经看过了autograd,nn在autograd的基础上定义模型和求微分。
- 1.存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组