2015-05-18 106 views
1

我知道adapter.js,它试图:从规格变化和前缀不同我在哪里可以找到WebRTC API的官方和最新文档?

绝缘。应用程序。

但adpater.js只包含非常基本的WebRTC API。我将以setRemoteDescription为例。

2013它被称为是这样的:

pc.setRemoteDescription(offer); 

https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection,目前API是什么?

pc.setRemoteDescription(new RTCSessionDescription(offer), function() { 
    pc.createAnswer(function(answer) { 
     pc.setLocalDescription(new RTCSessionDescription(answer), function() { 
     // send the answer to a server to be forwarded back to the caller (you) 
     }, error); 
    }, error); 
    }, error); 

而且我目前正在读an article from 2015它似乎是:

pc2.setRemoteDescription(pc1_offer).then(step3, failed); 
  • 我在哪里可以找到最新的和“官方”的文档,以实现WebRTC API的?
  • 你如何跟上这些频繁的变化?

编辑

http://www.w3.org/TR/webrtc/已经不远了,但我宁愿找一些地方Firefox的和Chrome的API的目前的执行情况可以遵循(会,是如果这是有道理的)。

+0

WebRTC API的官方文档可在W3C网站上找到:[here](http://www.w3.org/TR/webrtc/)。 但是,一直在进行修改。 –

+0

啊是的。我应该询问浏览器供应商的“当前”API状态。我已经更新了这个问题。 – wpp

+0

我不认为有像你想要的东西。你需要一个官方文档,但它应该包含chrome和firefox的实现,这些实现在某些方面与官方规范不同。这两个条件不能同时满足。 – Kevin

回答

2

的WebRTC仍然在发展,所以现在有没有更好的资源比规范,以跟上最新的变化给它最好的地方是:http://w3c.github.io/webrtc-pc

当涉及到个人的浏览器,并且实施了什么,这变得更加困难。请看:http://iswebrtcreadyyet.com

您在问题中观察到的主要API差异是2014年对promises的支持。所有异步方法现在都会返回Promise,而不是采用一对成功和失败回调。 Chrome并没有实现这一点,但Firefox的确如此。

下面是一个完整的WebRTC呼叫在Firefox中工作(注:使用arrow functions):

var pc1 = new mozRTCPeerConnection(), pc2 = new mozRTCPeerConnection(); 
 

 
pc1.onicecandidate = e => !e.candidate || 
 
    pc2.addIceCandidate(e.candidate).catch(failed); 
 
pc2.onicecandidate = e => !e.candidate || 
 
    pc1.addIceCandidate(e.candidate).catch(failed); 
 
pc2.onaddstream = e => v2.mozSrcObject = e.stream; 
 

 
function start() { 
 
    navigator.mediaDevices.getUserMedia({ video: true, audio: true }) 
 
    .then(stream => pc1.addStream(v1.mozSrcObject = stream)) 
 
    .then(() => pc1.createOffer()) 
 
    .then(offer => pc1.setLocalDescription(offer)) 
 
    .then(() => pc2.setRemoteDescription(pc1.localDescription)) 
 
    .then(() => pc2.createAnswer()) 
 
    .then(answer => pc2.setLocalDescription(answer)) 
 
    .then(() => pc1.setRemoteDescription(pc2.localDescription)) 
 
    .then(() => log("Connected!")) 
 
    .catch(failed); 
 
} 
 

 
var log = msg => div.innerHTML += "<p>" + msg + "</p>"; 
 
var failed = e => log(e.name +": "+ e.message +" line "+ e.lineNumber);
<video id="v1" height="120" width="160" autoplay></video> 
 
<video id="v2" height="120" width="160" autoplay></video><br> 
 
<button onclick="start()">Start!</button><div id="div"></div>

这20行代码,比其他版本中,你可能会小不少看到。

如果它看起来很神秘,不要失望,因为承诺和箭头功能是一些需要习惯的新概念,特别是当像这样组合使用时。我建议使用上面的链接分别阅读它们。

旧的回调版本仍可用于所有RTCPeerConnection方法,因此使用promise是可选的。Chrome支持浏览器中的承诺(不适用于WebRTC),但不支持箭头功能,因此在上述情况变得普遍之前可能需要一段时间。

除了这个差异,Chrome和Firefox在高级呼叫设置,甚至重新协商方面都相当稳定。规格中仍在改变的区域必须与新的低级控制面(如RTCRtpSender)以及从指定流到指定轨道(使用addTrack而不是addStream等)重新聚焦。

不幸的是,我知道没有好的浏览器特定的文档链接。正如您指出MDN链接已过时(尽管最近更新了getUserMedia的MDN链接,所以希望这会改变)。我发现查看工作演示和示例仍然是弄清楚不同浏览器支持哪些内容的最有用的方法。

一些分歧,我知道的:

  • getUserMedia constaints - 铬实现规范大约2013这里,而Firefox的实施规范(但不限于宽/高/帧率和facingMode)。 Chrome的实现虽然比较成熟,但并不标准,而Firefox实现了这个规范(但仅限于rtp/rtcp,ice候选和其他一些东西)。
  • RTCOfferOptions - 铬扼流圈在这些,所以而不是例如。 { offerOptions: true }使用较旧的{ mandatory: OfferOptions: true }(注意区分'o'与'O'),因为这两种浏览器都可以使用。
  • addTrack/removeTrack现在坚持到addStream(stream)(尽管Firefox没有执行removeStream,所以在那里使用removeTrack)。

由于前缀和其他差异,您仍然需要adapter.js,但是有更多的adapter.js可以并且应该做。希望它的更新版本可以通过为上述一些差异提供一个polyfill来进一步缩小这个差距。

我对Firefox的了解比Chrome好,所以如果我错过了某些东西,我很抱歉。

我希望有一些帮助。

+0

非常感谢你的彻底解答。 iswebrtcreadyet和specs的组合是我真正想到的。不幸的是,似乎没有这样的资源。 (我会在几天后接受你的回答,以防有人证明我们错了:))。 – wpp

相关问题