• 阿里云直播服务 sdk demo php


    阿里云直播服务 sdk demo php

    https://www.cnblogs.com/caicaizi/p/8668165.html

    [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")  

            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 视频格式 支持rtmpflvm3u8三种格式     */  

        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 

            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-dTH:i:s');//请求时间  

            $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;  

            }  

            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]

    <?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,  

                'DomainName'=>$domainName,  

                '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;  

            $privateKey=$this->aliLive->privateKey;  

                'AppName'=>$appName,  

                'Action'=>'DescribeLiveStreamsControlHistory',  

            $apiParams = array(  

        public function describeLiveStreamsControlHistory($domainName,$appName,$startTime,$endTime){  

         */  

         * @param $streamName      推流名 

         * @param $appName         应用名 

         * @param $domainName      域名 

         * 获取某个域名或应用下的直播流操作记录 

        /** 

      

      

        }  

            return $this -> aliLive -> aliApi($apiParams,$credential="GET", $domain="cdn.aliyuncs.com");  

            );  

                'StreamName'=>$streamName,  

                'AppName'=>$appName,  

                'DomainName'=>$domainName,  

    1. 'DomainName'=>$domainName,  

         * @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");  

        }  

      

  • 相关阅读:
    一个简单的瀑布流效果
    C#遇到的一些奇怪问题
    能够按页号提取word文档文本内容的小程序,由C#实现
    设计模式学习之简单工场模式
    设计模式学习之策略模式
    检查机器是否安装了.NET Framework 或已经安装了哪些.net版本
    书籍清单
    使用Func<T>对对象进行排序
    定义一个委托的三种形式
    设计模式学习之设计原则
  • 原文地址:https://www.cnblogs.com/smilevv/p/13260666.html
Copyright © 2020-2023  润新知