Posizionare i marcatori di annunci TimeRange sulla timeline

Questo esempio mostra il modo consigliato per includere le specifiche TimeRange nella timeline di riproduzione.

  1. Traduci le informazioni di posizionamento degli annunci fuori banda in un elenco di TimeRange specifiche (ovvero, istanze della classe TimeRange).
  2. Utilizza l'insieme di specifiche TimeRange per popolare un'istanza della classe TimeRangeCollection.
  3. Passa l'istanza Metadata, che può essere ottenuta dall'istanza TimeRangeCollection al metodo replaceCurrentItem (parte dell'interfaccia MediaPlayer).
  4. Attendi che TVSDK passi alla transizione allo stato PREPARED in attesa che venga attivato il callback PlaybackEventListener#onPrepared.
  5. Avvia la riproduzione video chiamando il metodo play() (parte dell'interfaccia MediaPlayer).
  • Gestione dei conflitti della timeline: Ci possono essere casi in cui alcune specifiche TimeRange si sovrappongono sulla timeline di riproduzione. Ad esempio, il valore della posizione iniziale corrispondente a una specifica TimeRange potrebbe essere inferiore al valore della posizione finale già inserita. In questo caso, TVSDK regola in modo invisibile la posizione iniziale della specifica TimeRange offesa per evitare conflitti nella timeline. Grazie a questa regolazione, il nuovo TimeRange diventa più breve di quanto specificato originariamente. Se la regolazione è così estrema che porterebbe a un TimeRange con una durata di zero ms, TVSDK rilascia silenziosamente la specifica TimeRange che causa il danno.
  • Quando vengono fornite le specifiche TimeRange per le interruzioni di annunci personalizzate, TVSDK tenta di tradurle in annunci raggruppati all’interno di interruzioni di annunci. TVSDK cerca le specifiche adiacenti TimeRange e le raggruppa in interruzioni pubblicitarie separate. Se ci sono intervalli di tempo che non sono adiacenti a nessun altro intervallo di tempo, vengono tradotti in interruzioni pubblicitarie che contengono un singolo annuncio.
  • Si presume che l'elemento del lettore multimediale caricato punti a una risorsa VOD. TVSDK lo controlla ogni volta che l’applicazione prova a caricare una risorsa multimediale i cui metadati contengono TimeRange specifiche che possono essere utilizzate solo nel contesto della funzione di ad-markers personalizzata. Se la risorsa sottostante non è di tipo VOD, la libreria TVSDK genera un'eccezione.
  • Quando si utilizzano marcatori di annunci personalizzati, TVSDK disattiva altri meccanismi di risoluzione degli annunci (tramite Adobe Primetime ad Decioning (precedentemente noto come Auditude) o altri sistemi di provisioning degli annunci). Puoi utilizzare uno dei vari moduli ad-resolver forniti da TVSDK o il meccanismo di ad-markers personalizzato. Quando si utilizza l’API degli ad-markers personalizzata, il contenuto dell’annuncio viene considerato già risolto e inserito nella timeline.

Il frammento di codice seguente fornisce un esempio semplice in cui un set di tre specifiche TimeRange viene posizionato sulla timeline come ad-markers personalizzati.

// 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();
    }
}

In questa pagina