setChannelProfile
中的 profile
为 LIVE_BROADCASTING
的场景。连麦鉴权,主要用于控制频道内的用户是否有发布流的权限,需要开发者通过自己的业务服务端部署并生成 Token、声网服务器再对生成的 Token 校验实现。
该功能可以确保频道内的发流用户都经过授权,从而防止黑客通过利用业务漏洞或盗取 Token 进行直播间炸房等行为。
开始前请确保你的 app 满足如下条件:
本文以 C++ 的 API 为例,介绍生成 Token 的 role
参数变更方式。具体的参数解释也适用于其他语言。
// API
static std::string buildTokenWithUid(
const std::string& appId,
const std::string& appCertificate,
const std::string& channelName,
uint32_t uid,
UserRole role,
uint32_t privilegeExpiredTs = 0);
// 示例代码
int main(int argc, char const *argv[]) {
// 请填入你的项目 App ID
std::string appID = "970Cxxxxxxxxxxxxxxxxxxxxxxx1b33";
// 请填入你的项目 App 证书
std::string appCertificate = "5CFdxxxxxxxxxxxxxxxxxxxxxxx5d3b";
// 请填入频道名
std::string channelName= "7d72xxxxxxxxxxxxxxxxxxxxxxbdda";
// 请填入 uid。如果填 0,则表示不对 uid 鉴权
uint32_t uid = 2882341273;
// Token 服务过期时间
uint32_t expirationTimeInSeconds = 3600;
uint32_t currentTimeStamp = time(NULL);
uint32_t privilegeExpiredTs = currentTimeStamp + expirationTimeInSeconds;
std::string result;
result = RtcTokenBuilder::buildTokenWithUid(
appID, appCertificate, channelName, uid, UserRole::Role_Publisher,
privilegeExpiredTs);
std::cout << "Token With Int Uid:" << result << std::endl;
参数 | 概述 |
---|---|
role | 用户发流权限:
|
你可以参考如下步骤在业务层对连麦用户的发流权限进行校验(适用于连麦观众需要上麦的场景):
Subscriber
的 Token。业务服务器将生成的角色为 Subscriber
的 Token 回传给客户端。joinChannel
方法时,传入以 Subscriber
权限生成的 Token。Publisher
的 Token。业务服务器将生成的权限为 Publisher
的 Token 回传给客户端。renewToken
方法将新的 Token 同步给 声网服务器。setClientRole
将用户角色切换为主播。声网服务器会在调用 setClientRole
方法的同时校验用户权限,如果 Token 角色为 Publisher
,则客户端成功获得发布流的权限。Audience
的 Token,然后调用 renewToken
,再调用 setClientRole
即可。renewToken
将新的 Token 传给 SDK。新生成的 Token 同样有服务有效期。请参考以下步骤在 声网控制台开启连麦鉴权服务:
在控制台启用连麦鉴权后,该服务会在约 5 分钟后生效。
项目一旦开启了连麦鉴权服务,则用户在频道中发流需要同时满足两个条件:
setClientRole
中设置的 role
参数为 BROADCASTER
。role
参数为 Publisher
。1. 假设用户角色为主播。升级到连麦鉴权后,会发生不能说话的情况吗?
回答:不会。但是当用户当前 Token 过期后,需要重新在服务端申请权限为 Publisher
的 Token,然后调用 renewToken
将新的 Token 同步给 SDK。
2. 假设用户角色为观众。升级到连麦鉴权后,如果该用户想要上麦变成主播说话,有哪些注意事项?
回答:app 开通连麦鉴权后,用户是否能上麦发言必须同时满足两个条件:
Publisher
setClientRole
方法中设置的 role 为 BROADCASTER
因此如果观众用户想要上麦说话,需要参考上述修改 App 层实现逻辑的步骤,获取权限为 Publisher
的 Token,并调用 renewToken
更新 Token,再调用 setClientRole
将用户角色设为主播。
为方便你对频道中的用户的发流权限进行更精细的控制,声网还提供一个同名的重载方法。支持你对用户分别设置加入频道、发布音频流、发布视频流及发布数据流的权限进行分别设置。
static std::string buildTokenWithUid(
const std:string& appId,
const std::string& appCertificate,
const std::string& channelName,
uint32_t uid,
uint32_t joinChannelPrivilegeExpiredTs = 0,
unit32_t pubAudioPrivilegeExpiredTs = 0,
uint32_t pubVideoPrivilegeExpiredTs = 0,
uint32_t pubDataStreamPrivilegeExpiredTs = 0);
该方法生成带角色权限的 RTC Token,支持对如下权限及其过期时间进行更精确的设置:
其中,发布音频、视频和数据流的权限仅在开通连麦鉴权服务后才生效。
一个用户可以设置多个权限。每个权限的最大有效时间为 24 小时。权限即将过期或已经过期后,SDK 会分别触发 onTokenPriviegeWillExpire
或 onRequestToken
回调。你需要在业务层区分即将过期或已经过期的是哪个权限,并根据业务需要及时生成新的 Token,然后调用 renewToken
将新的 Token 传给 SDK,或重新调用 joinChannel
加入频道。
参数 | 描述 |
---|---|
joinChannelPrivilegeExpiredTs | 加入频道权限的 Unix 过期时间戳,单位为秒。该值为当前时间戳和权限有效期的总和。比如,你将 joinChannelPrivilegeExpiredTs 设为当前时间戳再加 600 秒,那么加入频道的权限会在生成 10 分钟后过期。 |
pubAudioPrivilegeExpiredTs | 发布音频权限的 Unix 过期时间戳,单位为秒。该参数仅在开启连麦鉴权后生效。该值为当前时间戳和权限有效期的总和。比如,你将 pubAudioPrivilegeExpiredTs 设为当前时间戳再加 600 秒,那么发布音频的权限会在生成 10 分钟后过期。如果希望该权限永久有效,则将该参数设为当前时间戳。 |
pubVideoPrivilegeExpiredTs | 发布视频权限的 Unix 过期时间戳,单位为秒。该参数仅在开启连麦鉴权后生效。该值为当前时间戳和权限有效期的总和。比如,你将 pubVideoPrivilegeExpiredTs 设为当前时间戳再加 600 秒,那么发布视频的权限会在 10 分钟后过期。如果希望该权限永久有效,则将该参数设为当前时间戳。 |
pubDataStreamPrivilegeExpiredTs | 发布数据流权限的 Unix 过期时间戳,单位为秒。该参数仅在开启连麦鉴权后生效。该值为当前时间戳和权限有效期的总和。比如,你将 pubDataStreamPrivilegeExpiredTs 设为当前时间戳再加 600 秒,那么发布数据流的权限会在 10 分钟后过期。如果希望该权限永久有效,则将该参数设为当前时间戳。 |