WebRTC:为什么;CreateAnswer can';不能在SetRemoteDescription“之前调用;?

WebRTC:为什么;CreateAnswer can';不能在SetRemoteDescription“之前调用;?,webrtc,Webrtc,浏览器:Chrome 我正在调试一个webRTC应用程序,它在四个前端中的三个都能正常工作!我无法从接收器向呼叫方获取视频。我可以从呼叫者到接收器获取视频和音频,从接收器到呼叫者获取音频。问题是接收器没有触发视频(sdpMid=“video”)ICE候选。在拼命解决这个问题的同时,我在设置pc.remoteDescription之前尝试使用pc.CreateAnswer,它给出了标题中引用的错误 我的问题是要理解这背后的原因。答案SDP将只是基于getUserMedia设置/约束的SDP。那么,

浏览器:Chrome

我正在调试一个webRTC应用程序,它在四个前端中的三个都能正常工作!我无法从接收器向呼叫方获取视频。我可以从呼叫者到接收器获取视频和音频,从接收器到呼叫者获取音频。问题是接收器没有触发视频(sdpMid=“video”)ICE候选。在拼命解决这个问题的同时,我在设置pc.remoteDescription之前尝试使用pc.CreateAnswer,它给出了标题中引用的错误


我的问题是要理解这背后的原因。答案SDP将只是基于getUserMedia设置/约束的SDP。那么,我们为什么要等待设置remoteDescription呢。我认为createAnswer将启动ICE候选对象的收集,这可以在不等待设置remoteDescription的情况下提前完成。事实并非如此。为什么?

提供和回答不是独立的,它们是内在不对称交换的一部分

答案是对特定报价的直接回应(因此得名为“答案”)。因此,对等方在收到您使用
setRemoteDescription
设置的报价之前无法应答

报价包含特定的限制或信封(如m-lines),答案必须遵守/回答/保持在其中。另一种说法是,答案是报价的迭代


例如,使用offer options创建的offer
offerToReceiveVideo:false
只能用视频的
recvonly
回答(意思是仅从报价人接收到应答人的视频),而决不能
sendrecv

提供和回答是不独立的,它们是内在不对称交换的一部分

答案是对特定报价的直接回应(因此得名为“答案”)。因此,对等方在收到您使用
setRemoteDescription
设置的报价之前无法应答

报价包含特定的限制或信封(如m-lines),答案必须遵守/回答/保持在其中。另一种说法是,答案是报价的迭代


例如,使用offer options
offer-receivevideo:false
创建的报价只能用视频的
recvonly
回答(意思是仅从报价人接收到应答人的视频),从不
sendrecv

我认为报价和答复只是对每一端可用的媒体/传输/编解码器/等的描述,将由两端独立分析。我认为ICE候选者单独控制SDP决定建立通信可能性的能力,这在理论上是可能的:如果两个独立SDP中没有兼容性,则没有ICE候选者。然而,正如您所解释的,答案以报价为基础更有意义。报价和答案是描述,但交换本身就是谈判。候选者找到要传输的ip+端口对。因此,在本地和远程SDP设置在该端之前,onIceCandidate事件不应在该端激发?@Sam
onIceCandidate
在setLocalDescription之后立即激发。它与setRemoteDescription没有任何联系。我使用Promissions重写了它,并发布了整个代码。你帮了大忙。最后一次,你能看看新的代码吗。现在,我没有在任何一端获得远程视频,但我认为,为呼叫者和接收者使用单一代码并使用承诺的方法值得重写。我认为,提议和回答只是对每一端可用的媒体/传输/编解码器/等的描述,将由两端独立分析。我认为ICE候选者单独控制SDP决定建立通信可能性的能力,这在理论上是可能的:如果两个独立SDP中没有兼容性,则没有ICE候选者。然而,正如您所解释的,答案以报价为基础更有意义。报价和答案是描述,但交换本身就是谈判。候选者找到要传输的ip+端口对。因此,在本地和远程SDP设置在该端之前,onIceCandidate事件不应在该端激发?@Sam
onIceCandidate
在setLocalDescription之后立即激发。它与setRemoteDescription没有任何联系。我使用Promissions重写了它,并发布了整个代码。你帮了大忙。最后一次,你能看看新的代码吗。现在我没有在任何一端获得远程视频,但我认为对调用方和接收方使用单一代码并使用承诺的方法值得重写。