桌面版 Firefox WebRTC 进展更新

桌面版 WebRTC 现已在 Firefox Nightly 中,并且也已在 Firefox Aurora 中,不过 Nightly 拥有最热最新的修复。

我们支持 mozGetUserMediamozRTCPeerConnectionDataChannels。我们有一个针对 mozGetUserMedia 的基本 UI,我们预计会在
接下来的几周进行更新。

在 Firefox 中启用 WebRTC

该代码目前位于一个首选项后面,等待更多测试。要在 Firefox 的 Nightly 桌面版构建中启用我们的 WebRTC 代码,请浏览至 about:config
并将 media.peerconnection.enabled 首选项更改为 true

以下是与 getUserMedia()mozRTCPeerConnection() 相关的 3 个首选项

  • media.navigator.enabled 仅启用对 mozGetUserMedia() 的调用
  • media.navigator.permission.disabled 自动授予访问摄像头/麦克风的权限,并绕过权限/选择对话框
  • media.peerconnection.enabled 启用 mozRTCPeerConnection() 的使用

注意:media.peerconnection.enabled 意味着 media.navigator.enabled 已被设置为 true

演示和即将推出的更改

即使在今天,你也可以用这些 API 做很多事情。例如,请查看我们在 GitHub 上的测试登陆页面。我们会尝试发布通知,如果你运行的是过时的浏览器 - 以及有关重要错误修复和 API 更改的新闻更新!

即将推出的更改包括

  • 对约束的支持(用于 getUserMedia 和 createOffer/Answer)
  • 对带宽、分辨率、回声消除等的控制
  • 统计信息
  • TURN 支持(允许在对称 NAT 后面的设备之间建立连接)
  • 修复音频漂移(A/V 同步的渐进性损失)
  • Trickle ICE、rtcp-mux 和 BUNDLE 支持
  • getUserMedia() UI 更新
  • 以及许多错误修复

为了让你了解这些 API 的强大功能,在几天内,我们的团队就制作了一个 社交 API 集成演示,它允许你进行视频 +
与你的朋友进行文字聊天,将文件拖放到彼此之间,放下链接、标签等,所有这些都简单地使用了 DataChannel API。

DataChannel API 在表面上非常简单,并且具有与 WebSockets 非常相似的 API。一个简单的例子


/**
 * Assume we've connected a PeerConnection with a friend - usually with audio
 * and/or video.  For the time being, always at least include a 'fake' audio
 * stream - this will be fixed soon.
 *
 * connectDataConnection is a temporary function that will soon disappear.
 * The two sides need to use inverted copies of the two numbers (eg. 5000, 5001
 * on one side, 5001, 5000 on the other)
 */
pc.connectDataConnection(5001, 5000);

function handle_new(channel) {
  channel.binaryType = "blob";
  channel.onmessage = function(evt) {
    if (evt.data instanceof Blob) {
      console.log("I received a blob");
      // assign data to an image, save in a file, etc
    } else {
      console.log("I got a message: " + evt.data);
    }
  };

  channel.onopen = function() {
    // We can now send, like WebSockets
    channel.send("The channel is open!");
  };

  channel.onclose = function() {
    console.log("pc1 onclose fired");
  };
};

/* For when the other side creates a channel */
pc.onDataChannel = handle_new;

channel = pc.createDataChannel("My Datastream",{});
if (channel) {
  handle_new(channel);
}

提交错误和前进

WebRTC 的进展(以及错误修复)非常快,我们鼓励你试用并提交错误。(我们有很多错误!但我们正在尽力尽快解决它们,所以请确保你使用的是 Nightly 版本并定期更新。)

非常感谢错误报告。请在
Bugzilla 上提交错误,选择“产品:核心”、“组件:WebRTC”。

该团队对所有进展感到兴奋,也感到疲惫。到目前为止的工作代表了 Firefox 团队中许多人(太多人无法一一列举 - 特别是因为我们不想忘记)投入的无数时间
某个人 - 但你知道你是谁!感谢所有帮助我们把这架“747”降落在飞行甲板上的所有人。

随着我们努力将此打造成为 Firefox 和网络的出色产品功能,我们将继续定期发布博客文章介绍我们的进展。

关于 Anant Narayanan

@anantnMozilla Labs 的一名黑客,专门从事通用技术。他之前曾在 WeaveJetpack账户管理器Rainbow 等项目中工作。他目前正在研究 开放式网络应用网络实时通信

Anant Narayanan 的更多文章...

关于 Robin Hawkes

Robin 热衷于通过代码解决问题。他是一位数字匠人,Pusher 的开发者关系主管,前 Mozilla 布道师,书籍作者,也是一位英国人。

Robin Hawkes 的更多文章...


40 条评论

  1. Pascal Rettig

    这太棒了 - DataChannel 是基于哪个规范的?它支持 UDP 吗?

    我上次遇到 DataChannel API(在 Google I/O 和 http://www.webrtc.org/faq-recent-topics)时,它还在规范中 - 这个实现是 FF 特定的,还是应该与 WebKit 中的实现兼容?

    2012 年 11 月 5 日 下午 08:09

    1. Anant Narayanan

      该实现基于最新的编辑草案:http://dev.w3.org/2011/webrtc/editor/webrtc.html

      当前实现中有一些 Firefox 特定的内容(特别是 connectDataConnection 方法),但当 WebKit 完成其实现时,毫无疑问我们将在短期内收敛。

      2012 年 11 月 5 日 下午 08:22

  2. Drazick

    太棒了!
    感谢你们的辛勤工作。
    WebRTC 是每个人都在期待的杀手级功能。

    2012 年 11 月 5 日 上午 09:00

    1. Robert Nyman

      谢谢!是的,WebRTC 绝对是改变游戏规则的功能!

      2012 年 11 月 5 日 上午 09:18

  3. Felipe Reyes

    这是个好消息!我正在玩 WebRTC,但我一直在期待我的实验在 Firefox(有史以来最好的 Web 浏览器!)上运行。

    2012 年 11 月 5 日 上午 09:25

    1. Robert Nyman

      听起来不错。:-)

      2012 年 11 月 5 日 上午 09:48

  4. Tom

    提供 Aurora FF18 的页面上的发行说明链接指向了 FF 17 的“新增功能”页面。我想要用来报告此问题的反馈表格无法使用(当前的 Nightly FF)。

    2012 年 11 月 5 日 下午 12:43

    1. Robert Nyman

      感谢提醒!

      2012 年 11 月 5 日 下午 15:41

      1. Tom

        反馈现在似乎可以在浏览器内部再次使用。

        2012 年 11 月 5 日 下午 16:52

  5. Sam Dutton

    太棒了!祝贺所有相关人员。

    2012 年 11 月 7 日 上午 04:13

    1. Robert Nyman

      谢谢,Sam!

      2012 年 11 月 7 日 上午 06:48

  6. Mark

    感谢更新!目前预计与 Chrome 23 的 WebRTC 支持互操作吗?(使用 VP8 + G.711 我想)

    2012 年 11 月 7 日 下午 22:45

    1. Robert Nyman

      不客气!
      Anant 在上面提到的,当存在差异时,我们一定会互相沟通,并努力找到最佳解决方案。

      2012 年 11 月 8 日 上午 01:39

    2. Maire Reavy

      目前,我们不支持与 Chrome 23 互操作,但我们和 Chrome WebRTC 团队已经开始努力让 Firefox 和 Chrome 之间的 WebRTC 互操作性工作起来。这是两个团队的优先事项。敬请期待。

      2012 年 11 月 8 日 上午 02:06

  7. Gonzalo Gasca

    FF 目前支持哪些编解码器?Vp8 还是 H.264?

    2012 年 11 月 9 日 上午 10:59

    1. Anant Narayanan

      目前我们支持 VP8(Chrome 也支持)。IETF 尚未选择强制实施的编解码器。

      2012 年 11 月 9 日 下午 14:59

    2. Robert Nyman

      据我所知,目前支持的是 WebM(VP8 编解码器)。至于 H.264,我现在不确定它将如何演变。

      2012 年 11 月 9 日 下午 15:04

  8. Hadar Weiss

    这太棒了。感谢你们的进步。期待在它上面实现酷炫的应用程序。

    2012 年 11 月 11 日 下午 19:49

    1. Robert Nyman

      我们也期待看到很多这样的酷炫应用程序!

      2012 年 11 月 12 日 上午 06:00

  9. Scott Wharton

    感谢提供这些很棒的信息,并祝贺你们取得了这一里程碑。Firefox WebRTC GA 的目标日期是什么?现在 Chrome 已经退出测试版,我相信 Firefox 社区迫切希望发布他们的版本。

    2012 年 11 月 20 日 下午 20:36

    1. Robert Nyman

      谢谢!

      我们在 全面的 WebRTC 支持即将在您附近的 Web 浏览器中推出! 中谈论过它,目标是明年 1 月初的 Firefox 18。希望我们能实现这一点 :-)

      2012 年 11 月 21 日 上午 03:10

  10. Jonathan Chetwynd

    有没有一个非常简单的可行示例演示 UDP 数据,比如 UTF-8,可能与服务器和客户端之间的 createDataChannel 结合使用?P2P 可以很好,但上面的示例对我来说太笼统了,无法直接实现:假设我们已经连接了 PeerConnection… 鉴于时间传输机制…
    说真的,这是一个很棒的开始,但我今天可以实现它吗?

    2012 年 11 月 23 日 下午 12:42

    1. Robert Nyman

      也许WebRTC 测试着陆页上的示例可以帮助你?或者也许Sam Dutton 写的实时通信无需插件文章对你有用?

      2012 年 11 月 24 日 上午 4:01

  11. Randell Jesup

    测试着陆页演示肯定会有帮助。如果你想使用类似 UDP 的不可靠数据,请将“{}”替换为“{outOfOrderAllowed: true, maxRetransmitNum: 0 }”,以调用 createDataChannel。

    2012 年 11 月 24 日 上午 5:43

  12. Jonathan Chetwynd

    Randell 和 Robert,在你们鼓励的评论之后,我提交了 bug 814871“间歇性连接”,webrtc 使用 UDP,所以为什么使用 UDP 类似的?经过测试并确认正常工作。

    2012 年 11 月 24 日 上午 10:25

  13. Randell Jesup

    DataChannels 在 UDP 上运行 SCTP,在 SCTP 上运行 DTLS(呼!) (使用 ICE/STUN/TURN)

    DTLS 提供安全性

    SCTP 是一个多通道网络层,它通过单个端口/连接运行,并且可以提供部分或完全可靠性(或无可靠性)。

    DataChannels 是一个小型协议,用于打开/关闭通道和传输运行在 SCTP 之上的较大 blob/数组。

    我们可以使用 createDataChannel 中的字典,为每个 DataChannel 选择可靠性选项。

    2012 年 11 月 24 日 上午 10:30

  14. Derick Eppendahl

    您好,
    我正在寻找一位开发人员,帮助开发基于 webrtc 的应用程序。
    请通过 derick@eppendahl.com 联系我。
    祝您愉快!

    2012 年 12 月 3 日 上午 3:38

  15. Rod

    http://www.h-online.com/open/news/item/Firefox-beta-introduces-Social-API-with-Facebook-Messenger-1734250.html =

    “2012 年 10 月 22 日,下午 5:04
    Firefox 测试版推出带有 Facebook Messenger 的 Social API

    新 Social API 的界面采用侧边栏 Zoom 的形式
    来源:Mozilla

    Mozilla 在最新的 Firefox 测试版中推出了一个新的 Social API,它让浏览器能够与社交媒体网站集成。启用后,新的社交功能将显示在永久的侧边栏中,与通常的页面内容并排显示。”

    "_永久侧边栏_" 是否意味着它不能关闭/将始终显示在浏览器中?我希望不是这样!

    2012 年 12 月 10 日 下午 7:31

    1. Robert Nyman

      不,它完全是可选的。更多信息请访问 Firefox 的 Facebook Messenger 如何运作?

      2012 年 12 月 11 日 上午 3:20

  16. David Gausmann

    我对 Firefox 中的 getUserMedia 感到非常困惑
    在 Firefox 16 中,我能够使用 getUserMedia。我已经在网上使用了一些示例页面对其进行了测试,测试成功(例如,我的网络摄像头被用来显示我的视频)。

    但在更新到 Firefox 17 之后,它不再工作了,尽管我在网上没有找到任何关于这个“降级”的信息。这些功能是否从 Firefox 16 禁用到了 Firefox 17?
    如何重新启用它们?在我的电脑上设置“media.navigator.enabled”不起作用!

    此致
    David Gausmann

    2012 年 12 月 12 日 中午 12:07

    1. Robert Nyman

      据我所知,它应该可以正常工作。请按照博文中的描述提交一个 bug,希望它能有所帮助!

      2012 年 12 月 12 日 中午 12:54

    2. Cooper

      我之前遇到了问题,并且得知 Mozilla 更改了 GetUserMedia 接口。我不确定是否是一回事

      function mozSuccess(stream) {
      // Cooper:Mozilla 更新了接口,从“src”更改为“mozSrcObject”
      video.mozSrcObject=stream;
      video.play();
      originalStartUp();
      }

      window.onload = function() {
      if( navigator.webkitGetUserMedia ) {
      navigator.webkitGetUserMedia({video:true, audio:true}, webkitSuccess, fallback);
      } else {
      navigator.mozGetUserMedia({video:true}, mozSuccess, fallback);
      }
      }

      2012 年 12 月 18 日 下午 6:13

  17. Michael Adeyeye

    您可能也对以下博文感兴趣。我在 2009 年首次将 SIP 集成到 Firefox 时,就提供过类似 WebRTC 的服务。
    这里有一些演示 –
    http://www.ngportal.com/micadeyeye/index.php/2009/09/13/projects-videos/

    此外,我非常同意大家的说法,WebRTC 可能是对移动运营商和在线服务提供商的威胁。这是我在一家研究机构(称为 CSIR)的演示文稿幻灯片 - http://www.ngportal.com/micadeyeye/index.php/2012/09/09/webrtc-another-nightmare-for-telecom-providers/

    Michael Adeyeye (博士)

    2012 年 12 月 14 日 上午 9:45

  18. MisterXYZ

    我非常喜欢这项 webrtc 技术!
    很快我们就能非常轻松地与所有平台上的每个人进行视频聊天!

    再见,MSN、Skype 等!

    感谢所有 WebRTC 开发人员!

    2013 年 1 月 13 日 上午 11:55

  19. Andre Natal

    b2g 有什么进展?什么时候可用?

    2013 年 2 月 1 日 上午 8:33

    1. Robert Nyman [编辑]

      WebRTC 什么时候会在 Firefox OS 中可用?这还有待确定。

      2013 年 2 月 4 日 上午 2:56

  20. Appie Mastenrbroek

    可以禁用它吗?

    我不喜欢通过一些木马或恶意 FF 插件被监控的可能性。

    考虑到浏览器目前的安全性问题,这似乎很愚蠢

    2013 年 2 月 5 日 上午 11:04

    1. Robert Nyman [编辑]

      例如,对您相机的每次请求都需要您明确批准。就像地理位置、离线存储文件等。

      2013 年 2 月 5 日 下午 1:08

  21. Scott

    似乎 FF 19.0 中禁用了 WebRTC 功能。我不得不手动转到 about:config 并启用它们。media.navigator.enabled 什么时候会默认启用?隐私选项卡下是否也会有启用/禁用这些功能的选项?

    2013 年 2 月 18 日 下午 9:23

    1. Robert Nyman [编辑]

      现在它被禁用了,计划在不久的将来默认启用。我不能说关于隐私选项卡,但一般来说,像地理位置、离线存储这样的其他 API 一样,都会弹出对话框,用户需要批准才能使用。

      2013 年 2 月 19 日 上午 1:54

本文的评论已关闭。