RTCPeerConnection connectionState从未从“新”移动到“正在检查” /“已连接”

时间:2018-06-27 16:52:15

标签: javascript google-chrome webrtc

我已经从某人那里接管了一个WebRTC项目,尽管我开始全神贯注于这些概念,但我仍然为一个特定的问题所困扰:将WebRTC连接从new移到{ {1}} / checking等...

这是completed的输出范围:

enter image description here

我们的代码调用chrome://webrtc-internals

connect()

依次调用connect(mediaStream, interviewUid, applicantUid) { return new Promise((resolve, reject) => { this.connectRtcPeerConnection() .then(() => { this.connectionState = Socket.CONNECTION_STATES.connected; this.rtcPeer.addStream(mediaStream); return this.rtcPeer.createOffer({ offerToReceiveAudio: 1, offerToReceiveVideo: 1 }); }).then((offer) => { console.log('offer created', offer); return this.rtcPeer.setLocalDescription(offer); }).then(() => { const message = { id: SENDABLE_MESSAGES.connect, sdpOffer: this.rtcPeer.localDescription, interviewUid, applicantUid, }; this.sendMessageToServer(message); resolve(); }) .catch((error) => { console.error(error); reject(); }); }); }

connectRtcPeerConnection(

connectRtcPeerConnection()

此代码段永远不会执行:

) {
    return new Promise((resolve, reject) => {
      if (this.rtcPeer) {
        resolve();
      }
      console.log('started connecting');

      const rtcPeerOptions = {
        iceServers: [TRUNCATED],
      };

      console.log('rtcPeerOptions', rtcPeerOptions);
      this.rtcPeer = new RTCPeerConnection(rtcPeerOptions);
      console.log('rtcPeer object: ', this.rtcPeer);
      this.rtcPeer.onerror = reject;
      this.rtcPeer.onicecandidate = (candidate) => { this.handleIceCandidateEvent(candidate); };
      this.rtcPeer.oniceconnectionstatechange = () => {
        this.handleIceConnectionStateChangeEvent();
      };
      this.rtcPeer.onaddstream = () => { console.log('handleAddStreamEvent'); };
      this.rtcPeer.onremovestream = () => { console.log('handleRemoveStreamEvent'); };
      this.rtcPeer.onicegatheringstatechange = () => { console.log('handleIceGatheringStateChangeEvent'); };
      this.rtcPeer.onsignalingstatechange = () => { console.log('handleSignalingStateChangeEvent'); };
      this.rtcPeer.onnegotiationneeded = () => { console.log('handleNegotiationNeededEvent'); };
      resolve();
    });
  }

我已经遵循了所有条件和代码路径,目前看不到问题所在。有没有人遇到过这种情况并且能够阐明潜在的事物以供考虑/考虑?

谢谢!

2 个答案:

答案 0 :(得分:0)

好吧,您永远不会调用setRemoteDescription或通过addIceCandidate添加远程Ice候选对象。没有那个,就没有人可以与

交谈

答案 1 :(得分:0)

当我为iOS实现Kurento库时,尝试了如下操作:

  

生成的SDPOffer

     

最后设置LocalDescription

     

WebRTC开始生成IceCandidate

     

通过WebSocket发送冰候选人

     

这时,另一方发送了SDPAnswer。

     

我们已处理完SDPAnswer。

     

在我们的末端设置RemoteDescription。

     

服务器开始发送聚集在其末尾的IceCandidate。

     

在我们的末尾将这些IceCandidate添加到数组中。

     

已收到连接状态为“正在检查”的更改

     

此时已收到RemoteStream。

     

这里收到的连接状态更改为“已连接”

希望有帮助!