多协议、性能稳定、丰富API的流媒体服务器软件
Android原生播放器支持的媒体格式和协议

这篇文章介绍了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)。


表1. 媒体格式支持。

Type Format / Codec 编码 解码 说明 支持的文件格式和容器格式
Audio AAC LC 支持标准采样率8KHz到48KHz的mono/stereo/5.0/5.1 • 3GPP (.3gp)
• MPEG-4 (.mp4, .m4a)
• 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以上支持。


表 2.采用H.264 Baseline Profile编码的视频格式例子。

  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

表3.VP8编码的视频格式例子

  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.