Webrtc 需要澄清setLocalDescription和RTCSessionDescription吗

Webrtc 需要澄清setLocalDescription和RTCSessionDescription吗,webrtc,Webrtc,我正在尝试测试/运行/学习一些WebRTC代码,但在理解以下代码时遇到问题: 我理解这一点的问题是pc.createOffer已经返回了一个带有两个属性的“offer”对象:type和sdp。那么,为什么“new RTCSessionDescription(offer)”作为参数传递给pc.setLocalDescription,而不是pc.createOffer返回的“offer”本身呢 我在RTCSessionDescription界面上阅读。我遗漏了什么?请注意,您引用的MDN页面上显示“

我正在尝试测试/运行/学习一些WebRTC代码,但在理解以下代码时遇到问题:

我理解这一点的问题是pc.createOffer已经返回了一个带有两个属性的“offer”对象:type和sdp。那么,为什么“new RTCSessionDescription(offer)”作为参数传递给pc.setLocalDescription,而不是pc.createOffer返回的“offer”本身呢


我在RTCSessionDescription界面上阅读。我遗漏了什么?

请注意,您引用的MDN页面上显示“草稿。此页面不完整。”

代码将按编写的方式工作-因为可以通过将一个RTCSessionDescription传递到另一个的构造函数中来有效地克隆它-但是您是对的,它是冗余的,所以我更新了页面以删除它。从
createOffer
返回的对象始终足够。谢谢你抓住它

请注意,目前,如果提供/回答是通过网络发送的,您仍然需要调用
new RTCSessionDescription

但您会很高兴知道,这个问题很快也会得到解决:这个问题,因此您永远不必调用
新的RTCSessionDescription
构造函数。简单得多。不过请注意,像Firefox这样的浏览器。不过,这只是一种方便,没有行为上的差异


更新:有一个,所以如果您使用的是adapter.js,现在就可以摆脱它们。

非常感谢您的澄清。关于您的声明:“请注意,目前,在提供/答复通过网络发送的情况下,您仍然需要调用新的RTCSessionDescription。”我理解这一点也正在得到解决。但我想知道,任何webRTC接口/方法如何知道/知道传递给它的报价/应答SDP已经“通过电线”。还有一个问题。RTCSessionDescription.toJSON()是“标准”吗?我知道这只是为了方便起见,但如果能在通过信令通道发送之前避免将SDP快速转换为JSON,我会很高兴知道这有多可靠。对不起,文档中回答了第二个问题。toJSON在Chrome、Firefox和Opera中受支持。@Sam
RTCSessionDescription
是浏览器中的内置类(将
createOffer
生成的
offer
记录到控制台,您会看到
[object RTCSessionDescription]
),这与通过连接序列化后得到的普通JavaScript对象形成对比。浏览器方法可以区分两者的不同。请看一看,它涉及到ICE候选者的生成。谢谢
...
var pc = new RTCPeerConnection();
...
pc.createOffer(function(offer) {
    pc.setLocalDescription(new RTCSessionDescription(offer), function() {
     // send the offer  
    }, error);
 }, error);