SampleSource

来源:互联网 发布:端口重定向工具 编辑:程序博客网 时间:2024/05/09 05:46

SampleSource 可能会导出一个或多个tacks。通过SampleSourceReader.getFormat(int) 可以查询每个track的媒体格式;通过SampleSoureReader.getTraceCount() 可以获得track 的数量。
它只有一个成员函数:

public SampleSourceReader register();
处理samples的对象应该调用这个函数,用这个函数返回SampleSourceReader 访问这个source。

SampleSource这个接口有一个子接口,是SampleSourceReader 。
这个接口的主要方法有:

public boolean prepare(long positionUs);
准备Source。这个准备操作可能会从数据源请求数据(比如确定可用的tracks 和 formats)。如果没有足够的数据可用,这个接口返回false,而不是阻塞。这个方法可以重复调用,直到返回成功。 参数表示播放器当前播放的位置。

public int getTrackCount();
返回这个source导出的tracks数。

public MediaFormat getFormat(int track);
返回指定track的媒体格式。

public void enable (int track, long positionUs)
Enable 指定的track。这行这一步操作后才能调用readData(int, long, MediaFormatHolder, SampleHolder) 方法读取track的格式个样本数据。这个方法只能在source准备完成, 并且指定的track已被禁用后调用

public boolean continueBuffering(int track, long positionUs);
这个方法告诉source,应该为指定的track继续缓存数据。

public int readData(int track, long positionUs, MediaFormatHolder formatHolder,
SampleHolder sampleHolder);
尝试从这个Source中读取一个样本数据或新的媒体格式。这个方法只能在指定的track的状态处于enabled状态时调用。注意,在多个tracks同时处于enabled状态下时,如果将要读取的下一片数据不属于这个方法的参数指定的track而是属于其他track那么这个方法将会返回NOTHING_READ

public void seekToUs(long positionUs);
跳转到指定的位置。至少有一个track可用时才能调用这个方法。

public long getBufferedPositionUs();
获取已缓冲时长。至少有一个track可用时才能调用这个方法。

public void disable(int track);
禁用指定的track

public void release();

0 0