七牛云直播推流php,七牛云直播云的五种推流鉴权方式

七牛云推流鉴权方式有五种:

无校验鉴权(none)

也就是给一个 URL,URL 中不含有任何的 token、key 一类的,人人都可以猜到,人人都可以按照协议往这里面推流。

肯定不会有人用这个啦。

限时鉴权(expiry)

参数:expire:过期时间,1970年1月1日到过期时间之间的秒数。

token:是经过 hmac_sha1 签算 SignStr 再经过 base64 生成。

限时鉴权sk(expiry_sk)

参数:e:过期时间,1970年1月1日到过期时间之间的秒数。

token:是经过 hmac_sha1 签算 SignStr 再经过 base64 生成,然后再在前面加上七牛云的 AccessKey 和冒号。

动态鉴权(dynamic)

参数:nonce:比上次推流使用的 nonce 大的任意值。

token:是经过 hmac_sha1 签算 SignStr 再经过 base64 生成。

静态鉴权(static)

参数:key:也就是流的 PublishKey,这个通过其 SDK 中 Stream 对象获得。

可以看出:相同含义的参数,不一定具有相同的名称。

相同名称的参数,不一定具有相同的含义。

五种鉴权方式中,后台只能设置前面 3 种,而无鉴权我们又不推荐,所以其实我们只能使用:限时鉴权(expiry)、限时鉴权sk(expiry_sk),但是这两种鉴权方式中,官方 SDK 中又恰恰没有提供,我们这里提供一下:public static string publishUrl(string accessKey, string secretKey, Stream stream, long nonce)

{

const string defaultScheme = "rtmp";

if ("dynamic".Equals(stream.PublishSecurity))

{

return generateDynamicUrl(stream, nonce, defaultScheme);

}

else if ("static".Equals(stream.PublishSecurity))

{

return generateStaticUrl(stream, defaultScheme);

}

else if ("expiry".Equals(stream.PublishSecurity))

{

// 原 SDK 中不存在此方法,这里是我们新增的。

return generateExpiryUrl(stream, nonce, defaultScheme);

}

else if ("expiry_sk".Equals(stream.PublishSecurity))

{

// 原 SDK 中不存在此方法,这里是我们新增的。

return generateExpirySKUrl(accessKey, secretKey, stream, nonce, defaultScheme);

}

else

{

// "dynamic" as default

return generateDynamicUrl(stream, nonce, defaultScheme);

}

}

///

/// 限时鉴权(expiry)。

///

///

///

///

///

private static string generateExpiryUrl(Stream stream, long expireAt, string scheme)

{

if (expireAt <= 0)

{

expireAt = DateTimeHelperClass.CurrentUnixTimeMillis() / 1000 + 3600; // 一个小时后过期。

}

string baseUri = "/" + stream.HubName + "/" + stream.Title + "?expire=" + expireAt;

string publishToken = Credentials.sign(stream.PublishKey, baseUri);

return string.Format("{0}://{1}{2}&token={3}", scheme, stream.PublishRtmpHost, baseUri, publishToken);

}

///

/// 限时鉴权sk(expiry_sk)。

///

///

///

///

///

///

///

private static string generateExpirySKUrl(string accessKey, string secretKey, Stream stream, long expireAt, string scheme)

{

if (expireAt <= 0)

{

expireAt = DateTimeHelperClass.CurrentUnixTimeMillis() / 1000 + 3600; // 一个小时后过期。

}

string baseUri = "/" + stream.HubName + "/" + stream.Title + "?e=" + expireAt;

string publishToken = Credentials.sign(secretKey, baseUri);

return string.Format("{0}://{1}{2}&token={3}:{4}", scheme, stream.PublishRtmpHost, baseUri, accessKey, publishToken);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值