ExoPlayer 可以直接播放以下容器格式的串流。还必须支持其中包含的音频和视频选段格式(如需了解详情,请参阅选段格式部分)。如需了解图片容器和格式支持,请参阅图片。
容器格式 | 支持 | 评论 |
---|---|---|
MP4 | 是 | |
M4A | 是 | |
FMP4 | 是 | |
WebM | 是 | |
马特罗斯卡 | 是 | |
MP3 | 是 | 部分串流只能使用恒定比特率跳转功能进行跳转** |
奥格 | 是 | 包含 Vorbis、Opus 和 FLAC |
WAV | 是 | |
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 解码器(例如,用于处理 FLAC 的 MediaCodec
解码器 [从 API 级别 27 开始必需],或启用了 FLAC 的 FFmpeg 库)。如果应用是使用 FLAC 库构建的,DefaultExtractorsFactory
会使用扩展程序提取器。否则,它会使用 ExoPlayer 库提取器。
使用 MediaItem
如需播放渐进式串流,请使用媒体 URI 创建 MediaItem
并将其传递给播放器。
// Create a player instance.
val player = ExoPlayer.Builder(context).build()
// Set the media item to be played.
player.setMediaItem(MediaItem.fromUri(progressiveUri))
// Prepare the player.
player.prepare()
// Create a player instance.
ExoPlayer player = new ExoPlayer.Builder(context).build();
// Set the media item to be played.
player.setMediaItem(MediaItem.fromUri(progressiveUri));
// Prepare the player.
player.prepare();
使用 ProgressiveMediaSource
如需更多自定义选项,您可以创建 ProgressiveMediaSource
并将其直接传递给播放器,而不是 MediaItem
。
// Create a data source factory.
val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory()
// Create a progressive media source pointing to a stream uri.
val mediaSource: MediaSource =
ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(MediaItem.fromUri(progressiveUri))
// Create a player instance.
val player = ExoPlayer.Builder(context).build()
// Set the media source to be played.
player.setMediaSource(mediaSource)
// Prepare the player.
player.prepare()
// Create a data source factory.
DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory();
// Create a progressive media source pointing to a stream uri.
MediaSource mediaSource =
new ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(MediaItem.fromUri(progressiveUri));
// Create a player instance.
ExoPlayer player = new ExoPlayer.Builder(context).build();
// Set the media source to be played.
player.setMediaSource(mediaSource);
// Prepare the player.
player.prepare();
自定义播放
ExoPlayer 提供了多种方法,让您可以根据自己的需求量身打造播放体验。 应用需求。有关示例,请参阅“自定义”页面。