Javascript 对象在我将其传递到套接字io时丢失其原型函数
我正在使用Agora.io sdk创建一个群组视频聊天应用程序。它们为开发人员提供了一个流对象,其中包含构建应用程序所需的重要方法和属性。然而,当我把它传递给套接字io时,它就失去了它的功能。我怎样才能解决这个问题。我看到一些问题提出了类似的问题,但他们没有提供一个能够帮助我的答案。 下面是我发射的代码:Javascript 对象在我将其传递到套接字io时丢失其原型函数,javascript,socket.io,agora.io,Javascript,Socket.io,Agora.io,我正在使用Agora.io sdk创建一个群组视频聊天应用程序。它们为开发人员提供了一个流对象,其中包含构建应用程序所需的重要方法和属性。然而,当我把它传递给套接字io时,它就失去了它的功能。我怎样才能解决这个问题。我看到一些问题提出了类似的问题,但他们没有提供一个能够帮助我的答案。 下面是我发射的代码: function UIControls (stream, streamType, streamDiv) { console.log('inside UIControls :::', s
function UIControls (stream, streamType, streamDiv) {
console.log('inside UIControls :::', stream.streamId, stream.getId(), typeof(stream) === 'function')
// video button
var videoButton = document.createElement('button');
// videoButton.setAttribute('id', 'videoButton');
videoButton.setAttribute('id', 'video_'+String(stream.getId()));
videoButton.innerHTML = '<i class="fas fa-video"></i>';
var clicked = false;
videoButton.addEventListener('click', function(evt) {
toggleVideo(stream);
})
if (streamType === 'me') {
$('#me').append(videoButton);
} else {
$('#' + String(stream.getId())).append(videoButton);
}
function toggleVideo(stream) {
if (clicked) {
videoButton.innerHTML = '<i class="fas fa-video-slash"></i>';
socket.emit("sendPeerInfo_video", {
"type": "mute",
"id": String(stream.getId()),
});
clicked = false;
} else {
// stream.unmuteVideo();
videoButton.innerHTML = '<i class="fas fa-video"></i>';
socket.emit("sendPeerInfo_video", {
"type": "unmute",
"id": String(stream.getId()),
"stream": stream,
});
clicked = true;
}
}
}
函数UIControls(流、流类型、流div){
console.log('inuicontrols:::'、stream.streamId、stream.getId()、typeof(stream)=='function')
//视频按钮
var videoButton=document.createElement('button');
//setAttribute('id','videoButton');
videoButton.setAttribute('id','video_u2;'+字符串(stream.getId());
videoButton.innerHTML='';
var=false;
videoButton.addEventListener('click',函数(evt){
切换视频(流);
})
如果(streamType==='me'){
$('#me')。附加(视频按钮);
}否则{
$('#'+String(stream.getId()).append(videoButton);
}
功能切换视频(流){
如果(单击){
videoButton.innerHTML='';
socket.emit(“sendPeerInfo_视频”{
“类型”:“静音”,
“id”:字符串(stream.getId()),
});
单击=假;
}否则{
//stream.unmuteVideo();
videoButton.innerHTML='';
socket.emit(“sendPeerInfo_视频”{
“类型”:“取消静音”,
“id”:字符串(stream.getId()),
“流”:流,
});
单击=真;
}
}
}
以下是socket.on代码:
socket.on("sendPeerInfo_video", function (evt) {
if (evt.type === 'mute') {
evt.stream.muteVideo();
return $('#video_'+evt.id)[0].innerHTML = '<i class="fas fa-video-slash"></i>'
} else if (evt.type === 'unmute') {
evt.stream.unmuteVideo();
return $('#video_'+evt.id)[0].innerHTML = '<i class="fas fa-video"></i>'
}
});
socket.on(“sendPeerInfo_视频”,功能(evt){
如果(evt.type==='mute'){
evt.stream.muteVideo();
返回$('#video'+evt.id)[0]。innerHTML=''
}else if(evt.type==“取消静音”){
evt.stream.unmuteVideo();
返回$('#video'+evt.id)[0]。innerHTML=''
}
});
我无法再访问socket.on中的evt.stream.muteVideo()和evt.stream.unmuteVideo()函数
谢谢你的帮助 您使用自己的套接字有什么特别的原因吗 看看这个网站吧,它提供了群组视频通话和屏幕共享,以及使用官方软件制作的静音和取消静音等功能 一个片段,显示您实际需要为您提供的功能执行的操作示例:
var client=AgoraRTC.createClient({mode:'rtc',codec:'vp8'});
var localStreams={
uid:“”,
摄像机:{
camId:“”,
micId:“”,
流:{}
}
};
//隐藏视频
客户端打开(“静音视频”,功能(evt){
var remoteId=evt.uid;
localStreams.camera.stream.muteVideo();
});
//播放视频
客户端打开(“取消静音视频”,功能(evt){
localStreams.camera.stream.unmuteVideo();
});
//静音音频
客户端打开(“静音音频”,功能(evt){
var remoteId=evt.uid;
localStreams.camera.stream.muteAudio();
});
//取消静音音频
客户端打开(“取消静音音频”,功能(evt){
localStreams.camera.stream.unmuteAudio();
});是的,我的情况有点不同。Agora允许本地流静音或取消静音其音频和视频。远程用户无法对某人的音频和视频进行静音和取消静音。我还想实现一个举手功能——单击举手按钮,它会在远程流本地窗口中显示一个推送通知。所以我用自己的WebSocket实现了这个功能。谢谢你帮我调查这件事@JagnoorGrewal我现在编辑了我的答案来帮助解决你的问题。谢谢你的回答。我只是调查了一下,这正是我搬到WebSocket之前一直在寻找的。我们一定会落实这一点