使用MediaPlayerItemLoader載入媒體資源

上次更新: 2023-09-21

使用MediaPlayerItemLoader可協助您取得媒體資料流的相關資訊,而不需將MediaPlayer例項具現化。 這在預先緩衝資料流中特別有用,以便可以開始播放而不發生延遲。

MediaPlayerItemLoader 類別可協助您交換目前的媒體資源 MediaPlayerItem 而不將檢視附加至 MediaPlayer 執行個體,負責配置視訊解碼硬體資源。 受DRM保護的內容需要額外的步驟,但本手冊並未說明這些步驟。

重要

TVSDK不支援單一 QoSProvider 以使用兩者 itemLoaderMediaPlayer. 如果您的應用程式使用「立即開啟」,應用程式需要維護兩個 QoS 執行個體和管理兩個執行個體以取得資訊。 另請參閱 即時開啟 以取得詳細資訊。

  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() callback,執行下列任一項作業:

    • 確認可能影響緩衝的任何專案(例如選取WebVTT或音軌)均已完成,並呼叫 prepareBuffer() 以利用立即啟用。
    • 將專案附加至 MediaPlayer 使用執行個體 replaceCurrentItem().

    如果您呼叫 prepareBuffer(),您會在中收到BUFFER_PREPARED事件 onBufferPrepared 準備完成時的處理常式。

  3. 呼叫 loadMediaPlayerItemLoader 例項並傳遞要載入的資源,以及選用的內容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().

此頁面上的