WebRTC:为什么 "CreateAnswer can't be called before SetRemoteDescription"?

WebRTC: Why "CreateAnswer can't be called before SetRemoteDescription"?

浏览器:Chrome

我正在尝试调试一个 webRTC 应用程序,该应用程序在四个方面中的三个方面都运行良好!我无法从接收方获取视频到呼叫方。我可以从呼叫者获得视频和音频到接收者,从接收者到呼叫者的音频。问题是接收器不触发视频 (sdpMid="video") ICE 候选。在拼命尝试解决这个问题时,我尝试在设置 pc.remoteDescription 之前使用 pc.CreateAnswer 并且它给出了标题中引用的错误。

我的问题是了解这背后的原因。答案 SDP 就是基于 getUserMedia settings/constraints 的 SDP。那么,为什么我们必须等待设置 remoteDescription。我认为 createAnswer 会开始触发 ICE 候选人的收集,这可以在不等待设置 remoteDescription 的情况下提前完成。事实并非如此。为什么?

提议和回答不是独立的,它们是本质上不对称交换的一部分。

答案是对特定报价的直接回应(因此得名 "answer")。因此,对等方在收到您用 setRemoteDescription.

设置的报价之前无法回答

要约包含特定限制或信封(如 m 线),答案必须遵守 by/answer to/stay。另一种说法是,答案是报价的迭代。

例如,使用报价选项 offerToReceiveVideo: false 创建的报价只能用 recvonly 视频回答(意味着仅从报价者到应答者接收视频),永远不会 sendrecv