Este ejemplo muestra la forma recomendada de incluir especificaciones de TimeRange en la cronología de reproducción.
TimeRange
(es decir, instancias de la clase TimeRange
).TimeRange
para rellenar una instancia de la clase TimeRangeCollection
.TimeRangeCollection
, al método replaceCurrentItem
(parte de la interfaz de MediaPlayer).PREPARED
esperando a que se active la llamada de retorno PlaybackEventListener#onPrepared
.play()
(parte de la interfaz MediaPlayer
).TimeRange
se superponen en la cronología de reproducción. Por ejemplo, el valor de la posición inicial correspondiente a una especificación TimeRange
puede ser inferior al valor de la posición final que ya se colocó. En este caso, TVSDK ajusta silenciosamente la posición inicial de la especificación TimeRange
infractora para evitar conflictos de tiempo. Mediante este ajuste, el nuevo TimeRange
se hace más corto de lo especificado originalmente. Si el ajuste es tan extremo que llevaría a un TimeRange
con una duración de cero ms, TVSDK descarta silenciosamente la especificación TimeRange
ofensiva.TimeRange
especificaciones para las pausas publicitarias personalizadas, TVSDK intenta traducirlas en publicidades que se agrupan dentro de las pausas publicitarias. TVSDK busca especificaciones TimeRange
adyacentes y las agrupa en pausas publicitarias independientes. Si hay intervalos de tiempo que no son adyacentes a ningún otro intervalo de tiempo, se traducen en pausas publicitarias que contienen un solo anuncio.TimeRange
especificaciones que solo se pueden usar en el contexto de la función de marcadores de anuncios personalizados. Si el recurso subyacente no es del tipo VOD, la biblioteca TVSDK genera una excepción.El siguiente fragmento de código proporciona un ejemplo sencillo en el que se coloca un conjunto de tres especificaciones de intervalo de tiempo en la cronología como marcadores de anuncio personalizados.
// Assume that the 3 timerange specs are obtained through external means: CMS, etc.
// Use these 3 timerange specs to populate the TimeRangeCollection instance
TimeRangeCollection timeRanges = new TimeRangeCollection();
timeRanges.addTimeRange(new TimeRange(0,10000));
timeRanges.addTimeRange(new TimeRange(15000,20000));
timeRanges.addTimeRange(new TimeRange(25000,30000));
// create and configure a MediaResource instance
MediaResource mediaResource =
MediaResource.createFromUrl("www.example.com/video/test_video.m3u8",
timeRanges.toMetadata(null));
// prepare the content for playback by creating
// NOTE: mediaPlayer is an instance of a properly configured MediaPlayer
mediaPlayer.replaceCurrentItem(mediaResource);
// wait for TVSDK to reach the PREPARED state
...
MediaPlayer.PlaybackEventListener playbackEventListener = new
MediaPlayer.PlaybackEventListener() {
@Override
public void onPrepared() {
// TVSDK in in the PREPARED state. We are allowed to start the playback
mediaPlayer.play();
}
}