我已经使用WebRTC构建了一个简单的流服务。我目前仍通过localhost运行所有程序。当前在使用Chrome浏览器时一切正常,但是在使用Firefox时无法连接。我正在使用WebRTC-Adapter垫片。

问题似乎源于peerConnection.localDescription始终等于null,并且无法将localDescription发送给对等方,或者无法正确设置remoteDescription。

这是我的代码片段。这仅涵盖正在启动p2p连接的流的收件人。流媒体已经设置了本地流,并设置了自己的本地和远程描述,然后将localDescription发送给接收者。 sendRecipientDescription()仅处理通过套接字将sdp发送到流媒体。 PC_Config仅包含一个STUN服务器:

setUpRecipient = () => {
  this.createPeerConnection();
  this.pc
    .createOffer({ offerToReceiveVideo: true })
    .then(offer => {
      this.pc.setLocalDescription(offer);
    })
    .then(() => {
      this.sendRecipientDescription();
      console.log('recipient local description ', this.pc.localDescription);
    })
    .catch(e => {
      console.log('error recipient set up ', e);
    });
};

createPeerConnection = () => {
  try {
    this.pc = new RTCPeerConnection(PC_CONFIG);
    this.pc.onicecandidate = this.handleIceCandidate;
    this.pc.ontrack = this.handleRemoteStreamAdded;
    this.pc.onremovetrack = this.handleRemoteStreamRemoved;
    this.pc.oniceconnectionstatechange = this.handleIceStateChange;
    console.log('Created RTCPeerConnection', this.pc.localDescription);
  } catch (e) {
    console.log('Failed to create PeerConnection, exception: ', e.message);
  }
};


使用Chrome浏览器时,this.pc.localDescription返回预期值。使用Firefox浏览器时,this.pc.localDescription始终为null,根本没有RTCSessionDescription。当我在setLocalDescription之后进行console.log(this.pc)时,似乎localDescription确实为空:RTCPeerConnection un-expanded

但是,当我展开RTCPeerConnection对象时,您会看到localDescription似乎已正确设置:RTCPeerConnection expanded。但是,当我尝试发送this.pc.localDescription时,它仅发送null。

最佳答案

我找到了自己问题的答案。显然我需要返回this.pc.setLocalDescription();

我不知道为什么这是必要的。据我所知,pc.setLocalDescription不返回任何内容,仅具有设置pc.localDescription的副作用。它在Chrome浏览器中工作得很好,但在Firefox中却不能。

07-26 07:13