七牛直播鑑權方式

本篇以PHP的代碼爲例

新版的鑑權方式(v2版本)

新Portal expiry 動態推流地址

描述:新版的主要使用的是Access_Key,Secret_Key來做鑑權方式
格式

rtmp://<RTMPPublishDomain>/<Hub>/<StreamKey>?e=<ExpireAt>&token=<Token>

生成推流憑證:

// 構造 RTMP 推流 Path
path = "/<Hub>/<StreamKey>"

// 爲推流 Path 加上過期時間
path = "/<Hub>/<StreamKey>?e=<ExpireAt>"

// 計算 HMAC-SHA1 簽名,並對簽名結果做 URL 安全的 Base64 編碼
sign = hmac_sha1(path, "Secret_Key")
encodedSign = urlsafe_base64_encode(sign)

// 將 AccessKey 與 sign 拼接得到推流憑證
token = "Access_Key" + ":" + encodedSign

PHP案例

require_once 'autoload.php';
require_once"config.php";
use Qiniu\Auth;
$accessKey=Config::ACCESS_KEY;
$secretKey=Config::SECRET_KEY;
//  推流域名
$dynamic="rtmp://pili-publish.pili.echohu.top";
$time = time()+3600;
//這裏是/直播應用名/流名?e=當前的時間戳
$path = "/1314xicong/huxicongp?e=".$time;
// 計算 HMAC-SHA1 簽名,並對簽名結果做 URL 安全的 Base64 編碼
$sign=hash_hmac('sha1',$path,$secretKey,ture);
$data=Qiniu\base64_urlSafeEncode($sign);
//   /直播的流名?e=<當前時間>
$token = $accessKey.":".$data;
$token=$dynamic.$path."&token=".$token;
var_dump($token);

舊版的鑑權方式(v1版本)

描述:舊版的主要使用的是 publish來生成直播鑑權方式

1.static 靜態推流地址

使用場景:無需要生成鑑權直接使用
直接使用PublishKey作爲推流鑑權,
publishUrl是: rtmp://<HubDomain>/<HubName>/<StreamTitle>?key=<PublishKey>

2.expiry 限時推流地址

使用場景:首先客戶估計一個推流持續有效的時間(推薦爲當前時間+30s),然後使用該時間籤算token。
publishUrl是 rtmp://<HubDomain>/<HubName>/<StreamTitle>?expire=<ExpireAt>&token=<PublishToken>
ExpireAt爲unixstamp,單位爲秒。服務器會以服務器時間爲準,在此時刻之前,允許推流。超過這個時刻,拒絕推流。token計算方法爲:

sign = hmac_sha1("/<HubName>/<StreamTitle>expire=<ExpireAt>&
<OtherKey>=<OtherValue>",
"<PublishKey>")
publishToken= url_base64(sign)

PHP案例

<?php
//  推流域名/hub
$expiry="rtmp://pili-publish.pili.echohu.top/1314xicong/";
//設定在一個小時後過期
$time = time()+60*60;
//這裏是/直播應用名/流名?expire=過期時的時間戳
$path = "/1314xicong/huxicongp?expire=".$time;
//流的公鑰
$PublishKey="b321c6c6-9004-4cad-b29a-7d5dec42659b";
// 計算 HMAC-SHA1 簽名,並對簽名結果做 URL 安全的 Base64 編碼
$sign=hash_hmac('sha1',$path,$PublishKey,ture);
$data=base64urlSafeEncode($sign);
$token = "huxicongp?expire=".$time."&token=".$data;
echo($expiry.$token);
function base64urlSafeEncode($data)
 {
        $find = array('+', '/');
        $replace = array('-', '');
        return str_replace($find, $replace, base64_encode($data));
    }

dynamic 動態推流地址

使用場景:需要祕鑰來獲取直播推流
需要籤算nonce和token。
publishUrl是 rtmp://<HubDomain>/<HubName>/<StreamTitle>?nonce=<Nonce>&token=<PublishToken>
token計算方法爲:

sig = hmac_sha1("/<HubName>/<StreamTitle>?nonce=<Nonce>&<OtherKey>=<OtherValue>", "<PublishKey>")
publishToken = url_base64(sign)```


PHP案例

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章