媒体容器格式(文件类型)

音频和视频媒体文件的格式定义分为两个部分(如果文件同时包含音频和视频,则为三个部分):使用的音频和/或视频编解码器以及使用的媒体容器格式(或文件类型)。在本指南中,我们将重点介绍 Web 上最常用的容器格式,涵盖有关其规范以及其优势、限制和理想用例的基本信息。

WebRTC 根本不使用容器。相反,它使用 MediaStreamTrack 对象来表示每个轨道,直接从一个对等节点流式传输编码的音频和视频轨道到另一个对等节点。有关 WebRTC 常用的编解码器以及 WebRTC 中编解码器支持的浏览器兼容性信息,请参阅 WebRTC 使用的编解码器

常见容器格式

虽然存在大量的媒体容器格式,但下面列出的格式是最有可能遇到的格式。有些只支持音频,而有些则支持音频和视频。列出了每个格式的 MIME 类型和扩展名。Web 上最常用的媒体容器可能是 MPEG-4 (MP4)、Web 媒体文件 (WEBM) 和 MPEG 音频层 III (MP3)。但是,您也可能会遇到 MP3、Ogg、WAV、AVI、MOV 和其他格式。然而,并非所有这些格式都得到浏览器的广泛支持;某些容器和编解码器的组合有时出于便利性或其普遍性的原因,会使用自己的文件扩展名和 MIME 类型。例如,仅包含 Opus 音频轨道的 Ogg 文件有时被称为 Opus 文件,甚至可能具有 .opus 扩展名。但它实际上仍然只是一个 Ogg 文件。

在其他情况下,特定编解码器存储在特定容器类型中,非常普遍,以至于这种配对以独特的方式对待。一个很好的例子是 MP3 音频文件,它实际上是 MPEG-1 容器,包含使用 MPEG-1 音频层 III 编码的单个音频轨道。这些文件使用 audio/mp3 MIME 类型和 .mp3 扩展名,即使它们的容器只是 MPEG。

媒体容器格式(文件类型)索引

要详细了解特定容器格式,请在此列表中找到它并点击查看详细信息,包括容器通常的用途、支持的编解码器以及支持它的浏览器等具体信息。

编解码器名称(简短) 完整编解码器名称 浏览器兼容性
3GP 第三代合作伙伴计划 Firefox for Android
ADTS 音频数据传输流

Firefox

仅当底层操作系统的媒体框架支持时才可用。

FLAC 无损音频编解码器 所有浏览器。
MPEG / MPEG-2 运动图像专家组 (1 和 2)
MPEG-4 (MP4) 运动图像专家组 4 所有浏览器。
Ogg Ogg 所有浏览器。
QuickTime (MOV) Apple QuickTime 电影 仅旧版本的 Safari,以及其他支持 Apple QuickTime 插件的浏览器
WebM Web 媒体 所有浏览器。

除非另有说明,否则如果此处列出了浏览器,则表示移动和桌面浏览器兼容性均已隐含。支持也仅指容器本身,而不是任何特定编解码器。

3GP

3GP3GPP 媒体容器用于封装专门用于通过蜂窝网络传输以便在移动设备上观看的音频和/或视频。该格式最初设计用于 3G 手机,但仍可用于更现代的手机和网络。但是,大多数网络上带宽的可用性和数据限制的增加减少了对 3GP 格式的需求。但是,此格式仍用于速度较慢的网络和性能较低的手机。

此媒体容器格式源自 ISO 基本媒体文件格式和 MPEG-4,但专门针对较低带宽场景进行了简化。

音频 视频
audio/3gpp video/3gpp
audio/3gpp2 video/3gpp2
audio/3gp2 video/3gp2

这些 MIME 类型是 3GP 媒体容器的基本类型;其他类型可能会根据使用的特定编解码器或编解码器组合而使用。此外,您可以 向 MIME 类型字符串添加 codecs 参数,以指示用于音频和/或视频轨道的编解码器,并可以选择提供有关配置文件、级别和/或其他编解码器配置细节的信息。

3GP 支持的视频编解码器
编解码器 浏览器支持
Chrome Edge Firefox Safari
AVC (H.264)
H.263
MPEG-4 第 2 部分 (MP4v-es)
VP8
3GP 支持的音频编解码器
编解码器 浏览器支持
Chrome Edge Firefox Safari
AMR-NB
AMR-WB
AMR-WB+
AAC-LC
HE-AAC v1
HE-AAC v2
MP3

ADTS

音频数据传输流 (ADTS) 是 MPEG-4 第 3 部分中指定的音频数据的容器格式,用于流式传输音频,例如互联网广播。它本质上是几乎裸露的 AAC 音频数据流,由带有最小标头的 ADTS 帧组成。

音频
audio/aac
audio/mpeg

ADTS 使用的 MIME 类型取决于它包含的音频帧类型。如果使用 ADTS 帧,则应使用 audio/aac MIME 类型。如果音频帧采用 MPEG-1/MPEG-2 音频层 I、II 或 III 格式,则 MIME 类型应为 audio/mpeg

ADTS 支持的音频编解码器
编解码器 浏览器支持
Chrome Edge Firefox Safari
AAC
MP3

Firefox 对 AAC 的支持依赖于操作系统的媒体基础结构,因此只要操作系统支持它,它就可以使用。

FLAC

无损音频编解码器 (FLAC) 是一种无损音频编解码器;还存在一个关联的简单容器格式,也称为 FLAC,它可以包含此音频。该格式不受任何专利限制,因此其使用不受干扰。FLAC 文件只能包含 FLAC 音频数据。

音频
audio/flac
audio/x-flac(非标准)
FLAC 支持的音频编解码器
编解码器 浏览器支持
Chrome Edge Firefox Safari
FLAC

MPEG/MPEG-2

MPEG-1MPEG-2 文件格式基本相同。由运动图像专家组 (MPEG) 创建,这些格式广泛用于物理媒体,包括 DVD 介质上的视频格式。

在互联网上,MPEG 文件格式最常见的用途可能是包含 Layer_III/MP3 声音数据;生成的文件是全球数字音乐设备广泛使用的流行 MP3 文件。否则,MPEG-1 和 MPEG-2 在 Web 内容中并不广泛使用。

MPEG-1 和 MPEG-2 之间的主要区别在于媒体数据格式,而不是容器格式。MPEG-1 于 1992 年推出;MPEG-2 于 1996 年推出。

音频 视频
audio/mpeg video/mpeg
MPEG-1 和 MPEG-2 支持的视频编解码器
编解码器 浏览器支持
Chrome Edge Firefox Safari
MPEG-1 第 2 部分
MPEG-2 第 2 部分
MPEG-1 和 MPEG-2 支持的音频编解码器
编解码器 浏览器支持
Chrome Edge Firefox Safari
MPEG-1 音频层 I
MPEG-1 音频层 II
MPEG-1 音频层 III (MP3)

MPEG-4 (MP4)

MPEG-4 (MP4) 是 MPEG 文件格式的最新版本。该格式有两个版本,分别在规范的第 1 部分和第 14 部分中定义。MP4 是当今流行的容器,因为它支持几种最常用的编解码器,并且得到广泛的支持。

最初的 MPEG-4 第 1 部分文件格式于 1999 年推出;在 2003 年添加了第 14 部分中定义的版本 2 格式。MP4 文件格式源自 ISO 基本媒体文件格式,该格式直接源自 QuickTime 文件格式,该格式由 Apple 开发。

在指定 MPEG-4 媒体类型 (audio/mp4video/mp4) 时,您可以 向 MIME 类型字符串添加 codecs 参数,以指示用于音频和/或视频轨道的编解码器,并可以选择提供有关配置文件、级别和/或其他编解码器配置细节的信息。

音频 视频
audio/mp4 video/mp4

这些 MIME 类型是 MPEG-4 媒体容器的基本类型;其他 MIME 类型可能会根据容器中使用的特定编解码器或编解码器而使用。此外,您还可以添加 codecs 参数到 MIME 类型字符串,以指示哪些编解码器用于音频和/或视频轨道,并可选地提供有关配置文件、级别和/或其他编解码器配置细节的信息。

MPEG-4 支持的视频编解码器
编解码器 浏览器支持
Chrome Edge Firefox Safari
AVC (H.264)

Firefox 对 H.264 的支持依赖于操作系统的媒体基础设施,因此只要操作系统支持它,它就可用。

AV1

Firefox 对 AV1 的支持在 Windows on ARM 上被禁用(通过将首选项 media.av1.enabled 设置为 true 来启用)。

H.263
MPEG-4 第二部分视觉
VP9
MPEG-4 支持的音频编解码器
编解码器 浏览器支持
Chrome Edge Firefox Safari
AAC

Firefox 对 H.264 的支持依赖于操作系统的媒体基础设施,因此只要操作系统支持它,它就可用。

FLAC
MPEG-1 音频层 III (MP3)
Opus

Ogg

The Ogg 容器格式是一种由 Xiph.org Foundation维护的免费开放格式。Ogg 框架还定义了不受专利约束的媒体数据格式,例如 Theora 视频编解码器和 Vorbis 和 Opus 音频编解码器。 Xiph.org 关于 Ogg 格式的文档可在其网站上找到。

虽然 Ogg 已经存在很长时间,但它从未获得广泛的支持,无法使其成为媒体容器的首选。通常,使用 WebM 会更好,尽管在某些情况下 Ogg 很有用,例如当您希望支持旧版本的 Firefox 和 Chrome 时,它们尚不支持 WebM。例如,Firefox 3.5 和 3.6 支持 Ogg,但不支持 WebM。

您可以在 Theora Cookbook 中获得有关 Ogg 及其编解码器的更多信息。

音频 视频
audio/ogg video/ogg

application/ogg MIME 类型可以在您不确定媒体是否包含音频或视频时使用。如果可能,您应该使用其中一种特定类型,但如果您不知道内容格式,请回退到 application/ogg

您还可以添加 codecs 参数到 MIME 类型字符串,以指示哪些编解码器用于音频和/或视频轨道,并可选地进一步描述轨道媒体格式。

Ogg 支持的视频编解码器
编解码器 浏览器支持
Chrome Edge Firefox Safari
Theora
VP8
VP9
Ogg 支持的音频编解码器
编解码器 浏览器支持
Chrome Edge Firefox Safari
FLAC
Opus
Vorbis

警告: 在 Firefox Linux 64 位上播放超过 12 小时 35 分 39 秒的 Ogg Opus 音频文件时,文件会被截断并出现寻址问题 (Firefox 错误 1810378)。

QuickTime

QuickTime 文件格式 (QTFF, QTMOV) 由 Apple 创建,供其同名媒体框架使用。这些文件扩展名为 .mov,因为该格式最初用于电影,通常称为“QuickTime 电影”格式。虽然 QTFF 是 MPEG-4 文件格式的基础,但两者之间存在差异,并且不能完全互换。

QuickTime 文件支持任何类型的基于时间的​​数据,包括音频和视频媒体、文本轨道等等。QuickTime 文件主要由 macOS 支持,但多年来,QuickTime for Windows 可用于在 Windows 上访问它们。但是,从 2016 年初开始,Apple 不再支持 QuickTime for Windows,并且不应使用,因为存在已知的安全问题。但是,Windows Media Player 现在已集成支持 QuickTime 版本 2.0 及更早版本的​​文件;对更高版本的 QuickTime 的支持需要第三方添加。

在 Mac OS 上,QuickTime 框架不仅支持 QuickTime 格式的电影文件和编解码器,还支持大量流行的和专业的音频和视频编解码器,以及静态图像格式。通过 QuickTime,Mac 应用程序(包括 Web 浏览器,通过 QuickTime 插件或直接 QuickTime 集成)能够读取和写入音频格式,包括 AAC、AIFF、MP3、PCM 和 Qualcomm PureVoice;以及视频格式,包括 AVI、DV、Pixlet、ProRes、FLAC、Cinepak、3GP、H.261 到 H.265、MJPEG、MPEG-1 和 MPEG-4 第二部分、Sorenson 等等。

此外,QuickTime 还提供了一些第三方组件,其中一些组件为更多编解码器添加了支持。

由于 QuickTime 支持实际上主要在 Apple 设备上可用,因此它不再在互联网上广泛使用。Apple 本身现在通常使用 MP4 来播放视频。此外,QuickTime 框架在 Mac 上已经过时一段时间,并且从 macOS 10.15 Catalina 开始不再可用。

视频
video/quicktime

video/quicktime MIME 类型是 QuickTime 媒体容器的基本类型。值得注意的是,QuickTime(Mac 操作系统上的媒体框架)支持各种容器和编解码器,因此它实际上支持许多其他 MIME 类型。

您可以在添加 codecs 参数到 MIME 类型字符串,以指示哪些编解码器用于音频和/或视频轨道,并可选地提供有关配置文件、级别和/或其他编解码器配置细节的信息。

QuickTime 支持的视频编解码器
编解码器 浏览器支持
Chrome Edge Firefox Safari
AVC (H.264)
Cinepak
组件视频
DV
H.261
H.263
MPEG-2
MPEG-4 第二部分视觉
动态 JPEG
Sorenson Video 2
Sorenson Video 3
QuickTime 支持的音频编解码器
编解码器 浏览器支持
Chrome Edge Firefox Safari
AAC
ALaw 2:1
Apple 无损 (ALAC)
HE-AAC
MPEG-1 音频层 III (MP3)
Microsoft ADPCM
µ-Law 2:1 (u-Law)

WAVE (WAV)

波形音频文件格式 (WAVE),通常称为 WAV,因为其文件名扩展名为 .wav,是一种由 Microsoft 和 IBM 开发的用于存储音频比特流数据的格式。

它源自资源交换文件格式 (RIFF),因此与 Apple 的 AIFF 等其他格式类似。WAV 编解码器注册表可以在 RFC 2361 中找到;但是,由于几乎所有 WAV 文件都使用线性 PCM,因此对其他编解码器的支持很少。

WAVE 格式于 1991 年首次发布。

音频
audio/wave
audio/wav
audio/x-wav
audio/x-pn-wav

audio/wave MIME 类型是标准类型,是首选;但是,其他类型多年来一直被各种产品使用,并且可能在某些环境中也被使用。

WAVE 支持的音频编解码器
编解码器 浏览器支持
Chrome Edge Firefox Safari
ADPCM (自适应差分脉冲编码调制)
GSM 06.10
LPCM (线性脉冲编码调制)
MPEG-1 音频层 III (MP3)
µ-Law (u-Law)

WebM

WebM (Web 媒体) 是一种基于 Matroska 的格式,专门设计用于现代 Web 环境中使用。它完全基于免费开放的技术,主要使用同样是免费开放的编解码器,尽管一些产品也支持 WebM 容器中的其他编解码器。

WebM 于 2010 年首次推出,现在已得到广泛支持。符合规范的 WebM 实现需要支持 VP8 和 VP9 视频编解码器以及 Vorbis 和 Opus 音频编解码器。WebM 容器格式及其必需的编解码器都可以在开放许可下获得。任何其他编解码器可能需要许可才能使用。

音频 视频
audio/webm video/webm
WebM 支持的视频编解码器
编解码器 浏览器支持
Chrome Edge Firefox Safari
AV1

Firefox 对 AV1 的支持在 Firefox 66 中添加到 macOS;在 Firefox 67 中添加到 Windows;以及在 Linux 中添加到 Firefox 68。Firefox for Android 尚未支持 AV1;Firefox 中的实现设计为使用安全进程,该进程在 Android 中尚未得到支持。

VP8
VP9
WebM 支持的音频编解码器
编解码器 浏览器支持
Chrome Edge Firefox Safari
Opus
Vorbis

选择合适的容器

在选择要用于媒体的最佳容器或容器时,需要考虑几个因素。每个因素的相对重要性将取决于您的需求、许可要求以及目标受众的兼容性要求。

指南

最佳选择还取决于您对媒体的用途。播放媒体与录制和/或编辑媒体是不同的。如果您要操作媒体数据,使用未压缩的格式可以提高性能,而使用无损压缩格式至少可以防止噪声累积,因为压缩伪像会在每次重新压缩时被放大。

  • 如果您的目标受众可能包括移动用户,尤其是在低端设备或速度较慢的网络上,请考虑在 3GP 容器中提供您的媒体版本,并进行适当的压缩。
  • 如果您有任何特定的编码要求,请确保您选择的容器支持相应的编解码器。
  • 如果您希望您的媒体采用非专有、开放格式,请考虑使用其中一种开放容器格式,例如 FLAC(用于音频)或 WebM(用于视频)。
  • 如果您出于任何原因只能提供单一格式的媒体,请选择在最广泛的设备和浏览器上可用的格式,例如 MP3(用于音频)或 MP4(用于视频和/或音频)。
  • 如果您的媒体是纯音频,选择纯音频容器格式可能是有意义的。现在所有专利都已过期,MP3 是一种得到广泛支持且不错的选择。WAVE 很好,但未压缩,因此在将其用于大型音频样本之前,请注意这一点。FLAC 由于其无损压缩,是一个非常好的选择,如果目标浏览器都支持它。

不幸的是,两种相对主要的无损压缩格式(FLAC 和 ALAC)都没有得到普遍支持。FLAC 是两者中支持更广泛的格式,但在 macOS 上不支持,除非安装了额外的软件,并且在 iOS 上根本不支持。如果您需要提供无损音频,您可能需要提供 FLAC 和 ALAC 来实现近乎通用的兼容性。

容器选择建议

下面的表格提供了在各种场景中建议使用的容器。这些只是一些建议。在选择容器格式之前,请务必考虑应用程序和组织的需求。

纯音频文件

如果您需要… 考虑使用此容器格式
用于通用播放的压缩文件 MP3 (MPEG-1 音频第三层)
无损压缩文件 带 ALAC 回退的 FLAC
未压缩文件 WAV

现在 MP3 的所有专利都已过期,音频文件格式的选择变得容易得多。现在不再需要在 MP3 的广泛兼容性和使用它时需要支付版税之间进行选择。

视频文件

如果您需要… 考虑使用此容器格式
通用视频,最好采用开放格式 WebM (理想情况下带有 MP4 回退)
通用视频 MP4 (理想情况下带有 WebM 或 Ogg 回退)
针对缓慢连接进行优化的高压缩率 3GP (理想情况下带有 MP4 回退)
与旧设备/浏览器的兼容性 QuickTime (理想情况下带有 AVI 和/或 MPEG-2 回退)

这些建议做出了一些假设。在做出最终决定之前,您应该仔细考虑这些选项,尤其是在您有大量需要编码的媒体时。

最大化与多个容器的兼容性

为了优化兼容性,值得考虑提供多个版本的媒体文件,使用 <source> 元素在 <audio><video> 元素中指定每个源。例如,您可以将 Ogg 或 WebM 视频作为首选,并在 MP4 格式下提供备选方案。您甚至可以选择提供像 QuickTime 或 AVI 这样的复古备选方案,以确保万无一失。

为此,您可以创建一个没有 src 属性的 <video>(或 <audio>)元素。然后在 <video> 元素中添加子 <source> 元素,每个元素代表您提供的视频的一个版本。这可以用来提供视频的不同版本,这些版本可以根据带宽可用性进行选择,但在我们的案例中,我们将使用它来提供格式选项。

在下面显示的示例中,视频以两种格式提供给浏览器:WebM 和 MP4。

试试看

视频首先以 WebM 格式提供(type 属性设置为 video/webm)。如果 用户代理 无法播放它,它会继续下一个选项,其 type 指定为 video/mp4。如果两者都无法播放,则显示文本“此浏览器不支持 HTML 视频元素”。

规范

规范 注释
ETSI 3GPP 定义了 3GP 容器格式
ISO/IEC 14496-3 (MPEG-4 第 3 部分 音频) 定义了 MP4 音频,包括 ADTS
FLAC 格式 FLAC 格式规范
ISO/IEC 11172-1 (MPEG-1 第 1 部分 系统) 定义了 MPEG-1 容器格式
ISO/IEC 13818-1 (MPEG-2 第 1 部分 系统) 定义了 MPEG-2 容器格式
ISO/IEC 14496-14 (MPEG-4 第 14 部分:MP4 文件格式) 定义了 MPEG-4 (MP4) 版本 2 容器格式
ISO/IEC 14496-1 (MPEG-4 第 1 部分 系统) 定义了原始 MPEG-4 (MP4) 容器格式
RFC 3533 定义了 Ogg 容器格式
RFC 5334 定义了 Ogg 媒体类型和文件扩展名
QuickTime 文件格式规范 定义了 QuickTime 电影 (MOV) 格式
多媒体编程接口和数据规范 1.0 最接近官方 WAVE 规范的东西
资源交换文件格式 (WAV 使用) 定义了 RIFF 格式;WAVE 文件是 RIFF 的一种形式
WebM 容器指南 用于将 Matroska 适配为 WebM 的指南
Matroska 规范 WebM 所基于的 Matroska 容器格式的规范
WebM 字节流格式 用于与 媒体源扩展 一起使用的 WebM 字节流格式

浏览器兼容性

容器格式名称 音频 视频
MIME 类型 扩展名 浏览器支持 MIME 类型 扩展名 浏览器支持
3GP audio/3gpp .3gp Firefox video/3gpp .3gp Firefox
ADTS (音频数据传输流) audio/aac .aac Firefox
FLAC audio/flac .flac Firefox
MPEG-1 / MPEG-2 (MPG 或 MPEG) audio/mpeg .mpg
.mpeg
Firefox video/mpeg .mpg
.mpeg
Firefox
audio/mp3 .mp3 Firefox
MPEG-4 (MP4) audio/mp4 .mp4
.m4a
Firefox video/mp4 .mp4
.m4v
.m4p
Firefox
Ogg audio/ogg .oga
.ogg
Firefox video/ogg .ogv
.ogg
Firefox
QuickTime 电影 (MOV) video/quicktime .mov Safari
WAV (波形音频文件) audio/wav .wav Firefox
WebM audio/webm .webm Firefox video/webm .webm Firefox

另请参阅