Caricare una risorsa multimediale utilizzando MediaPlayerItemLoader

L'utilizzo di MediaPlayerItemLoader consente di ottenere informazioni su un flusso multimediale senza creare un'istanza MediaPlayer. Questa funzione è particolarmente utile nei flussi di pre-buffering, in modo che la riproduzione possa iniziare immediatamente.

La classe MediaPlayerItemLoader consente di scambiare una risorsa multimediale per la MediaPlayerItem corrente senza allegare una visualizzazione a un'istanza MediaPlayer, che allocerebbe le risorse hardware di decodifica video. Sono necessari ulteriori passaggi per i contenuti protetti da DRM, ma questo manuale non li descrive.

IMPORTANTE

TVSDK non supporta un singolo QoSProvider per funzionare sia con itemLoader che con MediaPlayer. Se l'applicazione utilizza Instant On, l'applicazione deve mantenere due istanze QoS e gestire entrambe le istanze per le informazioni. Per ulteriori informazioni, consulta Instant-on .

  1. Crea un'istanza di 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;
    }
    
    SUGGERIMENTO

    Crea un'istanza separata di MediaPlayerItemLoader per ogni risorsa. Non utilizzare un'istanza MediaPlayerItemLoader per caricare più risorse.

  2. Implementa la classe ItemLoaderListener per ricevere notifiche dall'istanza 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;
    }
    

    Nel callback onLoadComplete() , effettua una delle seguenti operazioni:

    • Assicurati che tutto ciò che potrebbe influenzare il buffering, ad esempio la selezione di tracce WebVTT o audio, sia completo e chiama prepareBuffer() per sfruttare l'accesso immediato.
    • Allega l’elemento all’istanza MediaPlayer utilizzando replaceCurrentItem().

    Se si chiama prepareBuffer(), al termine della preparazione si riceve l'evento BUFFER_PREPARED nel gestore onBufferPrepared.

  3. Chiama load sull'istanza MediaPlayerItemLoader e passa la risorsa da caricare, ed eventualmente l'ID del contenuto e un'istanza MediaPlayerItemConfig.

    loader = createLoader();
    MediaResource res = new MediaResource(mVideoUrl, MediaResource.Type.HLS, metadata);
    loader.load(res, 233, getConfig());
    
  4. Per eseguire il buffer da un punto diverso dall'inizio del flusso, chiamare prepareBuffer() con la posizione (in millisecondi) in cui avviare il buffering.

  5. Utilizza i metodi replaceCurrentItem() e play() di MediaPlayer per iniziare a riprodurre da quel momento.

  6. Attendi lo stato di inattività e chiama replaceCurrentItem.

  7. Riproduci l'elemento.

    • Se l’elemento viene caricato ma non inserito nel buffer:

      1. Attendi lo stato inizializzato.
      2. Chiama prepareToPlay().
      3. Attendere lo stato PREPARATO.
      4. Chiama play().
    • Se l’elemento è bufferizzato:

      1. Attendi l'evento preparato del buffer.
      2. Chiama play().

In questa pagina