[php]
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2016/12/8 0008
  6. * Time: 11:05
  7. */
  8. class Aliyun{
  9. private $accessKeyId = "";          //密钥ID
  10. private $accessKeySecret = "";      //密钥
  11. public  $version = "2014-11-11";    //API版本号
  12. public  $format = "JSON";           //返回值类型
  13. private $domainParameters = "";
  14. public  $video_host='';                //推流域名
  15. public  $appName="test";            //应用名
  16. public  $privateKey="";             //鉴权
  17. public  $vhost="";                  //加速域名
  18. public  $msg;
  19. /**
  20. * 访问阿ali接口进行请求并返回ali返回值
  21. * @param array $apiParams 接口自定义参数
  22. * @param string $credential 传值方式默认get
  23. * @param string $domain 请求地址
  24. */
  25. public function aliApi($apiParams,$credential="GET", $domain="cdn.aliyuncs.com")
  26. {
  27. date_default_timezone_set("GMT");
  28. $apiParams['Format'] = $this->format;
  29. $apiParams['SignatureMethod'] = "HMAC-SHA1";//签名算法
  30. $apiParams['SignatureNonce'] = rand(100000,999999);//随机数
  31. $apiParams['SignatureVersion'] = '1.0';//签名算法版本
  32. $apiParams['TimeStamp'] =date('Y-m-d\TH:i:s\Z');//请求时间
  33. $apiParams['Version'] = $this->version;
  34. $apiParams["AccessKeyId"]=$this->accessKeyId;
  35. $accessSecret = $this->accessKeySecret;
  36. $apiParams["Signature"] = $this->computeSignature($credential,$apiParams,$accessSecret);
  37. if($credential == "POST") {
  38. $requestUrl = "https://". $domain . "/";
  39. foreach ($apiParams as $apiParamKey => $apiParamValue)
  40. {
  41. $this->putDomainParameters($apiParamKey,$apiParamValue);
  42. }
  43. $url= $requestUrl;
  44. }
  45. else {
  46. $requestUrl = "http://". $domain . "/?";
  47. foreach ($apiParams as $apiParamKey => $apiParamValue)
  48. {
  49. $requestUrl .= "$apiParamKey=" . urlencode($apiParamValue) . "&";
  50. }
  51. $url= substr($requestUrl, 0, -1);
  52. }
  53. $ch = curl_init();
  54. curl_setopt($ch, CURLOPT_URL, $url);
  55. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false); //处理http证书问题
  56. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  57. $ret = curl_exec($ch);
  58. if (false === $ret) {
  59. $ret =  curl_errno($ch);
  60. $this->message = 'curl方法出错,错误号:'.$ret;
  61. return false;
  62. }
  63. curl_close($ch);
  64. if( $this->format == "JSON")
  65. return json_decode($ret,true);
  66. elseif($this->format =="XML"){
  67. return $this->xmlToArray($ret);
  68. }else
  69. return $ret;
  70. }
  71. /**
  72. * 计算签名
  73. * @param $credential
  74. * @param $parameters
  75. * @param $accessKeySecret
  76. * @return string
  77. */
  78. private function computeSignature($credential,$parameters, $accessKeySecret)
  79. {
  80. ksort($parameters);
  81. $canonicalizedQueryString = '';
  82. foreach($parameters as $key => $value)
  83. {
  84. $canonicalizedQueryString .= '&' . $this->percentEncode($key). '=' . $this->percentEncode($value);
  85. }
  86. $stringToSign = $credential.'&%2F&' . $this->percentencode(substr($canonicalizedQueryString, 1));
  87. $signature = $this->signString($stringToSign, $accessKeySecret."&");
  88. return $signature;
  89. }
  90. /**
  91. * url编码
  92. * @param $str
  93. * @return mixed|string
  94. */
  95. protected function percentEncode($str)
  96. {
  97. $res = urlencode($str);
  98. $res = preg_replace('/\+/', '%20', $res);
  99. $res = preg_replace('/\*/', '%2A', $res);
  100. $res = preg_replace('/%7E/', '~', $res);
  101. return $res;
  102. }
  103. /**
  104. * get请求时无用没看
  105. * @param $name
  106. * @param $value
  107. */
  108. public function putDomainParameters($name, $value)
  109. {
  110. $this->domainParameters[$name] = $value;
  111. }
  112. /**
  113. * 对待加密字符串加密
  114. * @param $source
  115. * @param $accessSecret
  116. * @return string
  117. */
  118. public function signString($source, $accessSecret)
  119. {
  120. return  base64_encode(hash_hmac('sha1', $source, $accessSecret, true));
  121. }
  122. /**
  123. * xml转成数组
  124. * @param $xml
  125. * @return mixed
  126. */
  127. function xmlToArray($xml){
  128. //禁止引用外部xml实体
  129. libxml_disable_entity_loader(true);
  130. $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
  131. $val = json_decode(json_encode($xmlstring),true);
  132. return $val;
  133. }
  134. }

对上面的简单调用和几个常用方法例子:

[php]
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: ForeverTime
  5. * Date: 2016/12/10
  6. * Time: 16:27
  7. */
  8. class Ali_Lite{
  9. protected  $config;
  10. protected  $aliLive;
  11. public function __construct()
  12. {
  13. include_once 'Aliyun.php';
  14. $this -> aliLive = new Aliyun();
  15. }
  16. /**
  17. * 查询在线人数
  18. * @param $domainName  直播域名
  19. * @param $appName     应用名
  20. * @param $streamName  推流名
  21. */
  22. public function describeLiveStreamOnlineUserNum($domainName,$appName,$streamName){
  23. $apiParams = array(
  24. 'Action'=>'DescribeLiveStreamOnlineUserNum',
  25. 'DomainName'=>$domainName,
  26. 'AppName'=>$appName,
  27. 'StreamName'=>$streamName,
  28. );
  29. return $this -> aliLive -> aliApi($apiParams,$credential="GET", $domain="cdn.aliyuncs.com");
  30. }
  31. /**
  32. * 获取某个域名或应用下的直播流操作记录
  33. * @param $domainName      域名
  34. * @param $appName         应用名
  35. * @param $streamName      推流名
  36. */
  37. public function describeLiveStreamsControlHistory($domainName,$appName,$startTime,$endTime){
  38. $apiParams = array(
  39. 'Action'=>'DescribeLiveStreamsControlHistory',
  40. 'DomainName'=>$domainName,
  41. 'AppName'=>$appName,
  42. 'StartTime'=>$startTime,
  43. 'EndTime'=>$endTime,
  44. );
  45. return $this -> aliLive -> aliApi($apiParams,$credential="GET", $domain="cdn.aliyuncs.com");
  46. }
  47. /**
  48. * 查看指定域名下(或者指定域名下某个应用)的所有正在推的流的信息
  49. * @param $domainName       域名
  50. * @param $appName          应用名
  51. * @return bool|int|mixed
  52. */
  53. public function describeLiveStreamsOnlineList($domainName,$appName){
  54. $apiParams = array(
  55. 'Action'=>'DescribeLiveStreamsOnlineList',
  56. 'DomainName'=>$domainName,
  57. 'AppName'=>$appName,
  58. );
  59. return $this -> aliLive -> aliApi($apiParams,$credential="GET", $domain="cdn.aliyuncs.com");
  60. }
  61. /**
  62. * 查询推流黑名单列表
  63. * @param $domainName       域名
  64. * @return bool|int|mixed
  65. */
  66. public function describeLiveStreamsBlockList($domainName){
  67. $apiParams = array(
  68. 'Action'=>'DescribeLiveStreamsBlockList',
  69. 'DomainName'=>$domainName,
  70. );
  71. return $this -> aliLive -> aliApi($apiParams,$credential="GET", $domain="cdn.aliyuncs.com");
  72. }
  73. /**
  74. * 生成推流地址
  75. * @param $streamName 用户专有名
  76. * @param $vhost 加速域名
  77. * @param $time 有效时间单位秒
  78. */
  79. public function getPushSteam($streamName,$vhost,$time=3600){
  80. $time = time()+$time;
  81. $videohost = $this->aliLive->video_host;
  82. $appName=$this->aliLive->appName;
  83. $privateKey=$this->aliLive->privateKey;
  84. if($privateKey){
  85. $auth_key =md5('/'.$appName.'/'.$streamName.'-'.$time.'-0-0-'.$privateKey);
  86. $url =$videohost.'/'.$appName.'/'.$streamName.'?vhost='.$vhost.'&auth_key='.$time.'-0-0-'.$auth_key;
  87. }else{
  88. $url = $videohost.'/'.$appName.'/'.$streamName.'?vhost='.$vhost;
  89. }
  90. return $url;
  91. }
  92. /**
  93. * 生成拉流地址
  94. * @param $streamName 用户专有名
  95. * @param $vhost 加速域名
  96. * @param $type 视频格式 支持rtmp、flv、m3u8三种格式
  97. */
  98. public function getPullSteam($streamName,$vhost,$time=3600,$type='rtmp'){
  99. $time = time()+$time;
  100. $appName=$this->aliLive->appName;
  101. $privateKey=$this->aliLive->privateKey;
  102. $url='';
  103. switch ($type){
  104. case 'rtmp':
  105. $host = 'rtmp://'.$vhost;
  106. $url = '/'.$appName.'/'.$streamName;
  107. break;
  108. case 'flv':
  109. $host = 'http://'.$vhost;
  110. $url = '/'.$appName.'/'.$streamName.'.flv';
  111. break;
  112. case 'm3u8':
  113. $host = 'http://'.$vhost;
  114. $url = '/'.$appName.'/'.$streamName.'.m3u8';
  115. break;
  116. }
  117. if($privateKey){
  118. $auth_key =md5($url.'-'.$time.'-0-0-'.$privateKey);
  119. $url = $host.$url.'?auth_key='.$time.'-0-0-'.$auth_key;
  120. }else{
  121. $url = $host.$url;
  122. }
  123. return $url;
  124. }
  125. /**
  126. * 禁止推流接口
  127. * @param $domainName        您的加速域名
  128. * @param $appName          应用名称
  129. * @param $streamName       流名称
  130. * @param $liveStareamName  用于指定主播推流还是客户端拉流, 目前支持”publisher” (主播推送)
  131. * @param $resumeTime       恢复流的时间 UTC时间 格式:2015-12-01T17:37:00Z
  132. * @return bool|int|mixed
  133. */
  134. public function forbid($streamName,$resumeTime,$domainName='www.test.com',$appName='xnl',$liveStreamType='publisher'){
  135. $apiParams = array(
  136. 'Action'=>'ForbidLiveStream',
  137. 'DomainName'=>$domainName,
  138. 'AppName'=>$appName,
  139. 'StreamName'=>$streamName,
  140. 'LiveStreamType'=>$liveStreamType,
  141. 'ResumeTime'=>$resumeTime
  142. );
  143. return $this -> aliLive -> aliApi($apiParams,$credential="GET", $domain="cdn.aliyuncs.com");
  144. }
  145. /**
  146. * 恢复直播流推送
  147. * @param $streamName              流名称
  148. * @param string $appName          应用名称
  149. * @param string $liveStreamType   用于指定主播推流还是客户端拉流, 目前支持”publisher” (主播推送)
  150. * @param string $domainName       您的加速域名
  151. */
  152. public function resumeLive($streamName,$domainName='www.test.top',$appName='xnl',$liveStreamType='publisher'){
  153. $apiParams = array(
  154. 'Action'=>'ResumeLiveStream',
  155. 'DomainName'=>$domainName,
  156. 'AppName'=>$appName,
  157. 'StreamName'=>$streamName,
  158. 'LiveStreamType'=>$liveStreamType,
  159. );
  160. return $this -> aliLive -> aliApi($apiParams,$credential="GET", $domain="cdn.aliyuncs.com");
  161. }
  162. }

阿里云直播服务 sdk demo php的更多相关文章

  1. 阿里云直播PHP SDK如何使用

    前一篇聊了聊关于阿里云直播,如何进行进行调试,ok,那这篇我们就聊一聊关于阿里云直播的SDK(当然是关于PHP的),基于下面的原因: 1.直播云没有单独的SDK,直播部分的SDK是直接封装在CDN的相 ...

  2. 阿里云直播 C# SDK 如何使用

    阿里云直播SDK的坑 1.直播云没有单独的SDK,直播部分被封装在CDN的相关SDK当中. 2.针对SDK,没有相关Demo. 3.针对SDK,没有相关的文档说明. 4.针对SDK的说明,官网上的说明 ...

  3. 阿里云视频服务SDK

    原文地址:https://help.aliyun.com/document_detail/51992.html?spm=5176.doc52200.6.668.Sn3AjC SDK下载 更新时间:20 ...

  4. 基于阿里云直播实现视频推流(ffmpeg)/拉流(Django2.0)以及在线视频直播播放(支持http/https)功能

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_146 由于5g网络的光速推广,视频业务又被推上了风口浪尖,在2019年初我们还在谈论照片,短视频等关键字,而进入2020年,我们津 ...

  5. 阿里云直播鉴权java代码示例

    段时间公司需要做直播服务,所以就研究了一下阿里云的直播,在直播里面,最重要的就是url的鉴权操作(验证推流或者拉流的有效性),在网上找了很多代码,都没有发现java的demo,所以就写篇播客记录一下, ...

  6. iOS直播集成和问题总结(阿里云直播)

    https://www.jianshu.com/p/714ce954e628 最近接手公司的直播项目,对以前遗留的问题做处理和优化, 于是顺便看了下阿里云直播的文档,在下面写下对直播的理解和遇到的问题 ...

  7. 15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布

    本文主要介绍如何在阿里云容器服务Kubernetes上快速安装部署Jenkins X Platform并结合demo实践演示GitOps的操作流程. 注意:本文中使用的jx工具.cloud-envir ...

  8. 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1

    摘要: 全球开源区块链领域影响最为广泛的Hyperledger Fabric日前宣布了1.1版本的正式发布,带来了一系列丰富的新功能以及在安全性.性能与扩展性等方面的显著提升.阿里云容器服务区块链解决 ...

  9. thinkphp使用阿里云OSS最新SDK,文件部署

    这文章是建立在你已经注册号阿里云的OSS,和创建好Bucket前提下: 其实阿里云的帮助与文档写的很详细,这里只说一下源码方式 1.phpsdk下载地址(摘自阿里云OSS的帮助与文档)(也有我自己下载 ...

随机推荐

  1. doubleclick-video-skipable

    from:https://support.google.com/adxbuyer/answer/2691733?hl=en Implement skippable functionality usin ...

  2. MySQL 5.7--多源复制(非GTID模式)

    ==================================================== 在MYSQL5.7版本中引入多源复制,一个从库允许复制多个主库的数据,每个主库被配置为一个单独 ...

  3. How To Use the AWK language to Manipulate Text in Linux

    https://www.digitalocean.com/community/tutorials/how-to-use-the-awk-language-to-manipulate-text-in-l ...

  4. 新建 django 项目

    安装 django ,就不必多说,python 环境是 python 3.6,django 安装的命令为: pip3 install django==2.1.7 开始demo,名字为 guest dj ...

  5. day 33 什么是线程? 两种创建方式. 守护线程. 锁. 死锁现象. 递归锁. GIL锁

    一.线程     1.进程:资源的分配单位    线程:cpu执行单位(实体) 2.线程的创建和销毁开销特别小 3.线程之间资源共享,共享的是同一个进程中的资源 4.线程之间不是隔离的 5.线程可不需 ...

  6. Revit api 创建楼梯图元

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. eslint 知识点

    ESlint和webpack集成,在babel编译代码开始前,进行代码规范检测. eslint的配置方式.比较多元化: js注释 .eslintrc.*文件 package.json里面配置eslin ...

  8. java自动装箱的一个例子

    Object obj = 56; int i = (Integer)obj; 第一行等价于: Object obj = Integer.valueOf(56);      Integer.valueO ...

  9. 5V与3.3V电平互转

    参考: http://blog.sina.com.cn/s/blog_7880f98301014fmj.html

  10. php+phpspreadsheet读取Excel数据存入mysql

    先生成Excel模板,然后导入Excel数据到mysql,每条数据对应图片上传到阿里云 <?php /** * Created by PhpStorm. * User: Administrato ...