google chrome -我在哪里可以找到官方和最新的文档为WebRTC API



我知道adapter.js,它试图:

使应用程序不受规范变化和前缀差异的影响。

但是adapter .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);

我目前正在阅读2015年的一篇文章,其中似乎是:

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

编辑

http://www.w3.org/TR/webrtc/并不遥远,但我更愿意寻找一些东西,Firefox和Chrome的API的当前实现状态可以遵循(超过将是,如果有意义的话)。

WebRTC仍在开发中,所以现在没有比规范更好的资源了,保持最新变化的最好地方是:http://w3c.github.io/webrtc-pc

当涉及到单个浏览器和实现时,它变得更加困难。看看:http://iswebrtcreadyyet.com

你在问题中观察到的主要API差异是2014年对承诺的支持。所有异步方法现在都返回一个Promise,而不是接受一对成功和失败回调。Chrome还没有实现这个功能,但是Firefox实现了。

下面是一个完整的在Firefox中工作的WebRTC调用(注意:使用箭头函数):

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 constraints - Chrome在这里实现了大约2013年的规范,而Firefox实现了规范(但仅限于宽度/高度/帧速率和facingMode)。
  • getStats - Chrome的实现,虽然更成熟,是非标准的,而Firefox实现规范(但仅限于rtp/rtcp, ice候选和其他一些东西)。
  • RTCOfferOptions - Chrome阻塞在这些,所以,而不是例如{ offerOptions: true }使用旧的{ mandatory: OfferOptions: true }(注意大小写差异'o' vs。'O'),因为这在两个浏览器中都有效。
  • addTrack/removeTrack现在坚持addStream(stream)(虽然Firefox没有实现removeStream,所以使用removeTrack)。

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

我对Firefox的了解比Chrome好,所以如果我错过了什么,我很抱歉。

相关内容

  • 没有找到相关文章

最新更新