gpt4 book ai didi

javascript - RTCPeerConnection connectionState 从不从 "new"移动到 "checking"/"connected"

转载 作者:行者123 更新时间:2023-11-30 06:24:56 24 4
gpt4 key购买 nike

我从某人那里接管了一个 WebRTC 项目,尽管我开始思考这些概念,但我仍然被一个特定问题所困扰:让 WebRTC 连接从new 正在检查/已完成等...

这是 chrome://webrtc-internals 的输出范围:

enter image description here

我们的代码调用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();
});
}

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

this.rtcPeer.oniceconnectionstatechange = () => {
this.handleIceConnectionStateChangeEvent();
};

我已经跟踪了每条条件和代码路径,但目前看不出可能是什么问题。有没有人遇到过这种情况,并且能够阐明一些潜在的事情来观察/考虑?

谢谢!

最佳答案

当我为 iOS 实现 Kurento 库时,尝试过这样的事情:

Generated SDPOffer

Set LocalDescription at our end

WebRTC started generating IceCandidate

Sent Ice Candidate through WebSocket

At this point, other party sent SDPAnswer.

Processed SDPAnswer at our end.

Set RemoteDescription at our end.

Server started sending IceCandidate gathered at their end.

Added these IceCandidate in array at our end.

Here received change in connection state to "Checking"

Received RemoteStream at this point.

Here received change in connection state to "Connected"

希望对您有所帮助!

关于javascript - RTCPeerConnection connectionState 从不从 "new"移动到 "checking"/"connected",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51067900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com