提问人:Ivan Griga 提问时间:11/19/2022 最后编辑:Ivan Griga 更新时间:11/20/2022 访问量:567
Peerjs call.on “stream” 事件未触发,但 peer.on “call” 事件会触发
Peerjs call.on "stream" event isn't firing but peer.on "call" is
问:
我正在尝试创建一个用于语音聊天的 node+socket.io+express+peerjs 应用程序。
我面临的问题是我无法访问连接的对等体的流,因为由于某种原因没有触发。我试图操纵这些事件,但我仍然无法让它工作。它没有给我任何错误。我是peerjs的新手,所以非常感谢任何帮助,我已经花了无数个小时试图解决这个问题。call.on("stream")
.on
客户端调用创建和连接:
if(peerid!=-1 && peer){
if(!window.localStream){
window.localStream=new MediaStream();
}
//peer.listAllPeers((peers) => {
// console.log(peers);
//});
peerConn = peer.connect(peerid);
peerConn.on("open", ()=>{
// THIS IS FIRING
call = peer.call(peerid, window.localStream);
console.log("Connecting to: "+ peerid);
call.on("stream", (stream)=>{
// THIS IS NOT FIRING
console.log("STEAMING CALLER");
});
call.on("error", function (err) {
console.error(err);
});
});
}
客户端应答呼叫:
peer.on('connection', function(connection){
peerConn=connection;
});
peer.on('call', (incoming) => {
// THIS IS FIRING
if(!window.localStream){
window.localStream=new MediaStream();
}
console.log('Answering incoming call from ' + incoming.peer);
incoming.answer(window.localStream);
incoming.on("stream", (stream) => {
// THIS IS NOT FIRING
console.log("STREAMING CALLEE");
});
incoming.on("error", (err) => {
console.log(err);
});
});
提前感谢您的帮助!
我试图使用 捕获错误,不会抛出任何错误。我还尝试在不同的函数中插入调用事件,因为我认为这是由于在建立连接之前接听了呼叫,但无济于事。结果总是一样的:开火但不开火。我一辈子都无法弄清楚这种行为。call.on("error")
.on
peer.on("call")
"stream"
更新:经过一番折腾,我找到了一个解决方案,即将调用创建代码更改为以下内容:
peerConn.on("open", ()=>{
if(microphone&&peerMicrophone){
setTimeout(function temp() {
try {
getLocalStream();
call = peer.call(peerid, window.localStream);
call.on("stream", (stream)=>{
window.remoteAudio.srcObject = stream;
window.remoteAudio.autoplay = true;
window.peerStream = stream;
addMessage(11);
console.log("Connecting asdato: "+ peerid);
});
call.on("error", function (err) {
console.error(err);
});
} catch (error) {
setTimeout(temp, 20);
}
}, 10);
} else {
addMessage(12);
peerConn.send("vc_unavailable");
}
});
我真的不明白为什么我需要在那里添加一个超时,我通过纯粹的反复试验得到了它。有没有更优雅的解决方案来解决这个问题?
答: 暂无答案
评论