这篇文章介绍了Android平台原生支持的媒体格式(Codec)、容器(container)、网络传输协议。
作为一个APP开发者,你可以在任何Android终端上免费使用这些媒体格式,它既包括Android平台本身就提供的,也包括某些终端专有的。尽管如此,我们还是推荐你尽量使用与终端设备无关的媒体格式。
支持的网络传输协议
下面这些网络传输协议可以用于在Android平台上播放音频和视频:
- RTSP (RTP, SDP)
- HTTP/HTTPS progressive streaming (渐进式下载)
- HTTP/HTTPS live streaming HLS 草案协议:
- 仅支持MPEG-2 TS 媒体格式(注意不要把它和MPEG-2编码格式搞混了)
- HLS 版本 3 协议 (Android 4.0 and above)
- HLS 版本 2 协议 (Android 3.x)
- Android 3.0以下不支持HLS
注意:Android 3.1之前的版本不支持HTTPS Live Streaming
媒体格式(Codec)
下面的表格介绍了Android平台原生支持的媒体格式。注意:任何一个终端都可以增加对在这些格式之外的媒体或文件格式的支持。
注意:并不是所有Android版本上都支持下表中的这些媒体格式(Media codec)。
Type | Format / Codec | 编码 | 解码 | 说明 | 支持的文件格式和容器格式 |
---|---|---|---|---|---|
Audio | AAC LC | • | • | 支持标准采样率8KHz到48KHz的mono/stereo/5.0/5.1 |
• 3GPP (.3gp) • ADTS raw AAC (.aac, Android 3.1+的解码, Android 4.0+的编码, 不支持ADIF) • MPEG-TS (.ts, 不支持索引,Android 3.0+) |
HE-AACv1 (AAC+) | • (Android 4.1+) |
• | |||
HE-AACv2 (enhanced AAC+) | • | 支持标准采样率8KHz到48KHz的 stereo/5.0/5.1 | |||
AAC ELD (enhanced low delay AAC) | • (Android 4.1+) |
• (Android 4.1+) |
支持标准采样率16KHz到48KHz的 mono/stereo | ||
AMR-NB | • | • | 4.75 到 12.2 kbps码率,8kHz采样率 | 3GPP (.3gp) | |
AMR-WB | • | • | 9 种码率,从6.60 kbit/s 到 23.85 kbit/s,16kHz采样率 | 3GPP (.3gp) | |
FLAC | • (Android 3.1+) |
Mono/Stereo (no multichannel). 高达48 kHz采样率 (推荐为 44.1kHz, as the 48 to 44.1 kHz downsampler does not include a low-pass filter). 推荐16位编码; no dither applied for 24-bit. | 仅支持 FLAC (.flac) | ||
MP3 | • | Mono/Stereo 8-320Kbps 固定码率(CBR)或动态码率(VBR) | MP3 (.mp3) | ||
MIDI | • | MIDI Type 0 and 1. DLS Version 1 and 2. XMF and Mobile XMF. Support for ringtone formats RTTTL/RTX, OTA, and iMelody |
• Type 0 and 1 (.mid, .xmf, .mxmf) • RTTTL/RTX (.rtttl, .rtx) • OTA (.ota) • iMelody (.imy) |
||
Vorbis | • |
• Ogg (.ogg) • Matroska (.mkv, Android 4.0+) |
|||
PCM/WAVE | • (Android 4.1+) |
• | 8- and 16-bit linear PCM (rates up to limit of hardware). Sampling rates for raw PCM recordings at 8000, 16000 and 44100 Hz. | WAVE (.wav) | |
Opus | • (Android 5.0+) |
Matroska (.mkv) | |||
Image | JPEG | • | • | Base+progressive | JPEG (.jpg) |
GIF | • | GIF (.gif) | |||
PNG | • | • | PNG (.png) | ||
BMP | • | BMP (.bmp) | |||
WebP |
• (Android 4.0+) (Lossless, Transparency, Android 4.2.1+) |
• (Android 4.0+) (Lossless, Transparency, Android 4.2.1+) |
WebP (.webp) | ||
Video | H.263 | • | • |
• 3GPP (.3gp) • MPEG-4 (.mp4) |
|
H.264 AVC | • (Android 3.0+) |
• | Baseline Profile (BP) |
• 3GPP (.3gp) • MPEG-4 (.mp4) • MPEG-TS (.ts, AAC audio only, not seekable, Android 3.0+) |
|
H.265 HEVC | • (Android 5.0+) |
Main Profile Level 3 for mobile devices and Main Profile Level 4.1 for Android TV | • MPEG-4 (.mp4) |
||
MPEG-4 SP | • | 3GPP (.3gp) | |||
VP8 | • (Android 4.3+) |
• (Android 2.3.3+) |
Streamable only in Android 4.0 and above |
• WebM (.webm) • Matroska (.mkv, Android 4.0+) |
|
VP9 | • (Android 4.4+) |
• WebM (.webm) • Matroska (.mkv, Android 4.0+) |
推荐的视频编码格式
表2列出了Android平台媒体框架支持的H.264 Baseline Profile 编码的推荐视频格式。
表3列出了Android平台媒体框架支持的VP8 编码的推荐视频格式。
In addition to these encoding parameter recommendations,
a device's available video recording profiles can be used as a proxy for media playback capabilities.
These profiles can be inspected using the CamcorderProfile
class, 它在从 API level 8以上支持。
SD (Low quality) | SD (High quality) | HD 720p (N/A on all devices) | |
---|---|---|---|
Video resolution | 176 x 144 px | 480 x 360 px | 1280 x 720 px |
Video frame rate | 12 fps | 30 fps | 30 fps |
Video bitrate | 56 Kbps | 500 Kbps | 2 Mbps |
Audio codec | AAC-LC | AAC-LC | AAC-LC |
Audio channels | 1 (mono) | 2 (stereo) | 2 (stereo) |
Audio bitrate | 24 Kbps | 128 Kbps | 192 Kbps |
SD (Low quality) | SD (High quality) | HD 720p (N/A on all devices) | HD 1080p (N/A on all devices) | |
---|---|---|---|---|
Video resolution | 320 x 180 px | 640 x 360 px | 1280 x 720 px | 1920 x 1080 px |
Video frame rate | 30 fps | 30 fps | 30 fps | 30 fps |
Video bitrate | 800 Kbps | 2 Mbps | 4 Mbps | 10 Mbps |
对于通过HTTP或RTSP传输的视频流内容,还要注意下面几个要求:
- 对于 3GPP 和 MPEG-4 containers,
moov
atom 必须在所有mdat
atoms之前,并且必须在ftyp
atom之后。 - 对于 3GPP, MPEG-4, 和 WebM containers, audio 和 video samples corresponding to the same time offset may be no more than 500 KB apart.To minimize this audio/video drift, consider interleaving audio and video in smaller chunk sizes.