javascript - 忽略未定义的事件
问题描述
我正在尝试使用 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);
}
解决方案
我认为您遇到了竞争条件,客户端在所有回调设置之前连接到通道。
尝试将您的更改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);
});
}
推荐阅读
- python-3.x - URLFetch 不支持粒度超时设置,恢复为总或默认 URLFetch 超时
- python-3.x - 检查字典是否存在,然后只定义它
- python - cs50金融中无法使索引功能工作
- regex - Laravel Valet nginx 位置正则表达式在 Mac Catalina 上不起作用
- ruby-on-rails - 错误:对于 SELECT DISTINCT,ORDER BY 表达式必须使用 order by 和 uniq 出现在选择列表中
- azure - 如何为昨天的记录指定查询 Azure 数据工厂源(Azure 表存储)
- javascript - 如何使用 Firebase 实时数据库将信息从一个用户发送到另一个用户?
- python - 为什么我的函数会改变我的输入数据?
- java - 如何在strings.xml中使用href
- google-kubernetes-engine - pods 容器 (podsgke) 和 CPU 使用率