Cargar un recurso multimedia mediante MediaPlayerItemLoader

Última actualización: 2023-09-19

El uso de MediaPlayerItemLoader le ayuda a obtener información sobre un flujo de medios sin crear una instancia de MediaPlayer. Esto resulta especialmente útil en flujos de almacenamiento en búfer previo para que la reproducción pueda comenzar sin demora.

El MediaPlayerItemLoader La clase le ayuda a intercambiar un recurso multimedia por el MediaPlayerItem sin adjuntar una vista a MediaPlayer , que asignaría recursos de hardware de descodificación de vídeo. Se necesitan pasos adicionales para el contenido protegido por DRM, pero este manual no los describe.

IMPORTANTE

TVSDK no admite un único QoSProvider para trabajar con ambos itemLoader y MediaPlayer. Si la aplicación utiliza Instant On, debe mantener dos QoS y administrar ambas instancias para la información. Consulte Instant-on para obtener más información.

  1. Cree una instancia de 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;
    }
    
    SUGERENCIA

    Cree una instancia independiente de MediaPlayerItemLoader para cada recurso. No use uno MediaPlayerItemLoader para cargar varios recursos.

  2. Implementación de ItemLoaderListener clase para recibir notificaciones de MediaPlayerItemLoader ejemplo.

    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;
    }
    

    En el onLoadComplete() callback, realice una de las siguientes acciones:

    • Asegúrese de que todo lo que pueda afectar al almacenamiento en búfer, por ejemplo, la selección de pistas de audio o WebVTT, esté completo e invoque prepareBuffer() para aprovechar las ventajas de la activación instantánea.
    • Adjunte el elemento al MediaPlayer mediante el uso de replaceCurrentItem().

    Si llama a prepareBuffer(), recibirá el evento BUFFER_PREPARED en su onBufferPrepared cuando finalice la preparación.

  3. Llamada load en el MediaPlayerItemLoader y pasan el recurso que se va a cargar, y opcionalmente el ID de contenido y un MediaPlayerItemConfig ejemplo.

    loader = createLoader();
    MediaResource res = new MediaResource(mVideoUrl, MediaResource.Type.HLS, metadata);
    loader.load(res, 233, getConfig());
    
  4. Para almacenar en búfer desde un punto que no sea el principio de la secuencia, llame a prepareBuffer() con la posición (en milisegundos) en la que se va a iniciar el almacenamiento en búfer.

  5. Utilice el replaceCurrentItem() y play() métodos de MediaPlayer para empezar a jugar desde ese punto.

  6. Esperar al estado inactivo e invocar replaceCurrentItem.

  7. Reproduzca el elemento.

    • Si el elemento se carga pero no se almacena en búfer:

      1. Esperar al estado inicializado.
      2. Llamada prepareToPlay().
      3. Espere al estado PREPARADO.
      4. Llamada play().
    • Si el elemento se almacena en búfer:

      1. Espere al evento preparado para el búfer.
      2. Llamada play().

En esta página