阿里云直播服务 sdk demo php
来源:互联网 发布:泳衣淘宝网 编辑:程序博客网 时间:2024/06/01 10:29
最近做直播平台试用了一下阿里的直播服务,阿里的sdk写的有点绕,自己建了一个基类去实现签名提交和创建推拉流地址
请求和加签名的基类:
<?php/** * Created by PhpStorm. * User: Administrator * Date: 2016/12/8 0008 * Time: 11:05 */class Aliyun{ private $accessKeyId = ""; //密钥ID private $accessKeySecret = ""; //密钥 public $version = "2014-11-11"; //API版本号 public $format = "JSON"; //返回值类型 private $domainParameters = ""; public $video_host=''; //推流域名 public $appName="test"; //应用名 public $privateKey=""; //鉴权 public $vhost=""; //加速域名 public $msg; /** * 访问阿ali接口进行请求并返回ali返回值 * @param array $apiParams 接口自定义参数 * @param string $credential 传值方式默认get * @param string $domain 请求地址 */ public function aliApi($apiParams,$credential="GET", $domain="cdn.aliyuncs.com") { date_default_timezone_set("GMT"); $apiParams['Format'] = $this->format; $apiParams['SignatureMethod'] = "HMAC-SHA1";//签名算法 $apiParams['SignatureNonce'] = rand(100000,999999);//随机数 $apiParams['SignatureVersion'] = '1.0';//签名算法版本 $apiParams['TimeStamp'] =date('Y-m-d\TH:i:s\Z');//请求时间 $apiParams['Version'] = $this->version; $apiParams["AccessKeyId"]=$this->accessKeyId; $accessSecret = $this->accessKeySecret; $apiParams["Signature"] = $this->computeSignature($credential,$apiParams,$accessSecret); if($credential == "POST") { $requestUrl = "https://". $domain . "/"; foreach ($apiParams as $apiParamKey => $apiParamValue) { $this->putDomainParameters($apiParamKey,$apiParamValue); } $url= $requestUrl; } else { $requestUrl = "http://". $domain . "/?"; foreach ($apiParams as $apiParamKey => $apiParamValue) { $requestUrl .= "$apiParamKey=" . urlencode($apiParamValue) . "&"; } $url= substr($requestUrl, 0, -1); } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false); //处理http证书问题 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $ret = curl_exec($ch); if (false === $ret) { $ret = curl_errno($ch); $this->message = 'curl方法出错,错误号:'.$ret; return false; } curl_close($ch); if( $this->format == "JSON") return json_decode($ret,true); elseif($this->format =="XML"){ return $this->xmlToArray($ret); }else return $ret; } /** * 计算签名 * @param $credential * @param $parameters * @param $accessKeySecret * @return string */ private function computeSignature($credential,$parameters, $accessKeySecret) { ksort($parameters); $canonicalizedQueryString = ''; foreach($parameters as $key => $value) { $canonicalizedQueryString .= '&' . $this->percentEncode($key). '=' . $this->percentEncode($value); } $stringToSign = $credential.'&%2F&' . $this->percentencode(substr($canonicalizedQueryString, 1)); $signature = $this->signString($stringToSign, $accessKeySecret."&"); return $signature; } /** * url编码 * @param $str * @return mixed|string */ protected function percentEncode($str) { $res = urlencode($str); $res = preg_replace('/\+/', '%20', $res); $res = preg_replace('/\*/', '%2A', $res); $res = preg_replace('/%7E/', '~', $res); return $res; } /** * get请求时无用没看 * @param $name * @param $value */ public function putDomainParameters($name, $value) { $this->domainParameters[$name] = $value; } /** * 对待加密字符串加密 * @param $source * @param $accessSecret * @return string */ public function signString($source, $accessSecret) { returnbase64_encode(hash_hmac('sha1', $source, $accessSecret, true)); } /** * xml转成数组 * @param $xml * @return mixed */ function xmlToArray($xml){ //禁止引用外部xml实体 libxml_disable_entity_loader(true); $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); $val = json_decode(json_encode($xmlstring),true); return $val; }}对上面的简单调用和几个常用方法例子:
<?php/** * Created by PhpStorm. * User: ForeverTime * Date: 2016/12/10 * Time: 16:27 */class Ali_Lite{ protected $config; protected $aliLive; public function __construct() { include_once 'Aliyun.php'; $this -> aliLive = new Aliyun(); } /** * 查询在线人数 * @param $domainName 直播域名 * @param $appName 应用名 * @param $streamName 推流名 */ public function describeLiveStreamOnlineUserNum($domainName,$appName,$streamName){ $apiParams = array( 'Action'=>'DescribeLiveStreamOnlineUserNum', 'DomainName'=>$domainName, 'AppName'=>$appName, 'StreamName'=>$streamName, ); return $this -> aliLive -> aliApi($apiParams,$credential="GET", $domain="cdn.aliyuncs.com"); } /** * 获取某个域名或应用下的直播流操作记录 * @param $domainName 域名 * @param $appName 应用名 * @param $streamName 推流名 */ public function describeLiveStreamsControlHistory($domainName,$appName,$startTime,$endTime){ $apiParams = array( 'Action'=>'DescribeLiveStreamsControlHistory', 'DomainName'=>$domainName, 'AppName'=>$appName, 'StartTime'=>$startTime, 'EndTime'=>$endTime, ); return $this -> aliLive -> aliApi($apiParams,$credential="GET", $domain="cdn.aliyuncs.com"); } /** * 查看指定域名下(或者指定域名下某个应用)的所有正在推的流的信息 * @param $domainName 域名 * @param $appName 应用名 * @return bool|int|mixed */ public function describeLiveStreamsOnlineList($domainName,$appName){ $apiParams = array( 'Action'=>'DescribeLiveStreamsOnlineList', 'DomainName'=>$domainName, 'AppName'=>$appName, ); return $this -> aliLive -> aliApi($apiParams,$credential="GET", $domain="cdn.aliyuncs.com"); } /** * 查询推流黑名单列表 * @param $domainName 域名 * @return bool|int|mixed */ public function describeLiveStreamsBlockList($domainName){ $apiParams = array( 'Action'=>'DescribeLiveStreamsBlockList', 'DomainName'=>$domainName, ); return $this -> aliLive -> aliApi($apiParams,$credential="GET", $domain="cdn.aliyuncs.com"); } /** * 生成推流地址 * @param $streamName 用户专有名 * @param $vhost 加速域名 * @param $time 有效时间单位秒 */ public function getPushSteam($streamName,$vhost,$time=3600){ $time = time()+$time; $videohost = $this->aliLive->video_host; $appName=$this->aliLive->appName; $privateKey=$this->aliLive->privateKey; if($privateKey){ $auth_key =md5('/'.$appName.'/'.$streamName.'-'.$time.'-0-0-'.$privateKey); $url =$videohost.'/'.$appName.'/'.$streamName.'?vhost='.$vhost.'&auth_key='.$time.'-0-0-'.$auth_key; }else{ $url = $videohost.'/'.$appName.'/'.$streamName.'?vhost='.$vhost; } return $url; } /** * 生成拉流地址 * @param $streamName 用户专有名 * @param $vhost 加速域名 * @param $type 视频格式 支持rtmp、flv、m3u8三种格式 */ public function getPullSteam($streamName,$vhost,$time=3600,$type='rtmp'){ $time = time()+$time; $appName=$this->aliLive->appName; $privateKey=$this->aliLive->privateKey; $url=''; switch ($type){ case 'rtmp': $host = 'rtmp://'.$vhost; $url = '/'.$appName.'/'.$streamName; break; case 'flv': $host = 'http://'.$vhost; $url = '/'.$appName.'/'.$streamName.'.flv'; break; case 'm3u8': $host = 'http://'.$vhost; $url = '/'.$appName.'/'.$streamName.'.m3u8'; break; } if($privateKey){ $auth_key =md5($url.'-'.$time.'-0-0-'.$privateKey); $url = $host.$url.'?auth_key='.$time.'-0-0-'.$auth_key; }else{ $url = $host.$url; } return $url; } /** * 禁止推流接口 * @param $domainName 您的加速域名 * @param $appName 应用名称 * @param $streamName 流名称 * @param $liveStareamName 用于指定主播推流还是客户端拉流, 目前支持”publisher” (主播推送) * @param $resumeTime 恢复流的时间 UTC时间 格式:2015-12-01T17:37:00Z * @return bool|int|mixed */ public function forbid($streamName,$resumeTime,$domainName='www.test.com',$appName='xnl',$liveStreamType='publisher'){ $apiParams = array( 'Action'=>'ForbidLiveStream', 'DomainName'=>$domainName, 'AppName'=>$appName, 'StreamName'=>$streamName, 'LiveStreamType'=>$liveStreamType, 'ResumeTime'=>$resumeTime ); return $this -> aliLive -> aliApi($apiParams,$credential="GET", $domain="cdn.aliyuncs.com"); } /** * 恢复直播流推送 * @param $streamName 流名称 * @param string $appName 应用名称 * @param string $liveStreamType 用于指定主播推流还是客户端拉流, 目前支持”publisher” (主播推送) * @param string $domainName 您的加速域名 */ public function resumeLive($streamName,$domainName='www.test.top',$appName='xnl',$liveStreamType='publisher'){ $apiParams = array( 'Action'=>'ResumeLiveStream', 'DomainName'=>$domainName, 'AppName'=>$appName, 'StreamName'=>$streamName, 'LiveStreamType'=>$liveStreamType, ); return $this -> aliLive -> aliApi($apiParams,$credential="GET", $domain="cdn.aliyuncs.com"); }}
0 0
- 阿里云直播服务 sdk demo php
- PHP接入阿里云市场 阿里短信服务DEMO
- 精简阿里云短信服务官方SDK及DEMO
- 阿里云 实现流媒体 直播 demo
- 阿里云 实现流媒体 直播 demo
- 阿里云 实现流媒体 直播 demo
- 阿里云Android直播demo流程
- 阿里云短信服务SDK踩坑(php)
- 阿里云直播-php接口(python->php)
- 阿里云日志服务 sdk集成
- 使用阿里云来搭建视频直播服务
- 阿里云短信服务 nodejs版本SDK,非阿里大鱼
- 七牛直播服务sdk
- PHP 阿里云oss sdk详细介绍
- 阿里云视频点播sdk代码 PHP版本
- 云服务SDK 的嵌入直播系统源码ICould!
- 阿里云 直播实现
- 阿里云直播
- mysql给root开启远程访问权限,修改root密码
- Leetcode Unique Paths
- ubuntu搭建gitlab服务器
- 手机安装burpsuit证书截取https请求
- 云计算复习笔记一
- 阿里云直播服务 sdk demo php
- 安装chardet 问题
- mysql 5.7 版本后数据没有字段 password 所以修改 root 密码 需要
- PostgreSQL表空间创建、删除
- Leetcode 85. Maximal Rectangle (Hard) (cpp)
- C#多线程同步(二)【Mutex】
- 公共子序列(lcs)
- 连续合数探求
- shell使用命令计算md5