8

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

这是一个代码片段:

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 异常。

火狐不支持mp3吗?从 MDN 支持的格式列表(https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats)中,这意味着如果操作系统支持 mp3 支持应该存在 - 以及我正在测试的操作系统(OSX)确实支持它。

任何帮助表示赞赏!

4

3 回答 3

9

好的,所以我能够在 Mozilla 从事媒体源扩展的工程师的帮助下解决这个问题。

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

现在,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 成为自适应和渐进式流媒体的良好候选格式。

于 2015-12-28T18:31:25.500 回答
0

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

于 2021-01-28T07:44:37.120 回答
0

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

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

于 2015-11-27T12:20:11.830 回答