返回

Extractor:ExoPlayer 探索之旅

Android

在一个典型的播放场景中,一个普通的 URL 被传入播放器。播放器随后经历如下过程:

在上一篇文章中,我们探索了 ExoPlayer 如何请求 URL。在收到数据后,播放器必须对源数据进行解封装。解封装的第一步是确定视频的封装格式。提取视频封装格式的过程称为 Extractor。本文将深入探究 ExoPlayer 中的 Extractor。

Extractor 的作用

Extractor 的主要职责是识别和提取视频和音频数据的封装格式。它使 ExoPlayer 能够处理各种媒体文件,包括 MP4、FLV、MPEG-DASH 和 HLS。

Extractor 的工作原理

Extractor 通过分析输入数据流的比特模式来工作。它搜索特定模式,称为签名,以识别文件格式。例如,MP4 文件的签名是“ftyp”,而 FLV 文件的签名是“FLV”。

一旦 Extractor 识别出文件格式,它就会创建适当的解封装器。解封装器负责从流中提取实际的视频和音频数据。

ExoPlayer 中的 Extractor

ExoPlayer 捆绑了广泛的 Extractor,每个 Extractor 都针对特定文件格式。这些 Extractor 包括:

自定义 Extractor

在某些情况下,您可能需要自定义 Extractor。例如,您可能有自己的专有文件格式,需要在 ExoPlayer 中播放。要创建自定义 Extractor,您可以实现 Extractor 接口。

示例代码

以下示例代码演示了如何使用 ExoPlayer 的 FragmentedMp4Extractor:

DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(this, "ExoPlayer");
DataSpec dataSpec = new DataSpec(Uri.parse("https://example.com/video.mp4"));
Extractor extractor = new FragmentedMp4Extractor();
Input input = dataSourceFactory.createDataSource().open(dataSpec);
ExtractorInput extractorInput = new DataExtractorInput(input);
ExtractingLoadable loadable = new ExtractingLoadable(extractor, extractorInput);

结论

Extractor 是 ExoPlayer 的一个关键组件,它允许播放器处理各种媒体文件。它通过识别和提取视频和音频数据的封装格式来工作。如果您需要处理自己的专有文件格式,您还可以创建自定义 Extractor。