0

我正在努力在用户之间进行简单的 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执行stableclosed

peerConnection.signalingState = 'closed';当用户拒绝报价时,我可以强行喜欢吗?有什么建议吗?如果我的理解有误,请纠正我。

4

0 回答 0