我已经使用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。
答案 0 :(得分:2)
我找到了自己问题的答案。显然我需要返回this.pc.setLocalDescription();
我不知道为什么这是必要的。据我所知,pc.setLocalDescription不返回任何东西,仅具有设置pc.localDescription的副作用。在Chrome浏览器中效果很好,但在Firefox中效果不佳。