本文档介绍了 Android 平台提供的媒体编解码器、容器和网络协议支持。
下表描述了 Android 平台内置的媒体格式支持。YES 表示该格式适用于运行所有 Android 版本的手持设备和平板电脑。在指定特定 Android 平台的情况下,该格式适用于运行该版本和所有更高版本的手机和平板电脑。该格式也可能适用于较早的版本,但这并非保证。在手持设备和平板电脑以外的其他外形尺寸上,媒体格式支持可能会有所不同。
请注意,特定移动设备可能支持这些表格中未列出的其他格式或文件类型。此外,如果您直接使用 MediaCodec,则无论支持的文件类型和容器格式如何,您都可以访问任何可用的媒体格式。
音频支持
格式 | 编码器 | 解码器 | 详细信息 | 文件类型 容器格式 |
---|---|---|---|---|
AAC LC | YES | YES | 支持单声道/立体声/5.0/5.1 内容,标准采样率为 8 到 48 kHz。 | • 3GPP (.3gp) • ADTS 原始 AAC(.aac,在 Android 3.1+ 中解码,在 Android 4.0+ 中编码,不支持 ADIF) • MPEG-TS(.ts,不可seek,Android 3.0+) |
HE-AACv1 (AAC+) | Android 4.1+ | YES | ||
HE-AACv2 (增强 AAC+) | YES | 支持从 8 到 48 kHz 的标准采样率的立体声/5.0/5.1 内容。 | ||
xHE-AAC | Android 9+ | 支持从 8 到 48 kHz 的标准采样率的最高 8 声道内容 | ||
AAC ELD(增强低延迟 AAC) | Android 4.1+ | Android 4.1+ | 支持从 16 到 48 kHz 的标准采样率的单声道/立体声内容 | |
AMR-NB | YES | YES | 以 8kHz 采样,速率从 4.75 到 12.2 kbps | • 3GPP (.3gp) • AMR (.amr) |
AMR-WB | YES | YES | 以 16kHz 采样,9 种速率,从 6.60 kbit/s 到 23.85 kbit/s | |
FLAC | Android 4.1+ | Android 3.1+ | 单声道/立体声(无多声道)。采样率最高可达 48kHz(但在具有 44.1kHz 输出的设备上建议最高为 44.1kHz,因为 48 到 44.1kHz 降采样器不包含低通滤波器)。建议使用 16 位;对于 24 位不应用抖动。 | • FLAC (.flac) • MPEG-4 (.mp4, .m4a, Android 10+) |
MIDI | YES | MIDI 类型 0 和 1。DLS 版本 1 和 2。XMF 和移动 XMF。支持铃声格式 RTTTL/RTX、OTA 和 iMelody | • 类型 0 和 1 (.mid, .xmf, .mxmf) • RTTTL/RTX (.rtttl, .rtx) • OTA (.ota) • iMelody (.imy) |
|
MP3 | YES | 单声道/立体声 8-320Kbps 常数比特率 (CBR) 或可变比特率 (VBR) | • MP3 (.mp3) • MPEG-4 (.mp4, .m4a, Android 10+) • Matroska (.mkv, Android 10+) |
|
Opus | Android 10+ | Android 5.0+ | • Ogg (.ogg) • Matroska (.mkv) |
|
PCM/WAVE | Android 4.1+ | YES | 8 位和 16 位线性 PCM(速率最高可达硬件限制)。原始 PCM 录音的采样率为 8000、16000 和 44100 Hz。 | WAVE (.wav) |
Vorbis | YES | • Ogg (.ogg) • Matroska (.mkv, Android 4.0+) • MPEG-4 (.mp4, .m4a, Android 10+) |
视频支持
视频格式
格式 | 编码器 | 解码器 | 详细信息 | 文件类型 容器格式 |
---|---|---|---|---|
H.263 | YES | YES | 在 Android 7.0+ 中对 H.263 的支持是可选的 | • 3GPP (.3gp) • MPEG-4 (.mp4) • Matroska (.mkv) |
H.264 AVC 基线配置文件 (BP) |
Android 3.0+ | YES | • 3GPP (.3gp) • MPEG-4 (.mp4) • MPEG-TS(.ts,仅 AAC 音频,不可seek,Android 3.0+) • Matroska (.mkv) |
|
H.264 AVC 主配置文件 (MP) |
Android 6.0+ | YES | 解码器是必需的,编码器是推荐的。 | |
H.265 HEVC | Android 5.0+ | 移动设备的主配置文件级别 3 和 Android TV 的主配置文件级别 4.1 | • MPEG-4 (.mp4) • Matroska (.mkv) |
|
MPEG-4 SP | YES | 3GPP (.3gp) | ||
VP8 | Android 4.3+ | Android 2.3.3+ | 仅在 Android 4.0 及更高版本中可流式传输 | • WebM (.webm) • Matroska (.mkv, Android 4.0+) |
VP9 | Android 4.4+ | • WebM (.webm) • Matroska (.mkv) |
||
AV1 | Android 14+ | Android 10+ | 从 Android 14 开始,编码器和解码器是强制性的。 | • MPEG-4 (.mp4) • Matroska (.mkv) |
视频编码建议
下表列出了用于使用 H.264 基线配置文件编解码器进行播放的 Android 媒体框架视频编码配置文件和参数建议。相同的建议适用于仅在 Android 6.0 及更高版本中可用的主配置文件编解码器。
SD(低质量) | SD(高质量) | HD 720p(所有设备上的 N/A) | |
---|---|---|---|
视频分辨率 | 176 x 144 像素 | 480 x 360 像素 | 1280 x 720 像素 |
视频帧速率 | 12 帧/秒 | 30 帧/秒 | 30 帧/秒 |
视频比特率 | 56 Kbps | 500 Kbps | 2 Mbps |
音频编解码器 | AAC-LC | AAC-LC | AAC-LC |
音频通道 | 1(单声道) | 2(立体声) | 2(立体声) |
音频比特率 | 24 Kbps | 128 Kbps | 192 Kbps |
下表列出了用于使用 VP8 媒体编解码器进行播放的 Android 媒体框架视频编码配置文件和参数建议。
SD(低质量) | SD(高质量) | HD 720p(所有设备上的 N/A) | HD 1080p(所有设备上的 N/A) | |
---|---|---|---|---|
视频分辨率 | 320 x 180 像素 | 640 x 360 像素 | 1280 x 720 像素 | 1920 x 1080 像素 |
视频帧速率 | 30 帧/秒 | 30 帧/秒 | 30 帧/秒 | 30 帧/秒 |
视频比特率 | 800 Kbps | 2 Mbps | 4 Mbps | 10 Mbps |
视频解码建议
设备实现必须通过标准 Android API 在同一流中支持动态视频分辨率和帧速率切换,以实现所有 VP8、VP9、H.264 和 H.265 编解码器实时和高达设备上每个编解码器支持的最大分辨率。
支持 Dolby Vision 解码器的实现必须遵循以下指南
- 提供支持 Dolby Vision 的提取器。
- 在设备屏幕或标准视频输出端口(例如 HDMI)上正确显示 Dolby Vision 内容。
- 将向后兼容基层(如果存在)的音轨索引设置为与组合的 Dolby Vision 层的音轨索引相同。
视频流需求
对于通过 HTTP 或 RTSP 流式传输的视频内容,还有一些其他要求
- 对于 3GPP 和 MPEG-4 容器,
moov
原子必须位于任何mdat
原子之前,但必须位于ftyp
原子之后。 - 对于 3GPP、MPEG-4 和 WebM 容器,对应于相同时间偏移的音频和视频样本之间的距离不超过 500 KB。为了最大限度地减少这种音频/视频漂移,请考虑以更小的块大小交错音频和视频。
图像支持
格式 | 编码器 | 解码器 | 详细信息 | 文件类型 容器格式 |
---|---|---|---|---|
BMP | YES | BMP (.bmp) | ||
GIF | YES | GIF (.gif) | ||
JPEG | YES | YES | 基础+渐进 | JPEG (.jpg) |
PNG | YES | YES | 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 8.0+ | HEIF (.heic; .heif) | ||
AVIF(基线配置文件) | Android 14+ | Android 14+ | 从 Android 14 开始,编码器和解码器是强制性的。 | 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+ 或 Dolby Vision。
格式 | 传输函数 | 元数据 | 编解码器 | 位深度 |
---|---|---|---|---|
HLG10 | HLG | 否 | HVEC | 10 位 |
HDR10 | PQ | 静态 | HVEC | 10 位 |
HDR10+ | PQ | 静态 | HVEC | 10 位 |
Dolby Vision 8.4 | HLG | 动态 | HVEC | 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 |