详解阿里云视频直播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 相关文章推荐
PHP 内存缓存加速功能memcached安装与用法
Sep 03 PHP
php抓取页面与代码解析 推荐
Jul 23 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
May 07 PHP
PHP中extract()函数的定义和用法
Aug 17 PHP
PHP与MongoDB简介|安全|M+PHP应用实例详解
Jun 17 PHP
实测在class的function中include的文件中非php的global全局环境
Jul 15 PHP
php检索或者复制远程文件的方法
Mar 13 PHP
php封装的page分页类完整实例
Oct 18 PHP
PHP获取页面执行时间的方法(推荐)
Dec 10 PHP
浅析PHP开发规范
Feb 05 PHP
浅谈php使用curl模拟多线程发送请求
Mar 08 PHP
PHP实现字符串的全排列详解
Apr 24 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
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
用 Javascript 验证表单(form)中多选框(checkbox)值
2009/09/08 Javascript
Jquery插件 easyUI属性汇总
2011/01/19 Javascript
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
JS实现可点击展开与关闭的左侧广告代码
2015/09/02 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
vue生命周期的探索
2019/04/03 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
Python中scatter函数参数及用法详解
2017/11/08 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
使用Python进行AES加密和解密的示例代码
2018/02/02 Python
Python 修改列表中的元素方法
2018/06/26 Python
Python编程深度学习计算库之numpy
2018/12/28 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
简单整理HTML5的基本特性和语法
2016/02/18 HTML / CSS
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
Perricone MD裴礼康美国官网:抗衰老护肤品
2016/09/26 全球购物
Stuarts London美国/加拿大:世界领先的独立男装零售商之一
2019/03/18 全球购物
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
市场营销专业大学生职业生涯规划文
2014/03/06 职场文书
一年级班主任感言
2014/03/08 职场文书
大学生职业生涯规划书
2014/03/14 职场文书
春节晚会主持词
2014/03/24 职场文书
药房管理制度范本
2015/08/06 职场文书
工作后的感想
2015/08/07 职场文书
四十九个javascript小知识实用技巧
2021/11/20 Javascript