Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关于locahost的PeerJs问题_Javascript_Node.js_Express_Webrtc_Peerjs - Fatal编程技术网

Javascript 关于locahost的PeerJs问题

Javascript 关于locahost的PeerJs问题,javascript,node.js,express,webrtc,peerjs,Javascript,Node.js,Express,Webrtc,Peerjs,我正在尝试使用peerjs通过WebRTC实现zoom clone,问题是myPeer.on(“call”,(call)=>{它从未调用过,这同一个代码正在locahost上执行,对于编写zoom clone教程的其他人,我不确定我的代码哪里有问题 虽然它不在本地主机上工作,但是它在heroku上工作,所以我的本地主机设置的问题在哪里,为什么我没有让其他用户在本地主机上加入会议室,我不理解 script.js 常量套接字=io(“/”); const videoGrid=document.g

我正在尝试使用peerjs通过WebRTC实现zoom clone,问题是
myPeer.on(“call”,(call)=>{
它从未调用过,这同一个代码正在locahost上执行,对于编写zoom clone教程的其他人,我不确定我的代码哪里有问题

虽然它不在本地主机上工作,但是它在heroku上工作,所以我的本地主机设置的问题在哪里,为什么我没有让其他用户在本地主机上加入会议室,我不理解

script.js


常量套接字=io(“/”);
const videoGrid=document.getElementById(“视频网格”);
const myPeer=新对等(未定义{
路径:“/peerjs”,
主持人:“/”,
端口:“3030”,
});
让我的视频流;
const myVideo=document.createElement(“视频”);
myVideo.muted=true;
const peers={};
navigator.mediaDevices
.getUserMedia({
视频:没错,
音频:是的,
})
。然后((流)=>{
myVideoStream=流;
添加视频流(myVideo,stream);
//从来没给我的同伴打过电话
myPeer.on(“呼叫”,“呼叫)=>{
呼叫.应答(流);
const video=document.createElement(“视频”);
call.on(“流”,“用户视频流)=>{
添加视频流(视频,用户视频流);
});
});
socket.on(“用户已连接”,(userId)=>{
日志(“用户连接”,用户ID);
connectToNewUser(用户标识,流);
});
//输入值
让文本=$(“输入”);
//按enter键时发送消息
$(“html”).keydown(函数(e){
if(e.which==13&&text.val().length!==0){
emit(“message”,text.val());
text.val(“”);
}
});
socket.on(“createMessage”(消息)=>{
$(“ul”).append(`li class=“message”>user
${message}`); scrollToBottom(); }); }); socket.on(“用户已断开连接”,(userId)=>{ 如果(peers[userId])peers[userId].close(); }); myPeer.on(“打开”,id)=>{ 插座发射(“连接房间”,房间ID,ID); }); 函数connectToNewUser(用户ID,流){ const call=myPeer.call(userId,stream); const video=document.createElement(“视频”); call.on(“流”,“用户视频流)=>{ 添加视频流(视频,用户视频流); }); call.on(“关闭”,()=>{ video.remove(); }); 对等方[userId]=呼叫; } 函数addVideoStream(视频,流){ video.srcObject=流; video.addEventListener(“loadedmetadata”,()=>{ video.play(); }); 附加(视频); } 常量scrollToBottom=()=>{ 变量d=$(“.main_uu聊天窗口”); d、 滚动顶部(d.prop(“滚动高度”); }; 常量mutenmute=()=>{ const enabled=myVideoStream.getAudioTracks()[0]。已启用; 如果(已启用){ myVideoStream.getAudioTracks()[0]。enabled=false; setUnmuteButton(); }否则{ setMuteButton(); myVideoStream.getAudioTracks()[0]。enabled=true; } }; 常量播放停止=()=>{ 控制台日志(“对象”); let enabled=myVideoStream.getVideoTracks()[0]。已启用; 如果(已启用){ myVideoStream.getVideoTracks()[0]。enabled=false; setPlayVideo(); }否则{ setStopVideo(); myVideoStream.getVideoTracks()[0]。enabled=true; } }; 常量setMuteButton=()=>{ 常量html=` 哑巴 `; document.querySelector(“.main\u mute\u button”).innerHTML=html; }; const setUnmuteButton=()=>{ 常量html=` 取消静音 `; document.querySelector(“.main\u mute\u button”).innerHTML=html; }; const setStopVideo=()=>{ 常量html=` 停止录像 `; document.querySelector(“.main\u video\u按钮”).innerHTML=html; }; const setPlayVideo=()=>{ 常量html=` 播放视频 `; document.querySelector(“.main\u video\u按钮”).innerHTML=html;
}
函数
connectToNewUser
myPeer.on('call')之前执行。

尝试将函数修改为

socket.on("user-connected", (userId) => {
   console.log("User Connected", userId);
   //connectToNewUser(userId, stream);
   setTimeout(connectToNewUser,1000,userId,stream)
});

我也遇到了同样的问题,这似乎是socket.emit(“join-room”,room_-ID,ID);的竞争条件

服务器将发出
socket.to(roomId).broadcast.emit(“用户已连接”,userId);
这将在用户完成导航承诺之前触发调用
connectToNewUser中的对等方的函数

我解决了这个问题,确保在启动socket.emit(“join room”,room_ID,ID);
之前导航器承诺已经完成