Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法从候选字符串构造RticeCandidate_Javascript_Google Chrome_Webrtc - Fatal编程技术网

Javascript 无法从候选字符串构造RticeCandidate

Javascript 无法从候选字符串构造RticeCandidate,javascript,google-chrome,webrtc,Javascript,Google Chrome,Webrtc,铬合金 在计算机A上生成的ICE候选字符串(直接取自SDP属性“候选”): 现在这是通过信号传递的,将在计算机B上接收 收到计算机B(iceStr): 并尝试let candidate=new-RTCIceCandidate(iceStr) 这导致 TypeError:构造“RTCIceCandidate”失败:无法转换为 字典 计算机B这样做是为了执行 addIceCandidate(candidate) 在RTPeerConnection对象上 但是,由于先前的错误,无法继续 可复制示例

铬合金

在计算机A上生成的ICE候选字符串(直接取自SDP属性“候选”):

现在这是通过信号传递的,将在计算机B上接收

收到计算机B(iceStr):

并尝试
let candidate=new-RTCIceCandidate(iceStr)

这导致

TypeError:构造“RTCIceCandidate”失败:无法转换为 字典

计算机B这样做是为了执行

addIceCandidate(candidate) 
在RTPeerConnection对象上

但是,由于先前的错误,无法继续

可复制示例

 <script type="text/javascript">
 let c ='candidate:2445384676 1 udp 2122194687 192.168.1.26 57088 typ host generation 0 ufrag z1J2 network-id 1 network-cost 10';
 let candidate = new RTCIceCandidate(c);
</script>
该值似乎也直接传递给
var-candidate=new-RTCIceCandidate(msg.candidate)这最终是徒劳的练习(相同的错误)

更新:看起来API只理解一个字符串对象(考虑到事件包含一个基元类型,这个对象有点小!)。 可复制样本

    <script type="text/javascript">
 let c = new String('candidate:2445384676 1 udp 2122194687 192.168.1.26 57088 typ host generation 0 ufrag z1J2 network-id 1 network-cost 10');
 let candidate = new RTCIceCandidate(c);
</script>

设c=新字符串('候选:2445384676 1 udp 2122194687 192.168.1.26 57088典型主机生成0 ufrag z1J2网络id 1网络成本10');
let candidate=新的候选(c);
但即便如此,Chrome也会产生一个例外

TypeError:未能构造“RTCIceCandidate”:sdpMid和sdpMLineIndex均为null

似乎还有其他“值得怀疑”的东西……比如WebRTC产品包含特定于平台的新行字符

RTCSessionDescription不能直接从事件返回的SDP提供实例化,因为它是一个基元类型,并且RTCSessionDescription()需要字符串对象。此外,原语类型无法轻松转换为字符串,因为它包含特定于平台的新行,因此简单新字符串(SDP)会导致字符串对象格式错误

有人吗


更新对于WebRTC提供,文档中没有说明需要向RTCSessionDescription提供一个显式JSON对象,该对象包含类型(lame'offer'字符串)和SDP字段。在整个信号传递过程中,首先隐式地强制使用JSON(低效编码)。(如果没有人独自重建lame字段,但这与各地的黑盒态度相矛盾)

您尝试的只是候选字符串,而不是包含sdpMid和sdpMLineIndex属性的完整对象,请参见

您可以按照以下方式构造RTCIceCandidate对象:

new RTCIceCandidate({
  candidate: 'candidate:2445384676 1 udp 2122194687 192.168.1.26 57088 typ host generation 0 ufrag z1J2 network-id 1 network-cost 10',
  sdpMid: 'something', // don't make it up, you get this in onicecandidate
  sdpMLineIndex: 12345, // don't make it up, you get this in onicecandidate
})
或者你打电话

pc.addIceCandidate({  
  candidate: 'candidate:2445384676 1 udp 2122194687 192.168.1.26 57088 typ host generation 0 ufrag z1J2 network-id 1 network-cost 10',
  sdpMid: 'something', // don't make it up, you get this in onicecandidate
  sdpMLineIndex: 12345, // don't make it up, you get this in onicecandidate
})

这同样适用于RTCSessionDescription对象。

让我们保持冷静。那么,文档至少是令人困惑的。它以示例和书面形式声明:“(远程对等方在收到候选对象后,将通过调用addIceCandidate(),传入您使用信令服务器传递的候选对象*字符串*来将候选对象添加到其候选池。)”它甚至没有建议需要传递其他字段。或者,为了序列化这些字段而使用toJSON()是一个不喜欢JSON而不是BER的例子。虽然这可能会起作用,但官方的示例/教程并没有做任何“魔术”,也没有为要包含的其他字段使用toJSON()。他们也不建议将JSON对象传递到构造函数中。专用部分说明需要共享的字符串。它没有说明需要sdpMid和sdpMLineIndex参数,也没有说明在何处可以找到这些参数。如果文档的作者要支持“字符串需要交换”,他们至少应该建议交换JSON.stringify()的结果,它确实会生成包含所需字段的字符串。或者,如果开发人员不使用JSON,则需要额外的字段。这些信息在哪里都找不到,也不存在于代码示例中。一旦我们通过了当前的实现运行,那些忙得不可开交的人(像我们所有人一样)就会尝试这样做。
    <script type="text/javascript">
 let c = new String('candidate:2445384676 1 udp 2122194687 192.168.1.26 57088 typ host generation 0 ufrag z1J2 network-id 1 network-cost 10');
 let candidate = new RTCIceCandidate(c);
</script>
new RTCIceCandidate({
  candidate: 'candidate:2445384676 1 udp 2122194687 192.168.1.26 57088 typ host generation 0 ufrag z1J2 network-id 1 network-cost 10',
  sdpMid: 'something', // don't make it up, you get this in onicecandidate
  sdpMLineIndex: 12345, // don't make it up, you get this in onicecandidate
})
pc.addIceCandidate({  
  candidate: 'candidate:2445384676 1 udp 2122194687 192.168.1.26 57088 typ host generation 0 ufrag z1J2 network-id 1 network-cost 10',
  sdpMid: 'something', // don't make it up, you get this in onicecandidate
  sdpMLineIndex: 12345, // don't make it up, you get this in onicecandidate
})