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

标签 google-chrome firefox documentation webrtc

我知道adapter.js ,它试图:

insulate apps from spec changes and prefix differences.

但是 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 仍处于开发阶段,因此目前没有比规范更好的资源,了解其最新更改的最佳位置是: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 行代码,比您可能见过的其他版本要小很多。

如果它看起来很神秘,请不要失望,因为 Promise 和箭头函数是新概念,需要一些时间来适应,尤其是像这样组合使用时。我建议使用上面的链接单独阅读它们。

旧的回调版本仍然可用于所有 RTCPeerConnection 方法,因此 Promise 的使用是可选的。 Chrome 支持浏览器中的 Promise(仅不适用于 WebRTC),但尚不支持箭头函数,因此可能需要一段时间才能实现上述功能。

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

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

我知道的一些差异:

  • getUserMedia constaints - Chrome 在这里实现了大约 2013 年的规范,而 Firefox 则实现了该规范(但仅限于宽度/高度/帧速率和 facesMode)。
  • getStats - Chrome 的实现虽然更成熟,但不是标准的,而 Firefox 实现了规范(但仅限于 rtp/rtcp、ice 候选者和其他一些东西)。
  • RTCOfferOptions - Chrome 会窒息这些,所以而不是例如{ OfferOptions: true } 使用较旧的 { permanent: OfferOptions: true } (注意“o”与“O”的大小写差异),因为这在两种浏览器中都适用.
  • addTrack/removeTrack现在坚持使用 addStream(stream)(尽管 Firefox 没有实现 removeStream,因此请使用 removeTrack)。

您还需要adapter.js由于前缀和其他差异,但adapter.js 可以而且应该做更多的事情。希望它的新版本能够通过提供针对上述某些差异的填充来进一步缩小这一差距。

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

我希望其中一些有所帮助。

关于google-chrome - 在哪里可以找到 WebRTC API 的官方最新文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30303589/

相关文章:

jquery - 如何在控制台返回React元素值?

java - 读取和插入 Chrome Cookies Java

python - Selenium Python selenium.common.exceptions.WebDriverException : Message: connection refused using geckodriver and firefox

c# - 如何在 C# 中使用 Selenium Webdriver 检查 HTML5 视频是否正在播放?

c++ - 为缺少 XML 文档启用 C++ 编译器警告

ruby-on-rails - YARD:如何创建指向类方法的链接?

javascript - 在 Chrome 上的 Web Serial API 中获取连接设备的名称

css - 在某些浏览器中,如何去掉文本框控件右下角的小人字形

firefox - 在 Firefox 中导出同步选项卡

c# - 智能感知可以从 Visual Studio 导出或提取到文本文件吗?