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