天天看點

SampleSource

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

繼續閱讀