使用MediaPlayerItemLoader載入媒體資源

使用MediaPlayerItemLoader可協助您取得媒體串流的相關資訊,而不需執行個體化MediaPlayer例項。 這在預緩衝流中特別有用,以便可以無延遲地開始播放。

MediaPlayerItemLoader類別可協助您交換目前MediaPlayerItem的媒體資源,而不需將檢視附加到MediaPlayer例項,以分配視訊解碼硬體資源。 DRM保護內容需要其他步驟,但本手冊並未說明這些步驟。

重要

TVSDK不支援單一QoSProvider搭配itemLoaderMediaPlayer使用。 如果您的應用程式使用Instant On,則應用程式需要維護兩個QoS例項,並管理這兩個例項的資訊。 如需詳細資訊,請參閱Instant-on

  1. 建立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實例來載入多個資源。

  2. 實作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()回呼中,執行下列任一項作業:

    • 請確定任何可能影響緩衝的項目(例如,選取WebVTT或音軌)皆已完成,並呼叫prepareBuffer()以立即啟動。
    • 使用replaceCurrentItem()將項目附加到MediaPlayer實例。

    如果調用prepareBuffer(),則在準備完成時,將在onBufferPrepared處理程式中收到BUFFER_PREPARED事件。

  3. MediaPlayerItemLoader實例上調用load並傳遞要載入的資源,以及(可選)內容ID和MediaPlayerItemConfig實例。

    loader = createLoader();
    MediaResource res = new MediaResource(mVideoUrl, MediaResource.Type.HLS, metadata);
    loader.load(res, 233, getConfig());
    
  4. 要從流開頭以外的點進行緩衝,請調用prepareBuffer(),其位置(以毫秒為單位)為啟動緩衝。

  5. 使用replaceCurrentItem()play()方法,從此開始播放。MediaPlayer

  6. 等待空閒狀態並調用replaceCurrentItem

  7. 播放項目。

    • 如果項目已載入但未緩衝:

      1. 等待初始化狀態。
      2. 呼叫prepareToPlay()
      3. 等待PREPARED狀態。
      4. 呼叫play()
    • 如果項目是緩衝的:

      1. 等待緩衝區預準備事件。
      2. 呼叫play()

本頁內容