ExoPlayer之Extractor

本文详细介绍了ExoPlayer中的Extractor在媒体解封装过程中的作用,包括其接口说明、调用流程,以及内置和拓展的Extractors。通过实例展示了如何为ExoPlayer添加对rmvb格式的支持。
摘要由CSDN通过智能技术生成

Extractor的作用

代码中关于Extractor的注释说明 - Extracts media data from a container format.
Extractor对应于媒体文件解封装的处理:
解封装的 作用,就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如 MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数 据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。

接口说明

com.google.android.exoplayer2.extractor.Extractor:

public interface Extractor {
   
...
  boolean sniff(ExtractorInput input) throws IOException, InterruptedException;

  void init(ExtractorOutput output);

  @ReadResult
  int read(ExtractorInput input, PositionHolder seekPosition)
      throws IOException, InterruptedException;

  void seek(long position, long timeUs);

  void release();
}

1 boolean sniff(ExtractorInput input)
通过对输入媒体数据流头信息的判断,决策当前Extractor是否能够处理输入的媒体数据。

2 void init(ExtractorOutput output)
初始化,接收输出类,只执行一次。

3 int read(ExtractorInput input, PositionHolder seekPosition)
解析封装格式数据,在seek位置读取数据输出到ExtractorOutput。

4 void seek(long position, long timeUs)
跳转。

Extractor的调用

DefaultExtractorsFactory。
由ProgressiveMediaSource使用。

内置的Extractors

@Override
  public synchronized Extractor[] createExtractors() {
   
    Extractor[] extractors = new Extractor[14];
    extractors[0] = new MatroskaExtractor(matroskaFlags);
    extractors[1] = new FragmentedMp4Extractor(fragmentedMp4Flags);
    extractors[2] = new Mp4Extractor(mp4Flags);
    extractors[3] =
        new Mp3Extractor(
            mp3Flags
                | (constantBitrateSeekingEnabled
                    ? Mp3Extractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
                    : 0));
    extractors
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值