音频/ mp4;无法在Chrome和Firefox中播放codecs =“ mp4a.40.2” 这是有趣的部分:更新请参见

问题描述

似乎我想将要在我的网站上流式传输的音频转换为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"');

错误是:

Chrome浏览器:

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

Firefox:

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
                                                             ^^^ 

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


请参见

解决方法

在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

但是,如果您使用类似这样的非标准扩展名,则可能还需要更新Web服务器配置,以便其报告正确的媒体类型。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...