WebRTC 已启用,Win 7 上默认启用 H.264/MP3 支持,Windows 8 的 Metro UI 等等 - Firefox 开发亮点

再次关注 Firefox 的最新进展。这些文章是我们的 尖端技术Firefox 开发亮点 系列的一部分 - 请注意,大多数示例仅在 Firefox Nightly 中有效(并且可能随时更改)。

WebRTC 默认启用

以前,您需要转到 Firefox 中的 about:config 并将 media.peerconnection.enabled 选项设置为 true,但现在它已默认启用。这是一个巨大的进步,能够直接在 Web 浏览器中运行 WebRTC,而无需任何特殊设置或配置。

有关此决定的更多详细信息,请阅读 关于 WebRTC 的默认设置

想要开始使用 WebRTC 吗?然后我们推荐您阅读我们的文章 使用 getUserMedia/WebRTC 进行跨浏览器摄像头捕获

Metro UI

新的 Firefox 用户界面 for Windows 8 已发布(如果您将 Firefox Nightly 设置为默认浏览器,请重置该权限以查看新界面)。

还有 更多屏幕截图 可供查看。

Windows 7 上默认启用 H.264 & MP3 支持

我们之前 讨论过 H.264 & MP3 支持,现在该支持已默认启用。

我们仍在努力支持 Mac OS X 和 Linux。

WebAudio API 进展

我们正在努力实现 WebAudio API,并且支持的第一部分刚刚开始出现。

它在 about:config 中的 media.webaudio.enabled 选项中可用 - 将其设置为 true 以启用它,并能够访问诸如 AudioContext.decodeAudioData 之类的内容。

Crypto API: window.crypto.getRandomValues

如果您提供基于整数的 TypedArray(即 Int8Array、Uint8Array、Int16Array、Uint16Array、Int32Array 或 Uint32Array),window.crypto.getRandomValues 将用密码学随机数填充该数组。

/* assuming that window.crypto.getRandomValues is available */

var array = new Uint32Array(10);
window.crypto.getRandomValues(array);

console.log("Your lucky numbers:");
for (var i = 0; i < array.length; i++) {
    console.log(array[i]);
}

canvas: ctx.isPointInStroke

这已升级到 Firefox 19 Beta。

来自 WHATWG 邮件列表

”我们最近在 Firefox 中实现了 isPointInStroke(x,y)(https://bugzilla.mozilla.org/show_bug.cgi?id=803124)。这与 isPointInPath(x,y) 相似,如果该点位于路径描边所包含的区域内,则返回 true。”

JavaScript: Math.imul

Math.imul 允许使用类似 C 的语义进行快速的 32 位整数乘法。此功能对 Emscripten 等项目很有用。

Polyfill

function imul(a, b) {
    var ah  = (a >>> 16) & 0xffff;
    var al = a & 0xffff;
    var bh  = (b >>> 16) & 0xffff;
    var bl = b & 0xffff;
    // the shift by 0 fixes the sign on the high part
    return (al * bl) + (((ah * bl + al * bh) << 16) >>> 0);
}

关于 Paul Rouget

Paul 是 Firefox 开发人员。

Paul Rouget 的更多文章…

关于 Robert Nyman [荣誉编辑]

Mozilla Hacks 的技术布道者和编辑。关于 HTML5、JavaScript 和开放网络进行演讲和博客。Robert 坚信 HTML5 和开放网络,自 1999 年以来一直致力于网页前端开发 - 在瑞典和纽约市。他还定期在 http://robertnyman.com 上写博客,并且喜欢旅行和结识新朋友。

Robert Nyman [荣誉编辑] 的更多文章…


21 条评论

  1. Sam Tobin-Hochstadt

    Math.imul 的 polyfill 被实体引用而不是 > 符号破坏了。

    2013 年 2 月 20 日 下午 06:01

    1. Robert Nyman [编辑]

      谢谢!现在已修复。

      2013 年 2 月 20 日 下午 07:09

      1. Nate

        您在随机数示例的 for 循环中也存在相同问题,使用了 < 符号。

        2013 年 2 月 27 日 下午 02:29

        1. Robert Nyman [编辑]

          谢谢!

          2013 年 2 月 27 日 下午 07:37

  2. 很棒

    很棒!我喜欢 Mozilla 和朋友们在过去几年中取得的成就,WebRTC 在许多方面无疑是一个里程碑。

    我不太喜欢的一件事是支持 H.264 & MP3,因为这意味着像 WebRTC 这样的开放格式可能会在某些方面获胜,但网络上的大多数视频/音频内容仍然(仅)可以用 H.264 & MP3 获得,这很遗憾。

    但感谢您所有人的辛勤工作,并祝您未来一切顺利!

    2013 年 2 月 20 日 下午 18:12

    1. Robert Nyman [编辑]

      这是一个有效的观点。我们对视频做了一些事情 - 正如 视频、移动设备和开放网络 中概述的那样 - 但目前就是这样。

      2013 年 2 月 21 日 上午 01:28

  3. Adam Ullman

    我假设这意味着 WebRTC 刚刚在当前的 Firefox Nightly 版本(21)中默认启用。我们预计哪个版本的 Firefox 将默认开启此选项并进入生产环境?仍然是 21 版吗?

    2013 年 2 月 20 日 下午 18:25

    1. Robert Nyman [编辑]

      是的,这就是它的意思。是的,如果一切顺利,它应该在 Firefox 21 中启用。

      2013 年 2 月 21 日 上午 01:30

  4. Benz

    这意味着仅限 Windows 7 还是 Windows 7 及更高版本(也包括 Win8)?

    2013 年 2 月 21 日 上午 08:51

    1. Robert Nyman [编辑]

      据我所知,这意味着也应该包括 Windows 8。

      2013 年 2 月 21 日 下午 13:25

      1. bitinn

        我认为这篇文章应该更新,因为 Windows 8 上的 Firefox 20(稳定版)的 media.windows-media-foundation.enabled 仍然设置为 false,我假设 Windows 7 上也是如此。

        2013 年 4 月 9 日 下午 21:40

        1. Robert Nyman [编辑]

          我理解这种情绪,但这些博客文章开头明确说明这些是在 Nightly 版本中实施的功能,用于测试,并且可能会发生变化。

          2013 年 4 月 10 日 上午 04:06

  5. T-Bone

    您好,

    我尝试使用 Web Audio API 播放声音,但它不起作用。

    window.addEventListener(‘load’, init, false);
    function init() {
    loadSound(“sound.ogg”);
    }

    var context = new AudioContext();
    var soundBuffer = null;

    function loadSound(url) {
    var request = new XMLHttpRequest();
    request.open(‘GET’, url, true);
    request.responseType = ‘arraybuffer’;

    // 异步解码
    request.onload = function() {
    context.decodeAudioData(request.response, function(buffer) {
    soundBuffer = buffer;

    AudioBufferSourceNode = context.createBufferSource();
    AudioBufferSourceNode.buffer = soundBuffer;
    AudioBufferSourceNode.connect(context.destination);
    AudioBufferSourceNode.start(0);

    }, function(e){ console.log(e)});
    }
    request.send();
    }

    它在 Chrome 中运行良好(使用 webkitAudioContext)。

    为什么声音从未开始播放?
    声音文件已加载。

    2013 年 2 月 24 日 下午 13:12

    1. Robert Nyman [编辑]

      感谢您的反馈。请 提交错误报告,因为它还处于早期阶段,并让负责它的工程师有机会查看。

      2013 年 2 月 26 日 下午 16:32

  6. Dark Shikari

    既然 H.264 和 WebRTC 都已默认启用,为什么不在 WebRTC 通话中支持 H.264 呢?

    2013 年 2 月 26 日 下午 14:33

    1. Robert Nyman [编辑]

      文件和流的编解码器支持是两件截然不同的事情。

      2013 年 2 月 26 日 下午 16:49

  7. mikecao

    我遇到了如下问题。
    Firefox 表示其 Nightly 版本已支持 WebRTC,因此我想尝试一下,但代码失败了。我可以显示本地视图,但无法获取远程流。我使用默认的 STUN 服务器“pc_config = {“iceServers”: [{“url”: “stun:23.21.150.121:3478″}]};”。并且发现 STUN 服务器没有对绑定消息做出响应。并且 peerconnection 的状态始终为 undefined。
    以下是 SDP 信息。
    发送本地 SDP 信息到对等方:{“type”:”offer”,”sdp”:”v=0rno=Mozilla-SIPUA 12384 0 IN IP4 0.0.0.0rns=SIP Callrnt=0 0rna=ice-ufrag:7e451024rna=ice-pwd:5475363d54056aa6945e62e5b18a4669rna=fingerprint:sha-256 FB:B8:50:2E:DE:94:3F:4A:BB:43:D7:B0:69:8B:1E:86:7B:CC:6A:32:F6:42:FD:79:C7:A1:C7:3D:76:0F:32:AErnm=audio 3205 RTP/SAVPF 109 0 8 101rnc=IN IP4 135.252.33.50rna=rtpmap:109 opus/48000/2rna=ptime:20rna=rtpmap:0 PCMU/8000rna=rtpmap:8 PCMA/8000rna=rtpmap:101 telephone-event/8000rna=fmtp:101 0-15rna=sendrecvrna=candidate:0 1 UDP 2111832319 135.252.33.50 3205 typ hostrna=candidate:0 2 UDP 2111832318 135.252.33.50 3206 typ hostrnm=video 3207 RTP/SAVPF 120rnc=IN IP4 135.252.33.50rna=rtpmap:120 VP8/90000rna=sendrecvrna=candidate:0 1 UDP 2111832319 135.252.33.50 3207 typ hostrna=candidate:0 2 UDP 2111832318 135.252.33.50 3208 typ hostrnm=application 3209 SCTP/DTLS 5000 rnc=IN IP4 135.252.33.50rna=fmtp:5000 protocol=webrtc-datachannel;streams=16rna=sendrecvrna=candidate:0 1 UDP 2111832319 135.252.33.50 3209 typ hostrna=candidate:0 2 UDP 2111832318 135.252.33.50 3210 typ hostrn”}

    传入的信令消息对等方 SDP
    {“type”:”answer”,”sdp”:”v=0rno=Mozilla-SIPUA 20697 0 IN IP4 0.0.0.0rns=SIP Callrnt=0 0rna=ice-ufrag:ea0eceabrna=ice-pwd:e293eaad085cbe8b06e3d68a75b4b430rna=fingerprint:sha-256 BF:69:96:9A:D6:0B:A4:61:61:F9:62:6E:A7:38:76:29:3B:BA:6D:E8:D2:93:07:62:FA:E3:F9:92:CE:E0:50:C3rnm=audio 1616 RTP/SAVPF 109 101rnc=IN IP4 135.252.33.103rna=rtpmap:109 opus/48000/2rna=ptime:20rna=rtpmap:101 telephone-event/8000rna=fmtp:101 0-15rna=sendrecvrna=candidate:0 1 UDP 2111832319 135.252.33.103 1616 typ hostrna=candidate:0 2 UDP 2111832318 135.252.33.103 1617 typ hostrnm=video 1618 RTP/SAVPF 120rnc=IN IP4 135.252.33.103rna=rtpmap:120 VP8/90000rna=sendrecvrna=candidate:0 1 UDP 2111832319 135.252.33.103 1618 typ hostrna=candidate:0 2 UDP 2111832318 135.252.33.103 1619 typ hostrnm=application 1620 SCTP/DTLS 5001 rnc=IN IP4 135.252.33.103rna=sendrecvrna=candidate:0 1 UDP 2111832319 135.252.33.103 1620 typ hostrna=candidate:0 2 UDP 2111832318 135.252.33.103 1621 typ hostrn”}

    有哪位专家可以给我一些建议吗?

    2013年3月10日 下午10:24

    1. Robert Nyman [编辑]

      提交一个错误报告 ,谢谢。

      2013年3月11日 上午7:35

      1. mikecao

        如何提交?我认为是STUN问题。您曾经使用Firefox Nightly进行视频通话吗?如果是,您能告诉我您使用的哪个版本吗?

        2013年3月13日 上午2:01

        1. Robert Nyman [编辑]

          您需要访问上面的链接,点击“提交错误报告”(如果您没有帐户,请创建一个),然后列出您拥有的所有信息。

          它应该在最新的Firefox Nightly中运行良好。

          2013年3月13日 上午2:48

          1. mikecao

            感谢您的帮助。
            我怀疑是STUN问题,因为没有调用onIceCandidate(peerConn.onicecandidate = onIceCandidate)。

            2013年3月13日 下午6:56

本文评论已关闭。