详解阿里云视频直播PHP-SDK接入教程


Posted in PHP onJuly 09, 2020

阿里云 视频直播 配置 及 PHP-SDK 接入教程

个人感觉,阿里的文档比微信的要坑很多…
微信最多是有些比较重要的东西放到比较不起眼、比较难发现的地方.
阿里的文档就是要么就是sdk已经更新了,但是文档还没更新,导致文档与SDK不匹配.在关键点卡我一下…
要么是同样的功能有好几个版本的SDK以及文档,却不告诉你哪个是最新的…
吐槽结束~

准备工作

1.最重要的,先仔细看下视频直播文档!
2. 购买阿里云的视频直播服务 ,用量不大的时候建议使用按量收费的方式结算,接通之后消耗了流量才扣钱;
3. 准备好备案的域名,到时候需要解析两个二级域名(推流域名与拉流域名);
4. 如果需要存储直播视频文件的话,需要使用对象存储OSS服务,因为直播录制的视频都会到这里面.这也是可以先使用后收费的(按量收费).

域名管理

首先进入视频直播的控制台>>域名管理>>添加域名
添加两次,分别是播流域名和推流域名,

详解阿里云视频直播PHP-SDK接入教程

添加完成之后进行域名解析配置这两个域名的CDN加速指向分配的CNAME.

详解阿里云视频直播PHP-SDK接入教程

详解阿里云视频直播PHP-SDK接入教程

然后配置将它们两个域名(一个推流,一个播流)关联起来.

详解阿里云视频直播PHP-SDK接入教程

详解阿里云视频直播PHP-SDK接入教程

配置鉴权

推流与播流的链接都是以一定的规则自己拼起来的,首先要在域名配置

详解阿里云视频直播PHP-SDK接入教程

详解阿里云视频直播PHP-SDK接入教程

地址生成器及DEMO演示-熟悉鉴权

AppName:随意理解,或者理解为分组吧;
StreamName:理解为直播的id,一个StreamName同时只能推一个直播流.可以开始直播-终止直播-开始直播-终止直播…

详解阿里云视频直播PHP-SDK接入教程

有关鉴权的规则是这样的:鉴权规则

代码如下:

<?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)

详解阿里云视频直播PHP-SDK接入教程

在一开始拿到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权限,因此我这种方法配置的密钥对阿里的所有密钥有效,不建议这么做!

详解阿里云视频直播PHP-SDK接入教程

详解阿里云视频直播PHP-SDK接入教程

直播在线流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;

推流回调的配置

详解阿里云视频直播PHP-SDK接入教程

详解阿里云视频直播PHP-SDK接入教程

将回调接收到的数据打印出来

["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"

到此这篇关于阿里云视频直播PHP-SDK接入教程的文章就介绍到这了,更多相关阿里云视频直播PHP-SDK 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
第十节 抽象方法和抽象类 [10]
Oct 09 PHP
php session 预定义数组
Mar 16 PHP
php统计文件大小,以GB、MB、KB、B输出
May 29 PHP
PHP不用第三变量交换2个变量的值的解决方法
Jun 02 PHP
用php守护另一个php进程的例子
Feb 13 PHP
php数组使用规则分析
Feb 27 PHP
php通过array_shift()函数移除数组第一个元素的方法
Mar 18 PHP
php获取文件后缀的9种方法
Mar 22 PHP
php curl中gzip的压缩性能测试实例分析
Nov 08 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
Jun 05 PHP
PHP调用接口用post方法传送json数据的实例
May 31 PHP
在laravel中实现将查询的对象转换为多维数组的函数
Oct 21 PHP
PHP利用curl发送HTTP请求的实例代码
Jul 09 #PHP
PHP使用POP3读取邮箱接收邮件的示例代码
Jul 08 #PHP
phpmyadmin在宝塔面板里进不去的解决方案
Jul 06 #PHP
详解PHP中的8个魔术常量
Jul 06 #PHP
php 利用socket发送GET,POST请求的实例代码
Jul 04 #PHP
PHP实现递归的三种方法
Jul 04 #PHP
laravel开发环境homestead搭建过程详解
Jul 03 #PHP
You might like
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
dedecms系统常用术语汇总
2007/04/03 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
PHP清除缓存的几种方法总结
2017/09/12 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
让网页根据不同IE版本显示不同的内容
2009/02/08 Javascript
JS实现self的resend
2010/07/22 Javascript
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
jQuery中extend函数详解
2015/02/13 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
2015/05/14 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
2018/05/17 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
vue实现公告栏文字上下滚动效果的示例代码
2020/06/16 Javascript
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
利用python获得时间的实例说明
2013/03/25 Python
全面了解Python环境配置及项目建立
2016/06/30 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
在Mac中PyCharm配置python Anaconda环境过程图解
2020/03/11 Python
一款基于css3麻将筛子3D翻转特效的实例教程
2014/12/31 HTML / CSS
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
美国家居装饰购物网站:Amanda Lindroth
2020/03/25 全球购物
养殖人员的创业计划书范文
2013/12/26 职场文书
人力资源求职信
2014/05/25 职场文书
公司离职证明样本
2014/09/13 职场文书
担保书范文
2015/01/20 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
2019已经过半,你知道年中工作总结该怎么写吗?
2019/07/03 职场文书