在定义 ExoPlayer 支持的格式时,请务必注意 “媒体格式”定义在多个级别从最低级别到 分别为:
- 单个媒体样本的格式(例如视频帧或帧 音频)。以下是示例格式。请注意,典型的视频文件 包含至少两种示例格式的媒体内容;一个用于视频(例如,H.264), 一个表示音频(例如 AAC)。
- 用于存放媒体样本和关联的容器的格式 元数据。这些是容器格式。一个媒体文件包含一个容器 格式(例如 MP4),通常以文件扩展名表示。注意事项 对于某些纯音频格式(例如 MP3),样本和容器格式 可能相同。
- 自适应流式传输技术,例如 DASH、SmoothStreaming 和 HLS。这些 并不是这样的媒体格式,但仍然有必要定义 ExoPlayer 提供的支持级别。
以下部分定义了每个级别的 ExoPlayer 支持,从最高到 最低。最后两部分介绍对独立字幕格式的支持情况 和 HDR 视频播放。
自适应流式传输
DASH
ExoPlayer 支持具有多种容器格式的 DASH。媒体流
多路分配,也就是说,视频、音频和文本必须使用不同的
AdaptationSet
元素(CEA-608 是一个例外情况,因为
如下表所述)。所包含的音频和视频样本格式必须
(请参阅
示例格式部分了解详情)。
功能 | 支持 | 评论 |
---|---|---|
容器 | ||
FMP4 | 是 | 仅限多路分配器 |
WebM | 是 | 仅限多路分配器 |
马特罗斯卡 | 是 | 仅限多路分配器 |
MPEG-TS | 否 | 未安排支持服务 |
字幕 | ||
TTML | 是 | 原始格式或嵌入 FMP4(根据 ISO/IEC 14496-30 标准) |
WebVTT | 是 | 原始格式或嵌入 FMP4(根据 ISO/IEC 14496-30 标准) |
中欧航空 (CEA-608) | 是 | 在使用 SCTE 无障碍描述符发出信号时嵌入到 FMP4 中 |
CEA-708 | 是 | 在使用 SCTE 无障碍描述符发出信号时嵌入到 FMP4 中 |
元数据 | ||
EMSG 元数据 | 是 | 已嵌入到 FMP4 中 |
内容保护 | ||
Widevine | 是 | “cenc”架构:API 19+;“cbcs”架构:API 25+ |
PlayReady SL2000 | 是 | Android TV,“cenc”仅 scheme |
清除密钥 | 是 | API 21+,"cenc"仅 scheme |
直播 | ||
常规直播 | 是 | |
超低延迟 CMAF 直播 | 是 | |
通用媒体客户端数据 (CMCD) | 是 | 集成指南 |
SmoothStreaming
ExoPlayer 支持采用 FMP4 容器格式的 SmoothStreaming。媒体流 必须进行多路分配,也就是说,视频、音频和文本必须使用 StreamIndex 元素。其中包含的音频和 视频样本格式也受支持(请参阅 示例格式部分了解详情)。
功能 | 支持 | 评论 |
---|---|---|
容器 | ||
FMP4 | 是 | 仅限多路分配器 |
字幕 | ||
TTML | 是 | 已嵌入到 FMP4 中 |
内容保护 | ||
PlayReady SL2000 | 是 | 仅分发至 Android TV |
直播 | ||
常规直播 | 是 | |
通用媒体客户端数据 (CMCD) | 是 | 集成指南 |
HLS
ExoPlayer 支持具有多种容器格式的 HLS。其中包含的音频和 视频样本格式也受支持(请参阅 示例格式部分了解详情)。周三 强烈建议 HLS 内容制作者生成高质量的 HLS 视频流; 如描述 此处。
功能 | 支持 | 评论 |
---|---|---|
容器 | ||
MPEG-TS | 是 | |
FMP4/CMAF | 是 | |
ADTS (AAC) | 是 | |
MP3 | 是 | |
字幕 | ||
中欧航空 (CEA-608) | 是 | |
CEA-708 | 是 | |
WebVTT | 是 | |
元数据 | ||
ID3 | 是 | |
SCTE-35 | 否 | |
内容保护 | ||
AES-128 | 是 | |
AES-128 示例 | 否 | |
Widevine | 是 | API 19+(“cenc”架构)和 25+(“cbcs”架构) |
PlayReady SL2000 | 是 | 仅分发至 Android TV |
服务器控制 | ||
Delta 更新 | 是 | |
重新加载禁播播放列表 | 是 | |
阻止加载预加载提示 | 是 | 长度未定义的字节范围除外 |
直播 | ||
常规直播 | 是 | |
低延迟 HLS (Apple) | 是 | |
低延迟 HLS(社区) | 否 | |
通用媒体客户端数据 (CMCD) | 是 | 集成指南 |
渐进式容器格式
ExoPlayer 可以直接播放采用以下容器格式的视频流。 所包含的音频和视频样本格式也必须受支持(请参阅 示例格式部分)。 如需映像容器和格式支持,请参阅 图片。
容器格式 | 支持 | 评论 |
---|---|---|
MP4 | 是 | |
M4A | 是 | |
FMP4 | 是 | |
WebM | 是 | |
马特罗斯卡 | 是 | |
MP3 | 是 | 有些视频流只能使用恒定比特率搜寻功能** |
奥格 | 是 | 包含 Vorbis、Opus 和 FLAC |
轮流 | 是 | |
MPEG-TS | 是 | |
MPEG-PS | 是 | |
FLV | 是 | 不可查找* |
ADTS (AAC) | 是 | 仅在使用恒定比特率寻道时可寻道** |
FLAC | 是 | 使用 FLAC 库或 ExoPlayer 库中的 FLAC 提取器*** |
AMR | 是 | 仅在使用恒定比特率寻道时可寻道** |
* 系统不支持跳转操作,因为容器不提供元数据(例如, 示例索引),让媒体播放器能够高效地执行跳转操作。 如果需要跳转,我们建议您使用更合适的容器格式。
** 这些提取器带有 FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
标记,
使用恒定比特率假设实现近似寻道。本次
功能默认处于停用状态。要启用此功能,
所有支持它的提取器的功能都是使用
DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
(如描述所示)
此处。
*** FLAC 库提取器会输出可处理的原始音频
所有 API 级别。ExoPlayer 库 FLAC 提取器输出
FLAC 音频帧等需要使用 FLAC 解码器(例如,MediaCodec
处理 FLAC 的解码器(API 级别 27 中要求使用),或
启用了 FLAC 的 FFmpeg 库)。DefaultExtractorsFactory
使用
扩展提取器(如果应用是使用 FLAC 库构建的)。
否则,它会使用 ExoPlayer 库提取器。
RTSP
ExoPlayer 同时支持直播和点播 RTSP。支持的示例格式和 网络类型如下所列。
支持的样本格式
- H264(SDP 媒体说明必须在 <p> 属性)。
- AAC(使用 ADTS 比特流)。
- AC3.
支持的网络类型
- UDP 单播的 RTP(不支持多播)。
- 使用 TCP 通过 RTSP 执行交错的 RTSP 和 RTP。
示例格式
默认情况下,ExoPlayer 使用 Android 的平台解码器。因此, 示例格式取决于底层平台,而不是 ExoPlayer。 请参阅支持的媒体格式,了解 关于 Android 设备支持的示例格式的文档。请注意, 除了列出的格式之外,单个设备可能还支持其他格式。
除了 Android 平台解码器之外,ExoPlayer 还可以利用 软件解码器扩展。这些必须手动构建,并包含在 希望使用它们的项目目前,我们提供软件解码器, 多个版本的 AV1、 VP9、 FLAC、 Opus、 和 FFmpeg。
FFmpeg 库
FFmpeg 库支持 解码各种不同的音频样本格式。您可以选择 要包含的解码器,如 库的 README.md。通过 下表提供了从音频样本格式到相应 FFmpeg 解码器名称。
示例格式 | 解码器名称 |
---|---|
Vorbis | Vorbis |
Opus | Opus |
FLAC | Flac |
阿拉伯语广告系列 (ALAC) | 阿拉克 |
PCM μ 律 | pcm_mulaw |
PCM A 律 | pcm_alaw |
MP1、MP2、MP3 | MP3 |
AMR-NB | Arnb |
AMR-WB | AMRWB |
AAC | AAC |
AC-3 | AC3 |
E-AC-3 | eac3 |
DTS、DTS-HD | DCA |
TrueHD | MLP truehd |
图片
ExoPlayer 支持以下图片格式。请参阅 图片加载库 如何集成外部库,这些库可能为 不同的格式
映像格式 | 支持 | 备注 |
---|---|---|
BMP | 是 | |
GIF | 否 | 不支持提取器 |
JPEG | 是 | |
JPEG 动态照片 | 是 | 支持静态图片和视频 |
JPEG Ultra HDR | 是 | 在 Android 14 或以下版本之前回退到 SDR 非 HDR 显示屏 |
PNG | 是 | |
WebP | 是 | |
HEIF/HEIC | 是 | |
HEIC 动态照片 | 部分解决/回答 | 仅支持静态图片* |
AVIF(基准) | 是 | 仅在 Android 14 及更高版本中解码 |
* HEIC 动态照片的视频部分可通过 MetadataRetriever 并作为独立文件播放
独立的字幕格式
ExoPlayer 支持各种格式的独立字幕文件。副标题 您可以旁加载文件(如媒体内容页面中所述)。
容器格式 | 支持 | MIME 类型 |
---|---|---|
WebVTT | 是 | MIME 类型.TEXT_VTT |
TTML / SMPTE-TT | 是 | MIME 类型.APPLICATION_TTML |
SubRip | 是 | MIME 类型.APPLICATION_SUBRIP |
SubStationAlpha 版 (SSA/ASS) | 是 | MIME 类型.TEXT_SSA |
HDR 视频播放
ExoPlayer 负责提取各种格式的高动态范围 (HDR) 视频, 包括 MP4 中的杜比视界,以及 Matroska/WebM 中的 HDR10+。解码 和显示 HDR 内容取决于 Android 平台的支持和 设备。请参阅 HDR 视频播放 了解如何检查 HDR 解码/显示功能和限制 所有 Android 版本均支持 HDR。
在播放需要支持特定编解码器配置文件的 HDR 流时,
ExoPlayer 的默认 MediaCodec
选择器将选择支持:
配置文件(如果有),即使 MIME 类型的
不支持在编解码器列表上方显示的配置文件。这可能会导致
在视频流超过
相同 MIME 类型的硬件解码器功能。