El uso de MediaPlayerItemLoader ayuda a obtener información sobre un flujo de medios sin crear una instancia de MediaPlayer. Esto resulta especialmente útil en los flujos de almacenamiento en búfer previo para que la reproducción pueda comenzar sin demora.
La clase MediaPlayerItemLoader
le ayuda a intercambiar un recurso de medios para el MediaPlayerItem
actual sin adjuntar una vista a una instancia MediaPlayer
, que asignaría recursos de hardware de descodificación de vídeo. Se necesitan pasos adicionales para el contenido protegido con DRM, pero este manual no los describe.
TVSDK no admite un solo QoSProvider
para que funcione con itemLoader
y MediaPlayer
. Si la aplicación utiliza Instant On, la aplicación debe mantener dos instancias QoS
y administrar ambas instancias para obtener la información. Consulte Instant-on para obtener más información.
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;
}
Cree una instancia separada de MediaPlayerItemLoader
para cada recurso. No utilice una instancia MediaPlayerItemLoader
para cargar varios recursos.
Implemente la clase ItemLoaderListener
para recibir notificaciones de la instancia 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;
}
En la llamada de retorno onLoadComplete()
, realice una de las siguientes acciones:
prepareBuffer()
para aprovechar el uso instantáneo.MediaPlayer
utilizando replaceCurrentItem()
.Si llama a prepareBuffer()
, recibirá el evento BUFFER_PREPARED en su controlador onBufferPrepared
cuando finalice la preparación.
Llame a load
en la instancia MediaPlayerItemLoader
y pase el recurso que se va a cargar, y opcionalmente el ID de contenido y una instancia MediaPlayerItemConfig
.
loader = createLoader();
MediaResource res = new MediaResource(mVideoUrl, MediaResource.Type.HLS, metadata);
loader.load(res, 233, getConfig());
Para almacenar en búfer desde un punto distinto al principio del flujo, llame a prepareBuffer()
con la posición (en milisegundos) en la que comenzará el almacenamiento en búfer.
Utilice los métodos replaceCurrentItem()
y play()
de MediaPlayer
para comenzar a reproducirse a partir de ese momento.
Espere a que aparezca el estado inactivo y llame a replaceCurrentItem
.
Reproduzca el elemento.
Si el elemento está cargado pero no almacenado en búfer:
prepareToPlay()
.play()
.Si el elemento está en búfer:
play()
.