使用MediaPlayerItemLoader可協助您取得媒體串流的相關資訊,而不需執行個體化MediaPlayer例項。 這在預緩衝流中特別有用,以便可以無延遲地開始播放。
MediaPlayerItemLoader
類別可協助您交換目前MediaPlayerItem
的媒體資源,而不需將檢視附加到MediaPlayer
例項,以分配視訊解碼硬體資源。 DRM保護內容需要其他步驟,但本手冊並未說明這些步驟。
TVSDK不支援單一QoSProvider
搭配itemLoader
和MediaPlayer
使用。 如果您的應用程式使用Instant On,則應用程式需要維護兩個QoS
例項,並管理這兩個例項的資訊。 如需詳細資訊,請參閱Instant-on。
建立MediaPlayerItemLoader
實例。
private MediaPlayerItemLoader createLoader() {
MediaPlayerItemLoader itemLoader =
new MediaPlayerItemLoader(this, new MediaPlayerItemLoader.LoaderListener() {
public void onError(PSDKErrorCode mediaErrorCode, String description) {
//Do something
}
public void onLoadComplete(MediaPlayerItem playerItem) {
loader.prepareBuffer();
}
public void onBufferingBegin() {
//Do something
}
public void onBufferPrepared() {
mPlayer.reset();
}
});
itemLoader.setKeepRebufferingForLive(true);
return itemLoader;
}
為每個資源建立一個單獨的MediaPlayerItemLoader
實例。 請勿使用一個MediaPlayerItemLoader
實例來載入多個資源。
實作ItemLoaderListener
類別,以接收來自MediaPlayerItemLoader
例項的通知。
private MediaPlayerItemLoader createLoader() {
MediaPlayerItemLoader itemLoader =
new MediaPlayerItemLoader(this, new MediaPlayerItemLoader.LoaderListener() {
public void onError(PSDKErrorCode mediaErrorCode, String description) {
//Do something
}
public void onLoadComplete(MediaPlayerItem playerItem) {
loader.prepareBuffer();
}
public void onBufferingBegin() {
//Do something
}
public void onBufferPrepared() {
mPlayer.reset();
}
} );
itemLoader.setKeepRebufferingForLive(true);
return itemLoader;
}
在onLoadComplete()
回呼中,執行下列任一項作業:
prepareBuffer()
以立即啟動。replaceCurrentItem()
將項目附加到MediaPlayer
實例。如果調用prepareBuffer()
,則在準備完成時,將在onBufferPrepared
處理程式中收到BUFFER_PREPARED事件。
在MediaPlayerItemLoader
實例上調用load
並傳遞要載入的資源,以及(可選)內容ID和MediaPlayerItemConfig
實例。
loader = createLoader();
MediaResource res = new MediaResource(mVideoUrl, MediaResource.Type.HLS, metadata);
loader.load(res, 233, getConfig());
要從流開頭以外的點進行緩衝,請調用prepareBuffer()
,其位置(以毫秒為單位)為啟動緩衝。
使用replaceCurrentItem()
和play()
方法,從此開始播放。MediaPlayer
等待空閒狀態並調用replaceCurrentItem
。
播放項目。
如果項目已載入但未緩衝:
prepareToPlay()
。play()
。如果項目是緩衝的:
play()
。