我按照一些流程解释了如何在 webrtc 中进行连接。但我被阻止了:
获得 sdpOffer 后,我想调用 setRemoteDescription() 并且有一个 onIceCandidate 回调。但我没有这个回调。
如果您需要,我可以展示我的代码片段。
感谢您的帮助
首先,我对 Android 上的 WebRTC 不太了解,但我想它会与 Web API 非常相似。我在下面的流程中使用了标准 js。
关于 onicecandidate-trigger:
调用 onicecandidate 处理程序,当您设置本地描述时, 请参阅 MDN onicecandidate 事件。
您需要设置本地描述才能开始冰收集过程。原因之一是,收集到的冰候选者将添加到您的本地描述中,如果您没有本地描述可添加它们,则它将无法工作。
关于您的流程(也许要检查):
至于处理提供-答案-交换的过程,尝试这样做(将 A 和 B 作为具有单独 RTCPeerConnection-Objects pcA 和 pcB 的对等体),检查您的流程是否在某处不同:
- 首先,您应该为 A 和 B 的传入ice候选设置一个处理程序,例如
signaller.on('ice', candidate => pc.addIceCandidate(candidate))
- 然后你应该为 A 和 B 注册你的轨道处理程序,例如
pcA.ontrack = track => ... (put it as src of your video or whatever)
- 将您的 MediaStreamTracks 添加到连接中
pcA.addTrack(aTrack)
(从A面开始...)
- A 通过调用生成报价
offer = await pcA.createOffer()
- A 将生成的报价设置为本地描述
await pcA.setLocalDescription(offer)
- A 通过信令通道发送生成的报价
signaller.sendTo('B','offer', offer)
,现在你的冰收集过程开始了
- A 接收由
onicecandidate
-处理程序。pcA.onicecandidate = e => signaller.sendTo('B','ice', e.candidate)
(现在我们跳到B对事物的看法)
- B 收到报价并设置
signaller.on('offer', async offer => { await pcB.setRemoteDescription(offer); // and the following steps 8 to 12 follow here })
- B 创建一个 sdp 答案
answer = await pcB.createAnswer()
- B 将答案设置为本地描述
await pcB.setLocalDescription(answer)
- 现在,B 的冰收集过程并行开始,并且应该像 7 中那样处理。
- B将答案发送给A
signaller.sendTo('A','answer', answer)
(回到A)
- A收到答复
signaller.on('answer', async answer => await pcA.setRemoteDescription(answer); });
- 现在,呼叫应该完成,冰候选人交换并且冰状态的信号应该是
stable
or connected
如果这有效,请查看处理眩光,这是一个很好的来源.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)