阿里雲視頻直播的相關準本工做(驗籤)

簡單說下 開發中遇到的坑。這裏用到的是 阿里雲的視頻直播服務,其實坑仍是挺多的。
阿里雲手冊裏寫了的我就再也不贅述。直接上代碼(基於tp3.2)json

驗籤服務器

/**
     * 模擬GET
     */
    public  function httpsGet( $url, $post='',$json=true ) {
        date_default_timezone_set("UTC");
        $Timestamp =  date('c');
        $Timestamp = explode('+',$Timestamp);
        if( is_array( $post ) ){
            $public = [
                'Version'=>'2016-11-01',
                'Format'=> 'json',
                'AccessKeyId'=>$this->AccessKeyId,
                'SignatureMethod'=>'HMAC-SHA1',
                'Timestamp'=>$Timestamp[0].'Z',
                'SignatureVersion'=>'1.0',
                'SignatureNonce'=>$this->uuid(),
            ];
            $post = array_merge($public,$post);
            $Signature = self::getSignature($post,$this->AccessKeySecret);
            foreach( $post as $key => $value )
            {
                $param .= $key . '=' . $value . '&';
            }
            $param .='Signature='.$Signature;
            $urls = $url . '?' .$param;
        }else{
            $urls = $url;
        }

        //初始化
        $curl = curl_init();
        //設置抓取的url
        curl_setopt( $curl, CURLOPT_URL, $urls );
        //設置獲取的信息以文件流的形式返回,而不是直接輸出。
        curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false );
        curl_setopt( $curl, CURLOPT_SSL_VERIFYHOST, false );


        //執行命令
        $result = curl_exec($curl);
        //獲取服務器響應狀態
        $httpCode = curl_getinfo( $curl , CURLINFO_HTTP_CODE );

        //關閉URL請求
        curl_close($curl);

        $result = json_decode( $result , true );

        return $result;
    }
    
    public function getSignature($parameters, $access_key_secret){
        ksort($parameters);
        $StringToSign = 'GET&'.urlencode('/').'&';
        $q_str = '';
        foreach($parameters as  $key=>$kval){
            $q_str .= urlencode($key).'='.urlencode($kval).'&';
        }
        $q_str = substr($q_str,0,-1);
        $StringToSign .= urlencode($q_str);
        $ok_url = urlencode(base64_encode(hash_hmac("sha1",$StringToSign,$access_key_secret.'&',true)));
        return $ok_url;
    }
    
    public function uuid($prefix = '')
    {
        $chars = md5(uniqid(mt_rand(), true));
        $uuid  = substr($chars,0,8) . '-';
        $uuid .= substr($chars,8,4) . '-';
        $uuid .= substr($chars,12,4) . '-';
        $uuid .= substr($chars,16,4) . '-';
        $uuid .= substr($chars,20,12);
        return $prefix . $uuid;
    }

獲取驗籤的方法是個坑。我在阿里雲下工單問出來demo的都是錯的-.-
好在後來本身弄出來了 curl

httpget 裏面的 Timestamp參數也是個坑demo裏面是拼接出來的(最開始覺得函數能直接獲取)。
最後 我在本身開發的時候 百度了不少,可是幫助並不 但願這些代碼能幫到正在準備研究直播的你。。。函數

相關文章
相關標籤/搜索