在我的 webrtc 应用程序中(javascript、Windows、Firefox 中的对等体,我的 C++ 信令服务器):
对等点 1 启动连接(发送报价)向连接添加曲目,对等点 2 获取报价并发送答案,添加自己的曲目。
如果用户授予双方对媒体(相机、麦克风)的所有权利,则一切正常 -
getUserMedia
已解决。negotiationneeded
不会因此被解雇。negotiationneeded
事件启动连接过程 - 发送您的报价等?
通过以下函数设置RtcPeerConnection(
peerConnection
字段为RTCPeerConnection类型):
function InitWebRTC(userRecord) {
const config = {iceServers: []};
try {
userRecord.webRtc.peerConnection = new RTCPeerConnection(config);
}
catch (err) {
userRecord.webRtc.peerConnection = null;
}
if (userRecord.webRtc.peerConnection !== null) {
if (settings.createDataChannel) {
userRecord.webRtc.peerConnection.addEventListener("datachannel", rtc_OnRemoteDataChannel);
}
userRecord.webRtc.peerConnection.addEventListener("icecandidate", rtc_OnIceCandidate);
userRecord.webRtc.peerConnection.addEventListener("negotiationneeded", rtc_OnNegotiationNeeded);
userRecord.webRtc.peerConnection.addEventListener("connectionstatechange", rtc_OnConnectionStateChange);
userRecord.webRtc.peerConnection.addEventListener("iceconnectionstatechange", rtc_OnIceConnectionStateChange);
userRecord.webRtc.peerConnection.addEventListener("icegatheringstatechange", rtc_OnIceGatheringStateChange);
let sigState = userRecord.webRtc.peerConnection.signalingState;
//userRecord.webRtc.peerConnection.addEventListener('track', rtc_OnTrack);
userRecord.webRtc.peerConnection.ontrack = rtc_OnTrack;
userRecord.webRtc.peerConnection.onremovetrack = rtc_OnRemoveTrack;
}
}
如果您想依赖
negotiationneeded
事件,您可以使用 addTransceiver('video')
添加收发器而不是轨道,并将其 direction
设置为 recvonly
。