阿里云直播服务 sdk demo php
- <?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)
- {
- return base64_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");
- }
- }
阿里云直播服务 sdk demo php的更多相关文章
- 阿里云直播PHP SDK如何使用
前一篇聊了聊关于阿里云直播,如何进行进行调试,ok,那这篇我们就聊一聊关于阿里云直播的SDK(当然是关于PHP的),基于下面的原因: 1.直播云没有单独的SDK,直播部分的SDK是直接封装在CDN的相 ...
- 阿里云直播 C# SDK 如何使用
阿里云直播SDK的坑 1.直播云没有单独的SDK,直播部分被封装在CDN的相关SDK当中. 2.针对SDK,没有相关Demo. 3.针对SDK,没有相关的文档说明. 4.针对SDK的说明,官网上的说明 ...
- 阿里云视频服务SDK
原文地址:https://help.aliyun.com/document_detail/51992.html?spm=5176.doc52200.6.668.Sn3AjC SDK下载 更新时间:20 ...
- 基于阿里云直播实现视频推流(ffmpeg)/拉流(Django2.0)以及在线视频直播播放(支持http/https)功能
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_146 由于5g网络的光速推广,视频业务又被推上了风口浪尖,在2019年初我们还在谈论照片,短视频等关键字,而进入2020年,我们津 ...
- 阿里云直播鉴权java代码示例
段时间公司需要做直播服务,所以就研究了一下阿里云的直播,在直播里面,最重要的就是url的鉴权操作(验证推流或者拉流的有效性),在网上找了很多代码,都没有发现java的demo,所以就写篇播客记录一下, ...
- iOS直播集成和问题总结(阿里云直播)
https://www.jianshu.com/p/714ce954e628 最近接手公司的直播项目,对以前遗留的问题做处理和优化, 于是顺便看了下阿里云直播的文档,在下面写下对直播的理解和遇到的问题 ...
- 15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布
本文主要介绍如何在阿里云容器服务Kubernetes上快速安装部署Jenkins X Platform并结合demo实践演示GitOps的操作流程. 注意:本文中使用的jx工具.cloud-envir ...
- 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
摘要: 全球开源区块链领域影响最为广泛的Hyperledger Fabric日前宣布了1.1版本的正式发布,带来了一系列丰富的新功能以及在安全性.性能与扩展性等方面的显著提升.阿里云容器服务区块链解决 ...
- thinkphp使用阿里云OSS最新SDK,文件部署
这文章是建立在你已经注册号阿里云的OSS,和创建好Bucket前提下: 其实阿里云的帮助与文档写的很详细,这里只说一下源码方式 1.phpsdk下载地址(摘自阿里云OSS的帮助与文档)(也有我自己下载 ...
随机推荐
- 【BZOJ1492】【NOI2007】货币兑换
我果然不会斜率优化 原题: 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下 简称B券).每个持有金券的顾客都有一个自己的帐户.金券的数目可以是 ...
- Hibernate(二)
性能分析 抓取策略 研究对象 研究怎么样提取集合的,该策略应该作用与set元素上 研究从一的一方加载多的一方 案例 查询cid为1的班级的所有的学生 明:通过一条sql语句:左外链接,把classes ...
- OpenGL编程-OpenGL框架-win32项目
在win32项目中开发的程序 小知识: 控制台应用程序运行就是dos的界面 项目一般采用了可视化开发 开发出来的东西就像QQ之类的 是有窗口界面的 程序运行结果是这样的 源代码:对第45行进行覆盖 # ...
- centos7配置lamp成功安装过
linux+apache+mysql/mariadb+php 首先apache的安装: yum install httpd 接着mysql/mariadb的安装: yum install mysql ...
- NPOI之Excel——合并单元格、设置样式、输入公式、设置筛选等
首先建立一个空白的工作簿用作测试,并在其中建立空白工作表,在表中建立空白行,在行中建立单元格,并填入内容: //建立空白工作簿 IWorkbook workbook = new HSSFWorkboo ...
- java_架构与模式
框架有哪些?C++语言的QT.MFC.gtk,Java语言的SSH,php语言的 smarty(MVC模式),python语言的django(MTV模式)等等设计模式有哪些?工厂模式.适配器模式.策略 ...
- script标签的同步和异步
1).把<script>标签放在<head>中意味着必须等到全部的js代码都下载解析和执行完成以后,才开始展现页面内容,为避免这个问题一般把js代码全部放在<body&g ...
- mongodb之 3.4.0 mongodb sharing 副本集群搭建
系统系统 centos6.5三台服务器:10.100.25.42/43/44安装包: mongodb-linux-x86_64-rhel62-3.4.0.tgz 服务器规划:mongos mongos ...
- Laravel $request添加数据或数据修改
laravel开发项目的时候,很多时候我们从$request里获取请求参数,今天在做项目的时候,遇到这样一个需求,就是请求参数到后台,后台需要根据判断重新给$request赋值,那如何去处理的 使用 ...
- 手动增加pe节并修改oep
一直想学学怎么动动pe文件,学习了几篇文章尤其是寒晨的文章后,自己动手也尝试了一下加节和修改oep,写出来供和我一样菜的一起进步. 一. 增加pe节需要的操作 1. 确定内存中的节的 ...