音频/mp4;codecs="mp4a.40.2" 无法在 Chrome 和 Firefox 中播放

dis*_*ame 1 firefox google-chrome ffmpeg audio-streaming media-source

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

使用ffmpeg-cli-wrapper,我在此处使用以下命令转换我上传的音频文件:

ffmpeg -i /tmp/input.any -acodec aac -b:a 256000 /tmp/output.aac
Run Code Online (Sandbox Code Playgroud)

在客户端上,我创建一个像这样的 SourceBuffer:

ffmpeg -i /tmp/input.any -acodec aac -b:a 256000 /tmp/output.aac
Run Code Online (Sandbox Code Playgroud)

错误是:

铬合金:

NotSupportedError: Failed to load because no supported source was found.
Run Code Online (Sandbox Code Playgroud)

火狐浏览器:

NotSupportedError: The media resource indicated by the src attribute or assigned media provider object was not suitable.
Run Code Online (Sandbox Code Playgroud)

有趣的部分来了:

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

this.sourceBuffer = this.mediaSource.addSourceBuffer('audio/mp4; codecs="mp4a.40.2"');
Run Code Online (Sandbox Code Playgroud)

音频在 Chrome 上正确播放,但 Firefox 说:

MediaSource.addSourceBuffer: Type not supported in MediaSource
Run Code Online (Sandbox Code Playgroud)

更新

将命令更改为后

ffmpeg -i /tmp/input.any -acodec aac -b:a 256000 /tmp/output.mp4
                                                             ^^^ 
Run Code Online (Sandbox Code Playgroud)

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


mar*_*k4o 5

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

ffmpeg -i /tmp/input.any -acodec aac -b:a 256000 /tmp/output.m4a
Run Code Online (Sandbox Code Playgroud)

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

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

ffmpeg -i /tmp/input.any -acodec aac -b:a 256000 -f mp4 /tmp/output.aac
Run Code Online (Sandbox Code Playgroud)

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