Questo esempio mostra il modo consigliato di includere indicatori di annunci personalizzati nella timeline di riproduzione.
RepaceTimeRange
classe.CustomRangeMetadata
e utilizzare il relativo metodo setTimeRangeList
con l'elenco/array come argomento per impostare l'elenco di intervalli di tempo.setType
per impostare il tipo su MARK_RANGE
.MediaPlayerItemConfig.setCustomRangeMetadata
con l'istanza CustomRangeMetadata
come argomento per impostare i metadati dell'intervallo personalizzati.MediaPlayer.replaceCurrentResource
con l’istanza MediaPlayerItemConfig
come argomento per impostare la nuova risorsa come corrente.STATE_CHANGED
che segnala che il lettore è nello stato PREPARED
.MediaPlayer.play
.Di seguito è riportato il risultato del completamento delle attività in questo esempio:
Se un elemento ReplaceTimeRange
si sovrappone a un altro nella timeline di riproduzione, ad esempio, la posizione iniziale di un elemento ReplaceTimeRange
è precedente a una posizione finale già inserita, TVSDK regola automaticamente l'inizio dell' elemento ReplaceTimeRange
offensivo per evitare il conflitto.
Questo rende il ReplaceTimeRange
corretto più breve di quanto specificato originariamente. Se la regolazione porta a una durata pari a zero, TVSDK rilascia silenziosamente il ReplaceTimeRange
dannoso.
TVSDK cerca intervalli di tempo adiacenti per le interruzioni di annunci personalizzate e le raggruppa in interruzioni di annunci separate.
Gli intervalli di tempo non adiacenti a qualsiasi altro intervallo di tempo vengono convertiti in interruzioni di annunci che contengono un singolo annuncio.
Se l’applicazione tenta di caricare una risorsa multimediale la cui configurazione contiene CustomRangeMetadata
che può essere utilizzata solo nei marcatori di annunci personalizzati del contesto, TVSDK genera un’eccezione se la risorsa sottostante non è di tipo VOD.
Quando si tratta di ad markers personalizzati, TVSDK disattiva altri meccanismi di risoluzione degli annunci (ad esempio, Adobe Primetime ad Decioning).
Puoi utilizzare qualsiasi modulo ad-resolver TVSDK o il meccanismo di ad markers personalizzato. Quando utilizzi marcatori di annunci personalizzati, il contenuto dell’annuncio viene considerato risolto e posizionato sulla timeline.
Lo snippet di codice seguente inserisce tre intervalli di tempo sulla timeline come marcatori di annunci personalizzati.
// Assume that the 3 time ranges are obtained through external means
// Use them to populate the ReplaceTimeRange instance
List<ReplaceTimeRange> timeRanges = new ArrayList<ReplaceTimeRange>();
timeRanges.add(new ReplaceTimeRange(0,10000, 0));
timeRanges.add(new ReplaceTimeRange(15000,20000, 0));
timeRanges.add(new ReplaceTimeRange(25000,30000, 0));
CustomRangeMetadata customRangeMetadata = new CustomRangeMetadata();
customRangeMetadata.setTimeRangeList(timeRanges);
customRangeMetadata.setType(CustomRangeMetadata.CustomRangeType.MARK_RANGE);
//Create a MediaResource instance
MediaResource mediaResource = MediaResource.createFromUrl(
"www.example.com/video/test_video.m3u8", timeRanges.toMedatada(null));
// Create a MediaPlayerItemConfig instance
MediaPlayerItemConfig config =
new MediaPlayerItemConfig(getActivity().getApplicationContext());
// Set customRangeMetadata
config.setCustomRangeMetadata(customRangeMetadata);
// Prepare the content for playback by calling replaceCurrentResource
// NOTE: mediaPlayer is an instance of a properly configured MediaPlayer
mediaPlayer.replaceCurrentResource(mediaResource, config);
// wait for TVSDK to reach the PREPARED state
mediaPlayer.addEventListener(MediaPlayerEvent.STATE_CHANGED,
new StatusChangeEventListener() {
@Override
public void onStatusChanged(MediaPlayerStatusChangeEvent event) {
if( event.getStatus() == MediaPlayerStatus.PREPARED ) {
// TVSDK is in the PREPARED state, so start the playback
mediaPlayer.play();
}
...
}