【问题标题】:audio/mp4; codecs="mp4a.40.2" not playing in Chrome and Firefox音频/mp4; codecs="mp4a.40.2" 无法在 Chrome 和 Firefox 中播放
【发布时间】:2020-10-18 10:58:56
【问题描述】:

我似乎想将我想在我的网站上流式传输的音频转换为audio/mp4; codecs="mp4a.40.2"

使用ffmpeg-cli-wrapper,我在这里用这个命令转换我上传的音频文件:

ffmpeg -i /tmp/input.any -acodec aac -b:a 256000 /tmp/output.aac

在客户端上,我正在创建这样的 SourceBuffer:

this.sourceBuffer = this.mediaSource.addSourceBuffer('audio/mp4; codecs="mp4a.40.2"');

错误是:

铬:

NotSupportedError: Failed to load because no supported source was found.

火狐:

NotSupportedError: The media resource indicated by the src attribute or assigned media provider object was not suitable.

有趣的部分来了:

如果我使用 audio/aac 作为 mime-type 创建 SourceBuffer:

this.sourceBuffer = this.mediaSource.addSourceBuffer('audio/aac');

音频在 Chrome 上正常播放,但 Firefox 显示:

MediaSource.addSourceBuffer: Type not supported in MediaSource

更新

将命令改为

ffmpeg -i /tmp/input.any -acodec aac -b:a 256000 /tmp/output.mp4
                                                             ^^^ 

Chrome/Firefox 在使用audio/mp4; codecs="mp4a.40.2" 时不会报错,但没有播放音频。


【问题讨论】:

    标签: google-chrome firefox ffmpeg audio-streaming media-source


    【解决方案1】:

    在您的 ffmpeg 命令中,使用扩展名 .m4a(或 .mp4),而不是 .aac

    ffmpeg -i /tmp/input.any -acodec aac -b:a 256000 /tmp/output.m4a
    

    .aac 扩展名用于 ADTS 容器中的 AAC,这不是 Web 上广泛使用或支持的格式。 .m4a.mp4 扩展名用于 MP4 容器中的 AAC,这要常见得多。

    或者,如果出于某种原因您确实希望将文件命名为output.aac,但又希望它在 MP4 中包含 AAC,那么您可以指定输出格式,而不是让 ffmpeg 根据输出文件扩展名:

    ffmpeg -i /tmp/input.any -acodec aac -b:a 256000 -f mp4 /tmp/output.aac
    

    但如果您使用这样的非标准扩展程序,那么您可能还需要更新您的网络服务器配置,以便它报告正确的媒体类型。

    【讨论】:

    • 所以我现在使用的命令是:ffmpeg -y -v quiet -i /tmp/input -acodec aac -b:a 256000 /tmp/output.m4a,而我用于 MediaSource 的 mime 类型是 audio/mp4; codecs="mp4a.40.2",但在 Chrome 上,音频回复不起作用。 ://
    • 它没有崩溃或给出任何错误。它只是没有开始播放音频..
    • 作为一个快速的hack,您可以将-movflags faststart 添加到ffmpeg 命令 - 这会将moov 框(这是保存示例元数据的位)放在文件的开头,并且你可能会得到播放。但实际上,您可能希望将分段 mp4 与 MSE 一起使用,因为在以与 MP3 相同的方式搜索时,您不能只添加样本数据的字节范围。片段与特定时间范围相关,您可以为您感兴趣的位附加整个 MP4 片段。ffmpeg 可能会输出这些片段,或者您可以调查MP4boxbento
    • @AnonymousCoward 嗯...好吧,我想一旦我弄清楚如何创建分段的 mp4,我使用的 mime 类型就不再适用了,对吧?
    • 设法创建了一个 fMP4 但现在,当然,我不能流式传输这个东西......
    【解决方案2】:

    我遇到了类似的问题,我的 fMP4 如果直接用作视频标签内的 src,则可以正常播放,但通过 MediaSource Extensions 使用时无法播放。我的问题是我在 fMP4 中的 AAC 帧带有 ADTS 标头,而且 MSE 似乎不喜欢这些标头。因此,我从每个 AAC 帧中删除了 ADTS 标头,它工作正常。 (我已经在我的 ESDS 框中添加了音频特定配置,因此我可以毫无问题地删除 ADTS 标头。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-19
      • 1970-01-01
      • 2023-03-21
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      相关资源
      最近更新 更多