直播鉴权方式

最近更新时间:2017-08-16 10:20:45

本篇以PHP的代码为例

新版的鉴权方式(v2版本)

新Portal 限时鉴权方式 和无鉴权

描述:新版的主要使用的是 Access_Key / Secret_Key 来做鉴权方式

使用 RTMP 发起推流的地址。

格式:

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

说明:

参数名称 说明
RTMPPublishDomain 直播空间绑定的 RTMP 推流域名
Hub 直播空间名
StreamKey 流名
ExpireAt Unix 时间戳表示推流地址的过期时间。
Token 推流凭证

生成推流凭证:

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

// 为推流 Path 加上过期时间
path = "/<Hub>/<StreamKey>?e=<ExpireAt>"

// 计算 HMAC-SHA1 签名,并对签名结果做 URL 安全的 Base64 编码
sign = hmac_sha1(path, "Your_Secret_Key")
encodedSign = urlsafe_base64_encode(sign)

// 将 AccessKey 与 sign 拼接得到推流凭证
token = "Your_Access_Key" + ":" + encodedSign

URL 安全的 Base64 编码

示例:

rtmp://publish-rtmp.test.com/PiliSDKTest/streamkey?e=1463023142&token=7O7hf7Ld1RrC_fpZdFvU8aCgOPuhw2K4eapYOdII:-5IVlpFNNGJHwv-2qKwVIakC0ME=

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,true);
$data=Qiniu\base64_urlSafeEncode($sign);
//   /直播的流名?e=<当前时间>
$token = $accessKey.":".$data;
$token=$dynamic.$path."&token=".$token;
var_dump($token);

旧版的鉴权方式(v1版本)

描述:旧版的主要使用的是 publish来生成直播鉴权方式

static 静态推流地址

使用场景:无需要生成鉴权直接使用 直接使用PublishKey作为推流鉴权,publishUrl是: rtmp://<HubDomain>/<HubName>/<StreamTitle>?key=<PublishKey>

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,true);
$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案例

<?php
//  推流域名/hub/
$dynamic="rtmp://pili-publish.pili.echohu.top/1314xicong/";
$time = time();
//这里是/直播应用名/流名?nonce=当前的时间戳
$path = "/1314xicong/huxicongp?nonce=".$time;
//流的公钥
$PublishKey="b321c6c6-9004-4cad-b29a-7d5dec42659b";
// 计算 HMAC-SHA1 签名,并对签名结果做 URL 安全的 Base64 编码
$sign=hash_hmac('sha1',$path,$PublishKey,true);
$data=base64_urlSafeEncode($sign);
//   /直播的流名?nonce=<当前时间>
$token = "huxicongp?nonce=".$time."&token=".$data;
echo($dynamic.$token);
//安全的 Base64 编码函数
function base64_urlSafeEncode($data)
 {
        $find = array('+', '/');
        $replace = array('-', '_');
        return str_replace($find, $replace, base64_encode($data));
    }
以上内容是否对您有帮助?
  • 提交工单