Webrtc setRemoteDescription 不适用于呼叫者
Webrtc setRemoteDescription don't work for caller
部分代码如下所示:
if (message.type === 'offer') {
console.log("got offer");
console.log(message);
pc.setRemoteDescription(new SessionDescription(message));
console.log(pc);
createAnswer();
}
else if (message.type === 'answer') {
console.log("got answer");
console.log(message);
pc.setRemoteDescription(new SessionDescription(message));
console.log(pc);
}
Calee设置远程描述成功,pc.remoteDescription
已填写。但是来电者...收到与被叫者相同的消息,但是在 pc.setRemoteDescription(new SessionDescription(message));
得到 pc.remoteDescription
空并且注意到发生之后。被叫方准备接收流,但呼叫方卡住了。
我认为问题是因为 setRemoteDescription
失败,或者它与 createAnswer
之间存在竞争条件,因此将其添加到成功回调中,为了清楚起见,还要添加一个错误回调...
类似于:
if (message.type === 'offer') {
console.log("got offer");
console.log(message);
pc.setRemoteDescription(new SessionDescription(message), function(){
console.log(pc);
createAnswer();
}, console.error.bind(console));
}
else if (message.type === 'answer') {
console.log("got answer");
console.log(message);
pc.setRemoteDescription(new SessionDescription(message), console.log.bind(console, 'success'), console.error.bind(console));
}
如果支持 Promise 和 ES6:
if (message.type === 'offer') {
console.log("got offer");
console.log(message);
pc.setRemoteDescription(new SessionDescription(message))
.then(() =>{
console.log('success...', pc);
createAnswer();
}).catch(e => console.error(e));
}
else if (message.type === 'answer') {
console.log("got answer");
console.log(message);
pc.setRemoteDescription(new SessionDescription(message))
.then(() => console.log('success...', pc))
.catch(e => console.error(e));
}
部分代码如下所示:
if (message.type === 'offer') {
console.log("got offer");
console.log(message);
pc.setRemoteDescription(new SessionDescription(message));
console.log(pc);
createAnswer();
}
else if (message.type === 'answer') {
console.log("got answer");
console.log(message);
pc.setRemoteDescription(new SessionDescription(message));
console.log(pc);
}
Calee设置远程描述成功,pc.remoteDescription
已填写。但是来电者...收到与被叫者相同的消息,但是在 pc.setRemoteDescription(new SessionDescription(message));
得到 pc.remoteDescription
空并且注意到发生之后。被叫方准备接收流,但呼叫方卡住了。
我认为问题是因为 setRemoteDescription
失败,或者它与 createAnswer
之间存在竞争条件,因此将其添加到成功回调中,为了清楚起见,还要添加一个错误回调...
类似于:
if (message.type === 'offer') {
console.log("got offer");
console.log(message);
pc.setRemoteDescription(new SessionDescription(message), function(){
console.log(pc);
createAnswer();
}, console.error.bind(console));
}
else if (message.type === 'answer') {
console.log("got answer");
console.log(message);
pc.setRemoteDescription(new SessionDescription(message), console.log.bind(console, 'success'), console.error.bind(console));
}
如果支持 Promise 和 ES6:
if (message.type === 'offer') {
console.log("got offer");
console.log(message);
pc.setRemoteDescription(new SessionDescription(message))
.then(() =>{
console.log('success...', pc);
createAnswer();
}).catch(e => console.error(e));
}
else if (message.type === 'answer') {
console.log("got answer");
console.log(message);
pc.setRemoteDescription(new SessionDescription(message))
.then(() => console.log('success...', pc))
.catch(e => console.error(e));
}