七牛直播鉴权方式

来源:互联网 发布:淘宝自动上下架软件 编辑:程序博客网 时间:2024/05/16 14:15

本篇以PHP的代码为例

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

新Portal expiry 动态推流地址

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

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

生成推流凭证:

// 构造 RTMP 推流 Pathpath = "/<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案例

0 0