忽略事件未定义

时间:2020-07-31 21:36:42

标签: javascript agora.io

我正在尝试使用agora视频通话。我可以连接并显示本地视频。但是,无论何时有新参与者加入呼叫,控制台都会显示以下错误消息,而不是呼叫流添加:

Ignoring event undefined {uid: "tO69JjBJ4wviREN_AAAH"}

该UID设置正确,因此该事件被触发,由于某种原因,它只是未定义。知道发生了什么吗?我在下面包含了我的代码以供参考:

// rtc object
var rtc = {
  client: null,
  joined: false,
  published: false,
  localStream: null,
  remoteStreams: [],
  params: {}
};

// Options for joining a channel
var option = {
  appID: "<APPID>",
  channel: roomName, //variable set elsewhere
  uid: null, 
  token: null //OK to be null
};


function startVideo(id){ //called from another file
  option.uid = id;

  initializeRTC();
}

function initializeRTC(){
    rtc.client = AgoraRTC.createClient({mode: "rtc", codec: "h264"});

  rtc.client.init(option.appID, function () {
    console.log("Initialized Agora SDK");
    joinChannel(option.channel);
    listenForRemoteStreams();
    }, (err) => {
    console.error(err);
  });
}

function joinChannel(){
  rtc.client.join(option.token, option.channel, option.uid, function (uid) {
      console.log("join channel: " + option.channel + " success, uid: " + uid);
      rtc.params.uid = uid;
      rtc.joined = true;
      createStream();
    }, function(err) {
      console.error("client join failed", err);
  });
}

function createStream() {
  rtc.localStream = AgoraRTC.createStream({
    streamID: rtc.params.uid,
    audio: true,
    video: true,
    screen: false,
  });

  rtc.localStream.init(function () {
    console.log("init local stream success");
    createRemoteVideoDiv(option.uid);
    rtc.localStream.play("remote-media-"+option.uid);
  }, function (err) {
    console.error("init local stream failed ", err);
  });
}


function publishStream(){
  console.log("publishing...");
  rtc.client.publish(rtc.localStream, function (err) {
    console.log("publish failed");
    console.error(err);
    return;
  });
  rtc.published = true;
}


function listenForRemoteStreams(){

  rtc.client.on("stream-added", function (evt) {  
    console.log("stream-added");
    var remoteStream = evt.stream;
    var id = remoteStream.getId();
    if (id !== rtc.params.uid) {
      rtc.client.subscribe(remoteStream, function (err) {
        console.log("stream subscribe failed", err);
      });
    }
    console.log("stream-added remote-uid: ", id);
  });


  rtc.client.on("stream-subscribed", function (evt) {
    console.log("stream-subscribed");
    var remoteStream = evt.stream;
    var id = remoteStream.getId();
    // Add a view for the remote stream.
    createRemoteVideoDiv(id);
    // Play the remote stream.
    remoteStream.play("remote-media-" + id);
    console.log("stream-subscribed remote-uid: ", id);
  });


  rtc.client.on("stream-removed", function (evt) {
    var remoteStream = evt.stream;
    var id = remoteStream.getId();
    // Stop playing the remote stream.
    remoteStream.stop("remote-media-" + id);
    // Remove the view of the remote stream. 
    removeView(id);
    console.log("stream-removed remote-uid: ", id);
  });

}



function createRemoteVideoDiv(id){
  var videoDiv = document.createElement("div");
  videoDiv.style.height = "120px";
  videoDiv.style.width = "120px";
  videoDiv.style.transform = 'scale(-1, 1)';
  videoDiv.style.clipPath = "circle(60px at center)";
  videoDiv.id = 'remote-media-'+id;
  document.getElementById("remote-media-div-"+id).appendChild(videoDiv);
}

1 个答案:

答案 0 :(得分:0)

我认为您正在陷入竞争状态,即在设置所有回调之前,客户端已连接到通道。

尝试将您的initializeRTC更改为:


function initializeRTC(){
  rtc.client = AgoraRTC.createClient({mode: "rtc", codec: "h264"});
  listenForRemoteStreams();

  rtc.client.init(option.appID, function () {
    console.log("Initialized Agora SDK");
    joinChannel(option.channel);
    
    }, (err) => {
    console.error(err);
  });
}