Los controladores de eventos permiten responder a los eventos de TVSDK.
Cuando se produce un evento, el mecanismo de eventos de TVSDK llama al controlador de eventos registrado y le pasa la información del evento.
TVSDK define los oyentes como interfaces internas públicas dentro de la interfaz MediaPlayer
.
La aplicación debe implementar detectores de eventos para cualquier evento TVSDK que afecte a la aplicación.
Determine qué eventos debe escuchar la aplicación.
Eventos necesarios: Escuche todos los eventos de reproducción.
Escuche el evento de cambio de estado, que se produce cuando el estado del reproductor cambia de formas que necesite saber. La información que proporciona incluye errores que podrían afectar a lo que el reproductor puede hacer a continuación.
Para otros eventos, según la aplicación, consulte Resumen de eventos del reproductor Primetime.
Implemente y agregue un detector de eventos para cada evento.
Para la mayoría de los eventos, TVSDK pasa argumentos a los oyentes de eventos. Estos valores proporcionan información sobre el evento que puede ayudarle a decidir qué hacer a continuación. La enumeración MediaPlayerEvent
enumera todos los eventos que MediaPlayer
envía. Para obtener más información, consulte Resumen de eventos del reproductor Primetime.
Por ejemplo, si mPlayer
es una instancia de MediaPlayer
, así es como puede agregar y estructurar un detector de eventos:
mPlayer.addEventListener(MediaPlayerEvent.STATUS_CHANGED, new StatusChangeEventListener() {
@Override
public void onStatusChanged(MediaPlayerStatusChangeEvent event) {
event.getMetadata();
if (event.getMetadata() != null) {/* Do something */}
if (event.getStatus() == MediaPlayerStatus.IDLE) {/* Do something */}
else if (event.getStatus() == MediaPlayerStatus.INITIALIZED) {/* Do something */}
else if (event.getStatus() == MediaPlayerStatus.PREPARED) {/* Do something */}
}
});
TVSDK envía eventos/notificaciones en secuencias esperadas generalmente. El reproductor puede implementar acciones basadas en eventos en la secuencia esperada.
Los siguientes ejemplos muestran el orden de algunos eventos que se producen durante la reproducción.
Cuando se carga correctamente un recurso de medios a través de MediaPlayer.replaceCurrentResource
, el orden de los eventos es:
MediaPlayerEvent.STATUS_CHANGED
con estado MediaPlayerStatus.INITIALIZING
MediaPlayerEvent.STATUS_CHANGED
con estado MediaPlayerStatus.INITIALIZED
Cargue el recurso de medios en el subproceso principal. Si carga un recurso de medios en un subproceso en segundo plano, esta operación u operaciones posteriores podrían generar un error, como MediaPlayerException
, y salir.
Al prepararse para la reproducción mediante MediaPlayer.prepareToPlay
, el orden de los eventos es:
MediaPlayerEvent.STATUS_CHANGED
con estado MediaPlayerStatus.PREPARING
MediaPlayerEvent.TIMELINE_UPDATED
si se insertaron anuncios.
MediaPlayerEvent.STATUS_CHANGED
con estado MediaPlayerStatus.PREPARED
Para emisiones en directo/lineales, durante la reproducción a medida que avanza la ventana de reproducción y se resuelven las oportunidades adicionales, el orden de los eventos es:
MediaPlayerEvent.ITEM_UPDATED
MediaPlayerEvent.TIMELINE_UPDATED
si se insertaron anunciosCuando la reproducción incluye publicidad, TVSDK envía eventos/notificaciones en secuencias generalmente esperadas. El reproductor puede implementar acciones basadas en eventos dentro de la secuencia esperada.
Al reproducir anuncios, el orden de los eventos es:
MediaPlayerEvent.AD_RESOLUTION_COMPLETE
Los siguientes eventos se envían para cada anuncio dentro de la pausa publicitaria:
MediaPlayerEvent.AD_BREAK_START
MediaPlayerEvent.AD_START
MediaPlayerEvent.AD_PROGRESS (multiple times)
MediaPlayerEvent.AD_CLICK (for each click)
MediaPlayerEvent.AD_COMPLETE
MediaPlayerEvent.AD_BREAK_COMPLETE
El siguiente ejemplo muestra una progresión típica de los eventos de reproducción de publicidad:
mediaPlayer.addEventListener(MediaPlayerEvent.AD_RESOLUTION_COMPLETE, new AdResolutionCompleteEventListener() {
@Override
public void onAdResolutionComplete() { ... }
});
mediaPlayer.addEventListener(MediaPlayerEvent.AD_BREAK_START, new AdBreakStartedEventListener() {
@Override
public void onAdBreakStarted(AdBreakPlaybackEvent adBreakPlaybackEvent) { ... }
});
mediaPlayer.addEventListener(MediaPlayerEvent.AD_START, new AdStartedEventListener() {
@Override
public void onAdStarted(AdPlaybackEvent adPlaybackEvent) { ... }
});
mediaPlayer.addEventListener(MediaPlayerEvent.AD_PROGRESS, new AdProgressEventListener() {
@Override
public void onAdProgress(AdPlaybackEvent adPlaybackEvent) { ... }
});
mediaPlayer.addEventListener(MediaPlayerEvent.AD_COMPLETE, new AdCompletedEventListener() {
@Override
public void onAdCompleted(AdPlaybackEvent adPlaybackEvent) { ... }
});
mediaPlayer.addEventListener(MediaPlayerEvent.AD_BREAK_COMPLETE, new AdBreakCompletedEventListener() {
@Override
public void onAdBreakCompleted(AdBreakPlaybackEvent adBreakPlaybackEvent) { ... }
});
Below event is for tracking ad clicks.
mediaPlayer.addEventListener(MediaPlayerEvent.AD_CLICK, new AdClickedEventListener() {
@Override
public void onAdClicked(AdClickEvent adClickEvent) { ... }
});
TVSDK distribuye eventos de administración de derechos digitales (DRM) como respuesta a operaciones relacionadas con DRM, como cuando nuevos metadatos DRM están disponibles. El reproductor puede implementar acciones en respuesta a estos eventos.
Para recibir notificaciones sobre todos los eventos relacionados con DRM, escuche MediaPlayerEvent.DRM_METADATA
. TVSDK distribuye eventos DRM adicionales a través de la clase DRMManager
.
TVSDK envía MediaPlayerEvent.LOAD_INFORMATION_AVAILABLE
cuando se producen eventos de cargador.