API列表:
https://help.aliyun.com/document_detail/87396.html?spm=a2c4g.11186623.6.609.19d83dd2Uejwx7
引入alibaba sdk for php SDK:
git:https://github.com/aliyun/openapi-sdk-php
介绍:
阿里云直播提供的是触发式的推流与播放,您无需提前创建资源,只要添加经过备案的推流域名和播流域名,并完成域名解析、鉴权等操作,即可根据地址拼接规则手动拼接,以快速获取对应的推流地址和播流地址。本文介绍未设置转码的直播活动的推流地址和播流地址的拼接万法。 阿里云直播提供的是触发式的推流与播放,您无需提前创建资源,只要添加经过备案的推流域名和播流域名,并完成域名解析、鉴权等操作,即可根据地址拼接规则手动拼接,以快速获取对应的推流地址和播流地址.本文介绍未设置转码的直播活动的推流地址和播流地址的拼接办法.
【按步骤先配置域名、鉴权,直播地址随便你怎么生成都是有效的,直接拿到能录制直播和观看直播的组件中进行使用就可以了】
测试推荐:OBS推流工具和LVS播流工具
代码参考:
<?php namespace App\Service; use AlibabaCloud\Client\AlibabaCloud; use AlibabaCloud\Client\Exception\ClientException; use AlibabaCloud\Client\Exception\ServerException; class AliyunLive { private $error; const DOMAIN_NAME='alive.i***h.cn'; //你的加速域名,和推流域名一致。 const REGION_ID='cn-shanghai'; //区域 const ACCESS_KEY_ID='LTAI4*****ibc'; //阿里云秘钥 const ACCESS_KEY_SECRET='HPg2*****gnNOK'; //阿里云秘钥 const LIVE_HOST='live.aliyuncs.com'; //写死,阿里云直播CDN域名 const ALIVE_URL='alive.i***h.cn'; //推域名 const ALIVE_KEY='oR11sd***'; //推流鉴权KEY,后台拿 const TLIVE_URL='tlive.i***h.cn'; //关联的播域名 const TLIVE_KEY='jdU1d***op'; //播流鉴权KEY,后台拿 /** * 创建签名 * @param $path 播放地址 域名后面所有 * @param $exp //结束时间 * @param $key * @return string */ private static function createSign($path,$exp,$key) { $rand=0; $uid=0; $str=sprintf("%s-%s-%s-%s-%s",$path,(string)$exp,(string)$rand,(string)$uid,$key); $hashValue=md5($str); $authKey=sprintf("%s-%s-%s-%s",(string)$exp,(string)$rand,(string)$uid,$hashValue); return "auth_key=$authKey"; } /** * 创建是直播地址 * @param $appName 应用名称 ,自定义 * @param $streamName 房间名称,自定义,该应用下唯一 * @param $endTime 结束时间 * @return array|bool 播放流(观看者):alive_url,推流(直播者):tlive_url */ public static function createdLive($appName,$streamName,$endTime) { if(!$appName || !$streamName || !$endTime || $endTime < time()){ return false; } //创建播流 $path="/$appName/$streamName"; $aliveUrl='rtmp://'.self::ALIVE_URL."$path?".self::createSign($path,$endTime,self::ALIVE_KEY); //创建推流 $tliveUrlRTMP= 'rtmp://'.self::TLIVE_URL."$path?".self::createSign($path,$endTime,self::TLIVE_KEY); // $tliveUrlFLV ='http://'.self::TLIVE_URL."$path.flv?".self::createSign($path,$endTime,self::TLIVE_KEY); // $tliveUrlM3U8='http://'.self::TLIVE_URL."$path.m3u8?".self::createSign($path,$endTime,self::TLIVE_KEY); return [ 'alive_url'=>$aliveUrl, 'tlive_url'=>$tliveUrlRTMP, ]; } //停止直播 public static function stopLive($appName,$streamName) { $query=[ 'RegionId' => self::REGION_ID, 'AppName' => $appName, 'StreamName' => $streamName, 'LiveStreamType' => "publisher", 'DomainName' => self::DOMAIN_NAME, // 'ResumeTime'=>'', ]; $_this=new static(); $result=$_this->request('ForbidLiveStream',$query); return true; } //恢复直播 public static function resumeLive($appName,$streamName) { $query=[ 'RegionId' => self::REGION_ID, 'LiveStreamType' => "publisher", 'AppName' => $appName, 'StreamName' => $streamName, 'DomainName' => self::DOMAIN_NAME, ]; $_this=new static(); $result=$_this->request('ResumeLiveStream',$query); return true; } //获取直播在线人数 public static function getOnlineUserNum($appName,$streamNma) { $query=[ 'RegionId' => self::REGION_ID, 'DomainName' => self::DOMAIN_NAME, 'AppName'=>$appName, 'StreamName' =>$streamNma, ]; $_this=new static(); $result=$_this->request('DescribeLiveStreamOnlineUserNum',$query); return $result; } //日志 public function log($msg,$info='info') { $msg='直播接口:'.$msg.($info !='info'?var_export($info,1):''); log_write($msg); } //获取错误 public static function getError() { return (new static())->error; } //请求 private function request($action,Array $query) { AlibabaCloud::accessKeyClient(self::ACCESS_KEY_ID, self::ACCESS_KEY_SECRET) ->regionId(self::REGION_ID) ->asDefaultClient(); try { $result = AlibabaCloud::rpc() ->product('live') // ->scheme('https') // https | http ->version('2016-11-01') ->action($action) ->method('POST') ->host(self::LIVE_HOST) ->options([ 'query' => $query, ]) ->request(); return $result->toArray(); } catch (ClientException $e) { $this->error=$e->getMessage(); return false; } catch (ServerException $e) { $this->error=$e->getMessage(); return false; } } }