Agora.io DYNAMIC_USE_STATIC_KEY 生成的 RTC Token (php)

Posted

技术标签:

【中文标题】Agora.io DYNAMIC_USE_STATIC_KEY 生成的 RTC Token (php)【英文标题】:Agora.io DYNAMIC_USE_STATIC_KEY with generated RTC Token (php) 【发布时间】:2021-02-23 08:30:46 【问题描述】:

我有一个问题: 我在尝试建立连接的控制台中得到 DYNAMIC_USE_STATIC_KEY。

2 Agora Console 和 rtcTokenBuilder 生成的 Token 不同,第二个较长,使用会出现这个错误。使用控制台 Token 一切正常。

令牌示例: 控制台:0068bedd2631cf24edea47479b64ad219ceIAAYXDdhxjKQyDWQEoqK0qEiAYo+dLSyd/YNAaflVD4PJO/ZQc0AAAAEACMMKzfQDg1YAEAAQA/ODVg

rtcTokenBuilder: 0068bedd2631cf24edea47479b64ad219ceIAADpmWghbJIToZQMC9YrQjBhtFgpdZS4tIlOkXTjk+LKe/ZQc0h39v0IgCa0wUAjQY2YAQAAQA5tjRgAwA5tjRgAgA5tjRgBAA5tjRg

rtcTokenBuilder代码sn-p:

$appID = "8*************************";
$appCertificate = "+++++++++++++++++++++++++++7";
$channelName = "Test Chamber";
$uid = 0;
$role = RtcTokenBuilder::RoleAttendee;
$expireTimeInSeconds = 300; // 5 min for test purposes
$currentTimestamp = (new DateTime("now", new DateTimeZone('UTC')))->getTimestamp();
$privilegeExpiredTs = $currentTimestamp + $expireTimeInSeconds;
$token = RtcTokenBuilder::buildTokenWithUid($appID, $appCertificate, $channelName, $uid, $role, $privilegeExpiredTs);
echo $token;

js 文件:

client.join(token, room, 0, (uid) =>  // 0 -> uid
    let localStream = AgoraRTC.createStream(
        audio: true,
        video: true
    );
    localStream.init(() => 
      .....

client.on("onTokenPrivilegeWillExpire", function()
    $.ajax(
        url: tokenGenPath, // path to rtcTokenBuilder php generator  
        method: "POST",
        success: function(data)
           newToken = data;
        ,
        error: function()
        
    );
    client.renewToken(newToken);
);

这里说,我不提供 Token 事先连接:Agora Docs

附:我还注意到,如果我在 Agora 控制台中生成一个 Token 作为开始,并且在这个 Token 过期的情况下,一个新的 valid Token 会从 rtcTokenBuilder 生成并继续连接/对话。

【问题讨论】:

@Hermes,我看到了,你在 WebRTC 技术方面有很多经验,尤其是在 Agora 方面,你能帮我吗? 【参考方案1】:

所以,问题出在 2 个地方。首先,我改变了 AJAX 调用

来自

client.on("onTokenPrivilegeWillExpire", function()
  $.ajax(
    url: tokenGenPath, // path to rtcTokenBuilder php generator  
    method: "POST",
    success: function(data)
       newToken = data;
    ,
    error: function()
    
 );
  client.renewToken(newToken);
);

收件人:

client.on("onTokenPrivilegeWillExpire", function()
   $.post(tokenGenPath, function (token)
      client.renewToken(token);
    );
);

第二,我通过客户端初始化将第一个令牌生成移出主函数:

$.post(tokenGenPath, function (data)
   token = data;    
);

function runApp (room, client, token)
    client.join(token, room, 0, (uid) =>  // 0 -> uid
       let localStream = AgoraRTC.createStream(
       audio: true,
       video: true
    );
    localStream.init(() => 
        .....

【讨论】:

以上是关于Agora.io DYNAMIC_USE_STATIC_KEY 生成的 RTC Token (php)的主要内容,如果未能解决你的问题,请参考以下文章

使用 agora.io 发布流

在 agora.io 创建一个频道

Agora.io 语音通话快速入门无法正常工作

agora.io 是不是可以同时托管多个流?

WebRTC 与 Agora.io:SwitchCamera?

在 C# 上生成 Agora.io 动态密钥 [关闭]