1. 程式人生 > 程式設計 >詳解阿里雲視訊直播PHP-SDK接入教程

詳解阿里雲視訊直播PHP-SDK接入教程

阿里雲 視訊直播 配置 及 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('');              //文件中沒有,非必填

    //針對阿里雲進行請求
    $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 內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!