RTCPeerConnection 连接状态永远不会从“新”移动到“检查”/“已连接”

Luc*_*ste 5 javascript google-chrome webrtc

我已经从某人那里接手了一个 WebRTC 项目,尽管我开始理解这些概念,但我仍然被一个特定问题所困扰:将 WebRTC 连接从/new移至/等......checkingcompleted

这是 的输出范围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();
        });
    });
  }
Run Code Online (Sandbox Code Playgroud)

这又调用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();
    });
  }
Run Code Online (Sandbox Code Playgroud)

这块代码永远不会被执行:

this.rtcPeer.oniceconnectionstatechange = () => {
  this.handleIceConnectionStateChangeEvent();
};
Run Code Online (Sandbox Code Playgroud)

我已经遵循了每个条件和代码路径,但目前没有看到问题可能是什么。有没有人遇到过这种情况并且能够阐明一些值得关注/考虑的潜在问题?

谢谢!

Phi*_*cke 0

好吧,您永远不会调用 setRemoteDescription 或通过 addIceCandidate 添加远程ice 候选者。没有它就没有人可以交谈