本文档介绍了 Android 平台提供的媒体编解码器、容器和网络协议支持。
下表介绍了 Android 平台内置的媒体格式支持。 “是”表示该格式适用于搭载所有 Android 版本的掌上设备和平板电脑。 如果指定了特定的 Android 平台,则该格式适用于搭载相应版本及所有后续版本的手机和平板电脑。此格式也可能适用于更早的版本,但我们不保证这一点。在手机和平板电脑以外的设备规格上,媒体格式支持可能会有所不同。
请注意,特定移动设备可能支持这些表格中未列出的其他格式或文件类型。此外,如果您直接使用 MediaCodec,则可以访问任何可用的媒体格式,而无需考虑支持的文件类型和容器格式。
音频支持
| 格式 | 编码器 | 解码器 | 文件类型容器格式 | 详细信息 | |
|---|---|---|---|---|---|
| 提取器 | 混合器 | ||||
| AAC LC | 是 | 是 |
• 3GPP (.3gp) • ADTS 原始 AAC(.aac,不支持 ADIF) • MPEG-TS(.ts,不可查找,Android 3.0 及更高版本) |
• 3GPP (.3gp) • ADTS 原始 AAC(.aac,不支持 ADIF) • MPEG-TS(不确定)(.ts,不可查找,Android 3.0 及更高版本) |
支持单声道/立体声/5.0/5.1 内容,标准采样率为 8-48 kHz。 |
| HE-AACv1 (AAC+) | Android 4.1 及更高版本 | 是 | |||
| HE-AACv2(增强型 AAC+) | 是 | 支持立体声/5.0/5.1 内容,标准采样率为 8-48 kHz。 | |||
| xHE-AAC | Android 9+ | 支持最多 8 声道的内容,标准采样率为 8-48 kHz | |||
| AAC ELD(增强型低延迟 AAC) | Android 4.1 及更高版本 | Android 4.1 及更高版本 | 支持单声道/立体声内容,标准采样率为 16-48 kHz | ||
| AMR-NB | 是 | 是 |
• 3GPP (.3gp) • AMR (.amr) |
• 3GPP (.3gp) • AMR (.amr) |
4.75-12.2 kbps,采样率为 8 kHz |
| AMR-WB | 是 | 是 | 有 9 个比特率(介于 6.60-23.85 kbit/s 之间)可供选择,采样率为 16 kHz | ||
| FLAC | Android 4.1 及更高版本 | Android 3.1 及更高版本 |
• FLAC (.flac) • MPEG-4 (.mp4、.m4a,Android 10 及更高版本) • Matroska (.mkv) |
单声道/立体声(非多声道)。采样率最高可达 48 kHz(但对于输出为 44.1 kHz 的设备,建议最高不超过 44.1 kHz,因为 48-44.1 kHz 的降采样器不包含低通滤波器)。建议使用 16 位;对于 24 位,不会应用任何抖动。 | |
| MIDI | 是 |
• 类型 0 和 1(.mid、.xmf、.mxmf) • RTTTL/RTX(.rtttl、.rtx) • OTA (.ota) • iMelody (.imy) |
MIDI 类型 0 和 1。DLS 版本 1 和 2。XMF 和 Mobile XMF。支持铃声格式 RTTTL/RTX、OTA 和 iMelody | ||
| MP3 | 是 |
• MP3 (.mp3) • MPEG-4 (.mp4、.m4a,Android 10 及更高版本) • Matroska (.mkv,Android 10 及更高版本) |
单声道/立体声 8-320 Kbps 恒定 (CBR) 或可变比特率 (VBR) | ||
| Opus | Android 10+ | Android 5.0 及更高版本 |
• Ogg (.ogg) • MPEG-4 (.mp4) • Matroska (.mkv) |
• Ogg (.ogg) • WebM (.webm) |
|
| PCM/WAVE | Android 4.1 及更高版本 | 是 | WAVE (.wav) | 8 位和 16 位线性 PCM(比特率最高可达到硬件上限)。以 8000、16000 和 44100 Hz 频率录制原始 PCM 所需的采样率。 | |
| Vorbis | 是 |
• Ogg (.ogg) • Matroska (.mkv,Android 4.0 及更高版本) • MPEG-4 (.mp4、.m4a,Android 10 及更高版本) |
• WebM (.webm) | ||
视频支持
视频格式
| 格式 | 编码器 | 解码器 | 文件类型容器格式 | 详细信息 | |
|---|---|---|---|---|---|
| 提取器 | 混合器 | ||||
| H.263 | 是 | 是 |
• 3GPP (.3gp) • MPEG-4 (.mp4) • Matroska (.mkv) |
• 3GPP (.3gp) • MPEG-4 (.mp4) |
对 H.263 的支持在 Android 7.0 及更高版本中并非必需 |
| H.264 AVC Baseline Profile (BP) |
Android 3.0 及以上版本 | 是 |
• 3GPP (.3gp) • MPEG-4 (.mp4) • MPEG-TS(.ts,仅限 AAC 音频,不可查找,Android 3.0+) • Matroska (.mkv) |
• 3GPP (.3gp) • MPEG-4 (.mp4) |
|
| H.264 AVC Main Profile (MP) |
Android 6.0 及更高版本 | 是 | 解码器为必需项,编码器为推荐项。 | ||
| H.265 HEVC | Android 5.0 及更高版本 |
• MPEG-4 (.mp4) • Matroska (.mkv) |
• MPEG-4 (.mp4) | 适用于移动设备的 Main Profile Level 3 和适用于 Android TV 的 Main Profile Level 4.1 | |
| MPEG-4 SP | 是 | • MPEG-4 (.mp4) | • MPEG-4 (.mp4) | ||
| VP8 | Android 4.3 及更高版本 | Android 2.3.3 及更高版本 |
• WebM (.webm) • Matroska(.mkv,Android 4.0 及更高版本) |
• WebM (.webm) | 只能在 Android 4.0 及更高版本中流式传输 |
| VP9 | Android 4.4 及更高版本 |
• WebM (.webm) • Matroska (.mkv) • MPEG-4 (.mp4) |
• WebM (.webm) | ||
| AV1 | Android 14+ | Android 10+ |
• MPEG-4 (.mp4) • Matroska (.mkv) |
• MPEG-4 (.mp4) | 从 Android 14 开始,编码器和解码器是强制性的。 |
| APV | Android 16+ | Android 16+ | • MPEG-4 (.mp4) | • MPEG-4 (.mp4) | 从 Android 16 开始,编码器和解码器是强制性的。 |
视频编码建议
下表列出了建议用于使用 H.264 Baseline Profile 编解码器播放的 Android 媒体框架视频编码配置和参数。这些建议同样适用于 Main Profile 编解码器,该编解码器仅在 Android 6.0 及更高版本中提供。
| 标清(低画质) | 标清(高画质) | 高清 720p(在所有设备上均不适用) | |
|---|---|---|---|
| 视频分辨率 | 176 x 144 像素 | 480 x 360 像素 | 1280 x 720 像素 |
| 视频帧速率 | 12 fps | 30 fps | 30 fps |
| 视频比特率 | 56 Kbps | 500 Kbps | 2 Mbps |
| 音频编解码器 | AAC-LC | AAC-LC | AAC-LC |
| 声道 | 1(单声道) | 2(立体声) | 2(立体声) |
| 音频比特率 | 24 Kbps | 128 Kbps | 192 Kbps |
下表列出了建议用于通过 VP8 媒体编解码器进行播放的 Android 媒体框架视频编码配置文件和参数。
| 标清(低画质) | 标清(高画质) | 高清 720p(在所有设备上均不适用) | 高清 1080p(在所有设备上均不适用) | |
|---|---|---|---|---|
| 视频分辨率 | 320 x 180 像素 | 640 x 360 像素 | 1280 x 720 像素 | 1920 x 1080 像素 |
| 视频帧速率 | 30 fps | 30 fps | 30 fps | 30 fps |
| 视频比特率 | 800 Kbps | 2 Mbps | 4 Mbps | 10 Mbps |
视频解码建议
对于所有 VP8、VP9、H.264 和 H.265 编解码器,设备实现都必须支持通过标准 Android API 在同一视频流内实时进行动态视频分辨率和帧速率切换,并且能够支持设备上每个编解码器所支持的最大分辨率。
支持杜比视界解码器的实现必须遵循以下准则:
- 提供具有杜比视界功能的提取器。
- 在设备屏幕或标准视频输出端口(例如 HDMI)上正确显示杜比视界内容。
- 将向后兼容的基本层(如果存在)的轨道索引设置为与组合式杜比视界层的轨道索引相同。
视频流式传输要求
对于通过 HTTP 或 RTSP 流式传输的视频内容,还有一些其他要求:
- 对于 3GPP 和 MPEG-4 容器,
moovatom 必须位于任何mdatatom 之前,但必须位于ftypatom 之后。 - 对于 3GPP、MPEG-4 和 WebM 容器,对应于同一时间偏移值的音频和视频样本之间的差值不得超过 500 KB。要最大限度地减少这种音频/视频偏差,请考虑以较小的区块大小交错插入音频和视频。
图片支持
| 格式 | 编码器 | 解码器 | 详细信息 | 文件类型 容器格式 |
|---|---|---|---|---|
| BMP | 是 | BMP (.bmp) | ||
| GIF | 是 | GIF (.gif) | ||
| JPEG | 是 | 是 | 基准式 + 渐进式 | JPEG (.jpg) |
| PNG | 是 | 是 | PNG (.png) | |
| WebP |
Android 4.0 及更高版本 无损:Android 10 及更高版本 透明度:Android 4.2.1 及更高版本 |
Android 4.0 及更高版本 无损:Android 4.2.1 及更高版本 透明度:Android 4.2.1 及更高版本 |
在 Android 10 上,可以使用 100 的质量实现无损编码。 | WebP (.webp) |
| HEIF |
Android 10 及更高版本 (通过 MediaCodec 或 HeifWriter;不在 Bitmap.compress 中)
|
Android 9.0 及更高版本 | 设备可选。如需了解 8 位支持情况,请查看 ImageDecoder.isMimeTypeSupported("image/heif")。10 位解码需要可选的 HEVC Main10 配置。 |
HEIF(.heic;.heif) |
| AVIF(基准配置文件) |
Android 14 及更高版本 (通过 MediaCodec;不在 Bitmap.compress 中)
|
Android 12+ | 从 Android 12 开始支持 8 位解码。10 位解码是可选的;请检查 ImageDecoder.isMimeTypeSupported("image/avif") 是否支持 10 位(即使为 false,8 位仍然有效)。 |
AVIF (.avif) |
网络协议
音频和视频播放支持以下网络协议:
- RTSP(RTP、SDP)
- HTTP/HTTPS 顺序流式传输
- HTTP/HTTPS 直播草案协议:
- 仅限 MPEG-2 TS 媒体文件
- 协议版本 3 Android 4.0 及更高版本
- 协议版本 2 Android 3.x
- 在 Android 3.0 之前的版本中不支持
注意:Android 3.1 之前的版本不支持 HTTPS。
HDR 视频格式
OEM 可以使用 Android HDR 架构启用他们选择的任何 HDR 格式,该架构可满足 HDR 格式的核心需求:10 位缓冲区、元数据(静态、动态和无)、传递函数和色彩空间处理。
为确保开发者体验的一致性并解决关键 HDR 使用情形,我们要求 OEM 在支持 HDR 的设备上支持以下几种基本格式:
- 对于专业内容播放(例如流式传输电影),我们要求使用 HDR10。
- 对于用户生成的内容捕获和播放,我们要求使用 HLG10,以便在所有 Android 设备上提供一致的体验。
添加 HDR 支持的 OEM 必须支持这些格式,但也可以支持其他格式,例如 HDR10+ 或杜比视界。
| 格式 | 传递函数 | 元数据 | 编解码器 | 位元深度 |
|---|---|---|---|---|
| HLG10 | HLG | 否 | HEVC | 10 位 |
| HDR10 | PQ | 静态 | HEVC | 10 位 |
| HDR10+ | PQ | 静态 | HEVC | 10 位 |
| 杜比视界 8.4 | HLG | 动态 | HEVC | 10 位 |
格式处理建议
| 拍摄格式 | 上传格式 | 交付格式 |
| HLG | 应用后端支持 HDR HLG | 支持 HDR (HLG) 的设备:
HLG 设备支持 HDR(仅支持 PQ,不支持 HLG): SDR(在后端将 HLG 色调映射到 SDR) 不支持 HDR 的设备:SDR(在后端将 HLG 色调映射到 SDR) |
使用情形 2:原生相机拍摄或从用户图库导入(应用后端支持 HDR)
| 拍摄格式 | 上传格式 | 交付格式 |
| HLG | HLG | 与应用内捕获用例相同 |
| HDR10+ | HLG
使用转换器 API 在上传之前将 HDR10+ (PQ) 映射到 HLG |
与应用内捕获用例相同 |
| DV8.4 | HLG
(DV8.4 使用 HLG,比特流将按 HLG 运行,因此无需色调映射) |
与应用内捕获用例相同 |
应用场景 3:应用后端不支持 HDR
| 拍摄格式 | 上传格式 | 交付格式 |
| 不限格式 | SDR
使用转换器 API 在上传之前将 HLG 色调映射到 SDR |
SDR |