阿里云 視頻直播 配置 及 PHP-SDK 接入教程
個人感覺,阿里的文檔比微信的要坑很多…
微信最多是有些比較重要的東西放到比較不起眼、比較難發(fā)現的地方.
阿里的文檔就是要么就是sdk已經更新了,但是文檔還沒更新,導致文檔與SDK不匹配.在關鍵點卡我一下…
要么是同樣的功能有好幾個版本的SDK以及文檔,卻不告訴你哪個是最新的…
吐槽結束~
準備工作
1.最重要的,先仔細看下視頻直播文檔!
2. 購買阿里云的視頻直播服務 ,用量不大的時候建議使用按量收費的方式結算,接通之后消耗了流量才扣錢;
3. 準備好備案的域名,到時候需要解析兩個二級域名(推流域名與拉流域名);
4. 如果需要存儲直播視頻文件的話,需要使用對象存儲OSS服務,因為直播錄制的視頻都會到這里面.這也是可以先使用后收費的(按量收費).
域名管理
首先進入視頻直播的控制臺>>域名管理>>添加域名
添加兩次,分別是播流域名和推流域名,
添加完成之后進行域名解析配置這兩個域名的CDN加速指向分配的CNAME.
然后配置將它們兩個域名(一個推流,一個播流)關聯(lián)起來.
配置鑒權
推流與播流的鏈接都是以一定的規(guī)則自己拼起來的,首先要在域名配置
地址生成器及DEMO演示-熟悉鑒權
AppName:隨意理解,或者理解為分組吧;
StreamName:理解為直播的id,一個StreamName同時只能推一個直播流.可以開始直播-終止直播-開始直播-終止直播…
有關鑒權的規(guī)則是這樣的:鑒權規(guī)則
代碼如下:
?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,還有別的業(yè)務的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.comauth_key=1551850143-0-0-6f97891e39859d558b8e583860f22094ali_publisher_ip=119.137.54.224ali_edge_node_ip=175.6.241.195ali_node_via=cache2.cn541%2clive11.l2em21-3alilive_streamidv2=2.cn541_6638_355280423_1551839490901alilive_clienthost=live11.l2em21-3"
["node"]=>
string(13) "135.6.541.195"
到此這篇關于阿里云視頻直播PHP-SDK接入教程的文章就介紹到這了,更多相關阿里云視頻直播PHP-SDK 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- jQuery+ThinkPHP+Ajax實現即時消息提醒功能實例代碼
- C# 調用騰訊即時通信 IM的示例
- java實現即時通信的完整步驟分享
- Android實現聊天記錄上傳本地服務器(即時通訊)
- python實現b站直播自動發(fā)送彈幕功能
- php和騰訊直播的實現代碼
- 2分鐘實現一個Vue實時直播系統(tǒng)的示例代碼
- 詳解玩轉直播系列之消息模塊演進