【问题标题】:Where can I find official and up-to-date documentation for the WebRTC API? [closed]我在哪里可以找到 WebRTC API 的官方和最新文档? [关闭]
【发布时间】:2015-07-29 23:31:52
【问题描述】:

我知道adapter.js,它试图:

使应用免受规范更改和前缀差异的影响。

但 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 实现状态的东西(is 而不是 will-be 如果有道理)。

【问题讨论】:

  • WebRTC API 的官方文档可以在 W3C 网站上找到:here。但是,一直都有修改。
  • 啊,是的。我宁愿询问浏览器供应商的“当前”API 状态。我已经更新了问题。
  • 我不认为有你想要的东西。您需要官方文档,但它应该包括 chrome 和 firefox 的实现,这在某些方面与官方规范不同。这两个条件不能同时满足。
  • @Kevin 是的。我认为规范的草稿版本和 chrome 问题/webrtc 邮件列表是最接近的。

标签: google-chrome firefox documentation webrtc


【解决方案1】:

WebRTC 仍在开发中,所以目前没有比规范更好的资源了,了解最新变化的最佳位置是:http://w3c.github.io/webrtc-pc

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

您在问题中观察到的主要 API 差异是 2014 年对 promises 的支持。所有异步方法现在都返回一个 Promise,而不是采用一对成功和失败回调。 Chrome 尚未实现此功能,但 Firefox 可以。

以下是在 Firefox 中工作的完整 WebRTC 调用(注意:使用 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 在浏览器中支持 Promise(只是不支持 WebRTC),但还不支持箭头功能,所以可能需要一段时间才能实现上述功能。

抛开这种差异不谈,Chrome 和 Firefox 在高级呼叫设置甚至重新协商方面都相当稳定。仍在更改的规范领域与新的较低级别的控制界面有关,例如RTCRtpSender,以及从指定流到指定轨道的重新关注(使用addTrack 而不是addStream 等)。

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

我知道的一些区别:

  • getUserMedia constaints - Chrome 在这里实现了大约 2013 年的规范,而 Firefox 实现了规范(但仅限于 width/height/frameRate 和 facesMode)。
  • getStats - Chrome 的实现虽然更成熟,但是非标准的,而 Firefox 实现了规范(但仅限于 rtp/rtcp、ice 候选和其他一些东西)。
  • RTCOfferOptions - Chrome 阻塞了这些,所以而不是例如{ offerOptions: true } 使用较旧的 { mandatory: OfferOptions: true }(注意大小写差异“o”与“O”),因为这适用于两种浏览器。
  • addTrack/removeTrack 现在坚持使用addStream(stream)(尽管 Firefox 没有实现 removeStream,所以在那里使用 removeTrack)。

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

我对 Firefox 的了解比 Chrome 好,所以如果我遗漏了什么,我深表歉意。

我希望这会有所帮助。

【讨论】:

  • 非常感谢您的详尽回答。 iswebrtcreadyet 和规格的混合正是我所考虑的。不幸的是,似乎没有这样的资源。 (我会在几天内接受你的回答,以防有人证明我们错了:))。
猜你喜欢
  • 2013-07-10
  • 2015-06-30
  • 1970-01-01
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 2019-09-04
  • 1970-01-01
相关资源
最近更新 更多