【问题标题】:mp3 support on Firefox MediaSourceExtensionFirefox MediaSource 扩展上的 mp3 支持
【发布时间】:2016-02-20 16:48:51
【问题描述】:

我正在研究在浏览器中实现自适应和渐进式音频流,不使用插件。 MSE 是我一直在等待的 HTML5 API,在 FF 42 中可用,但似乎 Firefox 中的音频格式支持不存在?... 使用 MSE API 时,mp3 音频无法正常工作。

这是一个代码sn-p:

var mediaSource = new window.MediaSource();
var audioSourceBuffer;

mediaSource.addEventListener('sourceopen', function (e) {
    try {
        var mimeType = "audio/mpeg";
        audioSourceBuffer = mediaSource.addSourceBuffer(mimeType);
    } catch (e) {
        log('Exception calling addSourceBuffer', e);
        return;
    }
}

调用 addSourceBuffer 时出现 NotSupportedError 异常。

Firefox 不支持 mp3 吗?从 MDN 支持格式列表 (https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats) 中可以看出,如果操作系统支持它,则应该支持 mp3 - 而我正在测试的操作系统 (OSX) 确实支持它。

任何帮助表示赞赏!

【问题讨论】:

    标签: javascript html audio mp3 media-source


    【解决方案1】:

    我写了一些东西来在 javascript 中动态地将 mp3 封装在一个 mp4 中,特别是为了让这个东西在 Firefox 中工作。我只需要它来处理 128kbps 的流,所以这只适用于特定的比特率,没有专辑封面。以防其他人发现这很有用:https://gist.github.com/fanfare/0fa525af28b275fd6623942d7e9d70dd

    【讨论】:

      【解决方案2】:

      我在 linux 上使用 FF42,与我在阅读 documentation on MDN 时所相信的相反,默认情况下未启用 MediaSource API。

      您是否尝试过进入 about:config 并调整处理 MediaSource API 支持的编解码器的参数?我有 MP4 和 webm 的开关。不确定它是否对 MP3 有帮助,但可能值得一试。

      【讨论】:

      • 看来MSE从FF 42开始默认开启,支持mp4和webm。请参阅 Firefox about:config 并按 mediasource 过滤。但是,我已经尝试使用 mimeType = "audio/mp4" 并且虽然我没有得到 NotSupportedException (就像我使用 mimeTyle = "audio/mpeg" 得到的那样) - 即使我输入 m4a 文件(音频 MP4 )。有什么想法吗?
      • 只是为了确定,如果你在url字段中输入m4a文件的完整路径,FF会播放声音吗?
      • 在 linux 上更新到 Firefox 43 后,MediaSource API 现在默认启用。但是,我的错误与您的相同,mimeType = "audio/mpeg" 或 "audio/mp3"。有趣的是,我在urlbar中输入url时仍然可以直接播放mp3。
      • 与 ogg 文件相同的错误。所以问题不是由于许可限制。可能是 mimeType 的语法错误。
      • Firefox 上媒体源支持的唯一两种媒体类型是 mp4(默认开启)和 webm(默认关闭)。
      【解决方案3】:

      好的,在 Mozilla Media Source Extension 工程师的帮助下,我得以解决。

      首先要注意 MSE(媒体源扩展),它不一定支持浏览器的音频元素支持的所有媒体格式。为了说明这一点,虽然 Firefox 会在直接输入到浏览器或直接输入到音频元素时播放 mp3 文件,但如果将其输入到媒体源缓冲区,它不会播放相同的 mp3 文件。 p>

      现在,Firefox 的 MSE 实现实际上支持哪种媒体格式?答案是,从 Firefox 42 开始,默认情况下仅支持 fMP4(分段 MP4)。 webm 也受支持,但默认情况下不支持,您的用户必须通过 Firefox 的 about:config 页面手动打开它。创建新缓冲区时提供媒体源对象的 fMP4 mimeType 是:audio/mp4;编解码器="mp4a.40.2"

      如果您想知道 fMP4 到底是什么,它是 MPEG-4 标准的一部分,更具体地说是第 12 部分:“使用非多路复用音频/视频的 ISO 基本媒体文件格式 (ISOBMFF) ”。如果您对更多细节感兴趣,请查看它。

      根据我的经验,所有主要浏览器和操作系统都支持 fMP4 - 这使得 fMP4 成为自适应和渐进式流媒体的良好候选格式。

      HTH!

      【讨论】:

      • 如果你有整个缓冲区,你可以将你的音频元素的源设置为一个 blob URL: player.src = URL.createObjectURL(new Blob([buffer], { type: 'audio/ mpeg' }))
      • 你能用 fMP4 实现这个吗?我很难理解这种格式。见stackoverflow.com/questions/64433422/…
      猜你喜欢
      • 2012-05-16
      • 2017-11-12
      • 2011-12-24
      • 1970-01-01
      • 2012-01-22
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多