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