渐进式

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 库提取器。

使用 MediaItem

如需播放渐进式视频流,请创建包含媒体 URI 的 MediaItem 并传递 提供给播放器

Kotlin

// 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()

Java

// 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

Kotlin

// 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()

Java

// 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 提供了多种方法,让您可以根据自己的需求量身打造播放体验。 应用需求。有关示例,请参阅“自定义”页面