我正在尝试使用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);
}
答案 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);
});
}