我应该在添加我方的本地媒体曲目之前发送 WebRTC 应答吗?

Should I send a WebRTC answer before my side's localMedia tracks were added?

我正在使用 WebRTC 构建一个视频通话应用程序,它允许一个点通过在大厅中选择某人来呼叫另一个点。当peer A 发出呼叫请求时,另一个peer B 可以接受。此时,WebRTC信令开始:

(步骤基于https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Connectivity

这个流程几乎运行良好。在十分之一的呼叫中,我没有收到来自其中一个对等方的 video/audio(而两个对等方都有工作的本地视频)。在这种情况下,我注意到答案 SDP 包含 a=recvonly,而在正常情况下这应该是 a=sendrecv。 我进一步确定,当另一个同行收到报价并需要回复答案时,这边的 localMedia 有时还没有添加,因为 MediaDevices.getUserMedia 可能需要一段时间才能完成。我还通过记录和观察报价有时在添加本地曲目之前到达来确认此操作顺序。

我假设我不应该在添加本地媒体之前发送答复?

我正在考虑两种方法来解决这个问题,但我不确定哪个选项最好(如果有的话):

我很难决定哪个(或另一个)解决方案最符合“完美协商”模式。

提前致谢!

是的,如果您这样做,最好在创建报价之前添加流 'statically',但最好的方法是在 onnegotiationneeded 事件中添加流,因为 addtrack 事件会触发 onnegotiationneeded事件。因此,您应该添加流,然后在 onnegotiationneeded 中使用 createoffer。至于答案,您之前可以毫无问题地做到这一点,但请记住,建立良好的连接将使您 add/remove 跟踪没有问题(即使在设置 SDP 之后)。您没有 post 任何代码,但请记住,您还必须交换 ice 候选人。 最后一条建议,记住以上所有都是异步的!所以你应该使用 promises,并等待直到描述被设置,然后才创建一个 offer/answer。 希望这会有所帮助