支持的格式

在定义 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
ClearKey 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 还可以利用 软件解码器扩展。这些必须手动构建,并包含在 希望使用它们的项目目前,我们提供软件解码器, 多个版本的 AV1VP9FLACOpus、 和 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 动态照片 支持静态图片和视频
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 类型的硬件解码器功能。