无法连接到 Agora 服务器

时间:2021-02-26 11:10:47

标签: agora.io agora-web-sdk-ng

我有 AGORA sdk 4.3.0,演示应用程序运行良好。

现在我将项目更改为“实时”。

我包含了生成令牌的令牌生成器,在 index.js 中适当的地方以及当我尝试连接时包含了 uid(使用 appidchannel(这是一个自定义字符串) 、uid(适当范围内的无符号整数)和由 RtcTokenBuilder.py 生成的 token(它接受 appIDappCertificatechannelName 和其他自动生成的东西,例如时间)我得到以下控制台输出;

AgoraRTC_N-4.3.0.js:402 11:53:12:684 Agora-SDK [DEBUG]: [lock-safari-1] is created.
AgoraRTC_N-4.3.0.js:403 11:53:12:698 Agora-SDK [INFO]: browser compatibility {"getDisplayMedia":true,"getStreamFromExtension":true,"supportUnifiedPlan":true,"supportMinBitrate":true,"supportSetRtpSenderParameters":true,"supportDualStream":true,"webAudioMediaStreamDest":true,"supportReplaceTrack":true,"supportWebGL":true,"webAudioWithAEC":false,"supportRequestFrame":true,"supportShareAudio":false,"supportDualStreamEncoding":false} {"name":"Chrome","version":"88","os":"Android"}
AgoraRTC_N-4.3.0.js:402 11:53:12:703 Agora-SDK [DEBUG]: [lock-client-leave-2] is created.
AgoraRTC_N-4.3.0.js:402 11:53:12:703 Agora-SDK [DEBUG]: [lock-client-publish-3] is created.
AgoraRTC_N-4.3.0.js:403 11:53:12:703 Agora-SDK [INFO]: [client-f5c02] Initializing AgoraRTC client v4.3.0 build: v4.3.0-0-g0586d79(1/27/2021, 4:10:54 PM), mode: rtc, codec: vp8
AgoraRTC_N-4.3.0.js:403 11:53:15:173 Agora-SDK [INFO]: [client-f5c02] start join channel  714d7057-e9d7-4c2e-98c9-759b597e517c
AgoraRTC_N-4.3.0.js:403 11:53:15:174 Agora-SDK [INFO]: [client-f5c02] connection state change: DISCONNECTED -> CONNECTING
AgoraRTC_N-4.3.0.js:402 11:53:15:174 Agora-SDK [DEBUG]: [client-f5c02] new Session 9FBAD23D03AA6980E99E4E8B87B620DB
AgoraRTC_N-4.3.0.js:403 11:53:15:179 Agora-SDK [INFO]: start create microphone audio track with config {} trackId track-56b46ef1
AgoraRTC_N-4.3.0.js:402 11:53:15:179 Agora-SDK [DEBUG]: [track-56b46ef1] GetUserMedia {"audio":{}}
AgoraRTC_N-4.3.0.js:403 11:53:15:182 Agora-SDK [INFO]: start create camera video track with config {"encoderConfig":"480p_1"} trackId track-5662136d
AgoraRTC_N-4.3.0.js:402 11:53:15:182 Agora-SDK [DEBUG]: [track-5662136d] GetUserMedia {"video":{"width":640,"height":480,"frameRate":15}}
AgoraRTC_N-4.3.0.js:402 11:53:15:185 Agora-SDK [DEBUG]: [client-f5c02] Connect to choose_server: https://webrtc2-ap-web-1.agora.io/api/v1
AgoraRTC_N-4.3.0.js:402 11:53:15:186 Agora-SDK [DEBUG]: [client-f5c02] Connect to choose_server: https://webrtc2-ap-web-2.agoraio.cn/api/v1
AgoraRTC_N-4.3.0.js:402 11:53:15:273 Agora-SDK [DEBUG]: [lock-track-56b46ef1-4] is created.
AgoraRTC_N-4.3.0.js:403 11:53:15:273 Agora-SDK [INFO]: create audio context
AgoraRTC_N-4.3.0.js:403 11:53:15:315 Agora-SDK [INFO]: create microphone audio track success, trackId: track-56b46ef1
AgoraRTC_N-4.3.0.js:402 11:53:16:189 Agora-SDK [DEBUG]: [client-f5c02] Connect to backup choose_server: https://webrtc2-ap-web-3.agora.io/api/v1
AgoraRTC_N-4.3.0.js:402 11:53:16:189 Agora-SDK [DEBUG]: [client-f5c02] Connect to backup choose_server: https://webrtc2-ap-web-4.agoraio.cn/api/v1
AgoraRTC_N-4.3.0.js:402 11:53:16:275 Agora-SDK [DEBUG]: [lock-track-5662136d-5] is created.
AgoraRTC_N-4.3.0.js:403 11:53:16:277 Agora-SDK [INFO]: create camera video success, trackId: track-5662136d
AgoraRTC_N-4.3.0.js:403 11:53:16:825 Agora-SDK [INFO]: [client-f5c02] connection state change: CONNECTING -> DISCONNECTED
AgoraRTC_N-4.3.0.js:402 11:53:16:828 Agora-SDK [DEBUG]: [client-f5c02] reset client
AgoraRTC_N-4.3.0.js:402 11:53:16:829 Agora-SDK [DEBUG]: [lock-client-publish-6] is created.
AgoraRTC_N-4.3.0.js:402 11:53:16:830 Agora-SDK [DEBUG]: [client-f5c02] reset client
AgoraRTC_N-4.3.0.js:402 11:53:16:830 Agora-SDK [DEBUG]: [lock-client-publish-7] is created.

出于某种原因,没有错误或警告,我只是断开连接 -

AgoraRTC_N-4.3.0.js:403 11:53:16:825 Agora-SDK [INFO]: [client-f5c02] connection state change: CONNECTING -> DISCONNECTED

Javascript 不是我的主要内容,我真的不知道如何调试它。

非常感谢您的帮助。

Token Generation (uses token_uid option):

appID = config("AGORA_APP_ID")
appCertificate = config("AGORA_APP_CERTIFICATE")
channelName = "channel_name"
uid = "<user_id>"
userAccount = "0"
expireTimeInSeconds = 3600
currentTimestamp = int(time.time())
privilegeExpiredTs = currentTimestamp + expireTimeInSeconds


def generate_token():
    token_uid = RtcTokenBuilder.buildTokenWithUid(appID, appCertificate, channelName, uid, Role_Attendee, privilegeExpiredTs)
    # print("Token with int uid: {}".format(token_uid))
    token_account = RtcTokenBuilder.buildTokenWithAccount(appID, appCertificate, channelName, userAccount, Role_Attendee, privilegeExpiredTs)
    # print("Token with user account: {}".format(token_account))
    return token_uid

到 index.js 我在提交加入表单时传递 appid 和令牌,以及我在表单中组成的频道名称。

// create Agora client
var client = AgoraRTC.createClient({ mode: "rtc", codec: "vp8" });

var localTracks = {
  videoTrack: null,
  audioTrack: null
};
var remoteUsers = {};
// Agora client options
var options = {
  appid: null,
  channel: null,
  // uid: 123456,
  uid: null,
  token: null
};

// the demo can auto join channel with params in url
$(() => {
  var urlParams = new URL(location.href).searchParams;
  options.appid = urlParams.get("appid");
  options.channel = urlParams.get("channel");
  options.token = urlParams.get("token");
  // options.uid = 123456;
  if (options.appid && options.channel) {
    $("#appid").val(options.appid);
    $("#token").val(options.token);
    $("#channel").val(options.channel);
    // $("#uid").val(options.uid);
    $("#join-form").submit();
  }
})

$("#join-form").submit(async function (e) {
  e.preventDefault();
  $("#join").attr("disabled", true);
  try {
    options.appid = $("#appid").val();
    options.token = $("#token").val();
    options.channel = $("#channel").val();
    // options.uid = 123456;
    await join();
    if(options.token) {
      $("#success-alert-with-token").css("display", "block");
    } else {
      $("#success-alert a").attr("href", `index.html?appid=${options.appid}&channel=${options.channel}&token=${options.token}`);
      $("#success-alert").css("display", "block");
    }
  } catch (error) {
    console.error(error);
  } finally {
    $("#leave").attr("disabled", false);
  }
})

$("#leave").click(function (e) {
  leave();
})

async function join() {

  // add event listener to play remote tracks when remote user publishs.
  client.on("user-published", handleUserPublished);
  client.on("user-unpublished", handleUserUnpublished);
  // join a channel and create local tracks, we can use Promise.all to run them concurrently
  [ options.uid, localTracks.audioTrack, localTracks.videoTrack ] = await Promise.all([
    // join the channel
    client.join(options.appid, options.channel, options.token || null),
    // client.join(options.appid, options.channel, options.token, options.uid || null),
    // create local tracks, using microphone and camera
    AgoraRTC.createMicrophoneAudioTrack(),
    AgoraRTC.createCameraVideoTrack()
  ]);
  
  // play local video track
  localTracks.videoTrack.play("local-player");
  $("#local-player-name").text(`localVideo(${options.uid})`);

  // publish local tracks to channel
  await client.publish(Object.values(localTracks));
  console.log("publish success");


}

async function leave() {
  for (trackName in localTracks) {
    var track = localTracks[trackName];
    if(track) {
      track.stop();
      track.close();
      localTracks[trackName] = undefined;
    }
  }

  // remove remote users and player views
  remoteUsers = {};
  $("#remote-playerlist").html("");

  // leave the channel
  await client.leave();

  $("#local-player-name").text("");
  $("#join").attr("disabled", false);
  $("#leave").attr("disabled", true);
  console.log("client leaves channel success");
}

async function subscribe(user, mediaType) {
  const uid = user.uid;
  // subscribe to a remote user
  await client.subscribe(user, mediaType);
  console.log("subscribe success");
  if (mediaType === 'video') {
    const player = $(`
      <div id="player-wrapper-${uid}">
        <p class="player-name">remoteUser(${uid})</p>
        <div id="player-${uid}" class="player"></div>
      </div>
    `);
    $("#remote-playerlist").append(player);
    user.videoTrack.play(`player-${uid}`);
  }
  if (mediaType === 'audio') {
    user.audioTrack.play();
  }
}

function handleUserPublished(user, mediaType) {
  const id = user.uid;
  remoteUsers[id] = user;
  subscribe(user, mediaType);
}

function handleUserUnpublished(user) {
  const id = user.uid;
  delete remoteUsers[id];
  $(`#player-wrapper-${id}`).remove();
}

0 个答案:

没有答案