我正在努力在用户之间进行简单的 webRTC 文本通信。我的设计是在用户通过信令服务器登录时创建一个 RTCpeerconnection。之后,每当任何用户想要与其他用户创建聊天时,他们都可以通过信令服务器发送提议并相互回答。这可以通过信令服务器来实现。以下是我目前用于报价的一段代码。
//creation of RTCPeerConnection
var configuration = {
"iceServers": [{ "urls": "stun:stun.1.google.com:19302" }]
};
peerConnection = new RTCPeerConnection(configuration);
peerConnection.onicecandidate = icecandidateAdded;
提供创作者
function create_offer_touser()
{
try {
const offer = await peerConnection.createOffer();
await peerConnection.setLocalDescription(offer);
SendtoServer(offer); /* sending offer to server */
} catch (e) {
alert("Failed to create offer:"+ e);
}
}
在以下场景中,我在创建报价时遇到了问题。
设想:
User A send offer to User B, then user B reject it (doesn't answer the offer).
Next user B trying to send offer to User A back. Here i can not create the offer using createOffer() method.
错误
我收到错误消息InvalidStateError: Cannot create offer in have-remote-offer
(我正在使用Firefox
浏览器)
之后,我研究了 RTCpeerConnection 信令状态。现在我已经明白调用setLocalDescription
(或setRemoteDescription
)将更signaling state
改为"have-local-offer"
(或"have-remote-offer"
)。
现在在我的情况下,如果用户 A 向用户 B 发送报价并且用户 B 拒绝它。然后用户 A 仍处于“有远程报价”状态。所以在状态改变之前,任何其他用户都不能提供新的报价。
所以现在我想知道如何使用相同的 RTCpeerconnection 为新报价做出或强制signaling state
执行stable
。closed
peerConnection.signalingState = 'closed';
当用户拒绝报价时,我可以强行喜欢吗?有什么建议吗?如果我的理解有误,请纠正我。