WebM 中的 PCM 支持,以及 Chrome 的 WebM 实现

PCM support in WebM, and Chrome's WebM implementation

WebM 是否支持音频编解码器的 PCM?

我认为没有,但我在 WebM documentation page 上看到支持 BitDepth 字段并带有以下注释:

BitDepth - Bits per sample, mostly used for PCM.

如果 WebM 支持 PCM,Chrome 的实现是否支持?如果是,什么内容类型适合与 MediaRecorder 一起使用?这些都是return false:

MediaRecorder.isTypeSupported('video/webm;codecs=h264,pcm');
MediaRecorder.isTypeSupported('video/webm;codecs=h264,wav');
MediaRecorder.isTypeSupported('video/webm;codecs=h264,adpcm');
MediaRecorder.isTypeSupported('video/webm;codecs=h264,pcm_s16le');
MediaRecorder.isTypeSupported('audio/wav');

WebM 不支持 PCM 音频。

WebM files consist of video streams compressed with the VP8 or VP9 video codecs and audio streams compressed with the Vorbis or Opus audio codecs.

来源 - http://www.webmproject.org/about/

VP8/VP9 video and Vorbis/Opus audio are the only codecs allowed in a valid .webm file. Why did you define WebM so narrowly?

We decided to define WebM files in this way because we wanted to do what’s best for users.

来源 - https://www.webmproject.org/about/faq/

关于您的文档说明:

I didn't think it did, but I see on the WebM documentation page that there is support for a BitDepthfield with the following comment

WebM 是 Matroska 格式的子集。您引用的页面只是其网站上 Matroska 规范的副本:

https://www.matroska.org/technical/specs/index.html

WebM页面借用了所有内容,并注明是否支持属性。 'Bits per sample, mostly used for PCM.' 行 - 是原始的 Matroska 规范,就像所有其他行一样,例如'Table of horizontal angles for each successive channel, see appendix.' - 请注意没有给出附录,但在原始的 Matroska 规范页面上有一个指向附录的超链接。 Matroska 规范有特定的 属性 描述,因为 Matroska 支持 PCM 音频。

对于 Chrome 中的 PCM 支持,请参阅 Sepehr 的精彩回答。

最新的 Chromium 现在支持 PCM。 Here is a reference 用于 Chromium 中 MediaRecorder 的有效 MIME 类型列表。

作为快照,以下是 Google Chrome 版本 64.0.3282.167(官方构建)(64 位)中当前支持的那些:

MediaRecorder.isTypeSupported("video/webm")
MediaRecorder.isTypeSupported("video/webm;codecs=vp8")
MediaRecorder.isTypeSupported("video/webm;codecs=vp9")
MediaRecorder.isTypeSupported("video/webm;codecs=vp8.0")
MediaRecorder.isTypeSupported("video/webm;codecs=vp9.0")
MediaRecorder.isTypeSupported("video/webm;codecs=h264")
MediaRecorder.isTypeSupported("video/webm;codecs=H264")
MediaRecorder.isTypeSupported("video/webm;codecs=avc1")
MediaRecorder.isTypeSupported("video/webm;codecs=vp8,opus")
MediaRecorder.isTypeSupported("video/webm;codecs=vp8,pcm")
MediaRecorder.isTypeSupported("video/WEBM;codecs=VP8,OPUS")
MediaRecorder.isTypeSupported("video/webm;codecs=vp9,opus")
MediaRecorder.isTypeSupported("video/webm;codecs=vp9,pcm")
MediaRecorder.isTypeSupported("video/webm;codecs=vp8,vp9,opus")
MediaRecorder.isTypeSupported("video/webm;codecs=h264,opus")
MediaRecorder.isTypeSupported("video/webm;codecs=h264,vp9,opus")
MediaRecorder.isTypeSupported("video/x-matroska;codecs=avc1")
MediaRecorder.isTypeSupported("audio/webm")
MediaRecorder.isTypeSupported("audio/webm;codecs=opus")
MediaRecorder.isTypeSupported("audio/webm;codecs=pcm")

请注意,如果您使用的是 运行 Chromium,您需要在构建时使用 proprietary_codecs 支持一些更奇特的 h264/avc1 才能工作。