我已经从某人那里接管了一个WebRTC项目,尽管我开始全神贯注于这些概念,但我仍然为一个特定的问题所困扰:将WebRTC连接从new
移到{ {1}} / checking
等...
这是completed
的输出范围:
我们的代码调用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();
});
}
我已经遵循了所有条件和代码路径,目前看不到问题所在。有没有人遇到过这种情况并且能够阐明潜在的事物以供考虑/考虑?
谢谢!
答案 0 :(得分:0)
好吧,您永远不会调用setRemoteDescription或通过addIceCandidate添加远程Ice候选对象。没有那个,就没有人可以与
交谈答案 1 :(得分:0)
当我为iOS实现Kurento库时,尝试了如下操作:
生成的SDPOffer
最后设置LocalDescription
WebRTC开始生成IceCandidate
通过WebSocket发送冰候选人
这时,另一方发送了SDPAnswer。
我们已处理完SDPAnswer。
在我们的末端设置RemoteDescription。
服务器开始发送聚集在其末尾的IceCandidate。
在我们的末尾将这些IceCandidate添加到数组中。
已收到连接状态为“正在检查”的更改
此时已收到RemoteStream。
这里收到的连接状态更改为“已连接”
希望有帮助!