使用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()

本頁內容