Origini di contenuti multimediali

In ExoPlayer, ogni elemento multimediale è rappresentato da un elemento MediaItem. Tuttavia internamente, il player ha bisogno di MediaSource istanze per riprodurre i contenuti. Il player li crea da elementi multimediali utilizzando un MediaSource.Factory.

Per impostazione predefinita, il player utilizza un elemento DefaultMediaSourceFactory, che può creare istanze delle seguenti implementazioni di contenuti MediaSource:

DefaultMediaSourceFactory può anche creare origini multimediali più complesse a seconda delle proprietà degli elementi multimediali corrispondenti. Questa procedura è descritta più nel dettaglio nella pagina Elementi multimediali.

Per le app che richiedono configurazioni dell'origine multimediale non supportate dalla configurazione predefinita del player, sono disponibili diverse opzioni per la personalizzazione.

Personalizzazione della creazione di origini multimediali

Durante la creazione del player, è possibile inserire un MediaSource.Factory. Ad esempio, se un'app vuole inserire annunci e utilizzare un CacheDataSource.Factory per supportare la memorizzazione nella cache, è possibile configurare un'istanza di DefaultMediaSourceFactory in modo da soddisfare questi requisiti e inserita durante la creazione del player:

Kotlin

  val mediaSourceFactory: MediaSource.Factory =
    DefaultMediaSourceFactory(context)
      .setDataSourceFactory(cacheDataSourceFactory)
      .setLocalAdInsertionComponents(adsLoaderProvider, playerView)
  val player = ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build()

Java

MediaSource.Factory mediaSourceFactory =
    new DefaultMediaSourceFactory(context)
        .setDataSourceFactory(cacheDataSourceFactory)
        .setLocalAdInsertionComponents(adsLoaderProvider, /* adViewProvider= */ playerView);
ExoPlayer player =
    new ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build();

Il JavaDoc di DefaultMediaSourceFactory descrive in modo più dettagliato le opzioni disponibili.

È anche possibile inserire un'implementazione MediaSource.Factory personalizzata, ad esempio per supportare la creazione di un tipo di origine multimediale personalizzata. L'elemento createMediaSource(MediaItem) della fabbrica verrà chiamato per creare un'origine multimediale per ogni elemento multimediale aggiunto alla playlist.

API Media source based playlist

L'interfaccia ExoPlayer definisce metodi aggiuntivi per le playlist che accettano origini multimediali anziché elementi multimediali. In questo modo è possibile bypassare il valore MediaSource.Factory interno del player e trasferire direttamente al player le istanze dell'origine multimediale:

Kotlin

// Set a list of media sources as initial playlist.
exoPlayer.setMediaSources(listOfMediaSources)
// Add a single media source.
exoPlayer.addMediaSource(anotherMediaSource)

// Can be combined with the media item API.
exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri))

exoPlayer.prepare()
exoPlayer.play()

Java

// Set a list of media sources as initial playlist.
exoPlayer.setMediaSources(listOfMediaSources);
// Add a single media source.
exoPlayer.addMediaSource(anotherMediaSource);

// Can be combined with the media item API.
exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri));

exoPlayer.prepare();
exoPlayer.play();

Composizione avanzata dell'origine multimediale

ExoPlayer fornisce diverse implementazioni MediaSource per modificare e comporre altre istanze MediaSource. Sono particolarmente utili nei casi in cui è necessario combinare più personalizzazioni e nessuno dei percorsi di configurazione più semplici è sufficiente.

  • ClippingMediaSource: consente di ritagliare i contenuti multimediali in base a un intervallo di timestamp specificato. Se questa è l'unica modifica, è preferibile utilizzare MediaItem.ClippingConfiguration.
  • FilteringMediaSource: filtra le tracce disponibili in base ai tipi specificati, ad esempio, esponendo semplicemente la traccia video da un file contenente sia audio che video. Se questa è l'unica modifica, è preferibile utilizzare i parametri di selezione della traccia.
  • MergingMediaSource: unisce più fonti multimediali per riprodurle in parallelo. Nella maggior parte dei casi, è consigliabile chiamare il costruttore con adjustPeriodTimeOffsets e clipDurations impostati su true per garantire che tutte le origini inizino e terminino contemporaneamente. Se questa modifica viene apportata per aggiungere sottotitoli caricati localmente, è preferibile utilizzare MediaItem.SubtitleConfiguration.
  • ConcatenatingMediaSource2: unisce più origini di contenuti multimediali per la riproduzione consecutiva. La struttura dei contenuti multimediali visibile all'utente espone un singolo Timeline.Window, ovvero appare come un singolo elemento. Se questa modifica viene effettuata per riprodurre più elementi che non dovrebbero sembrare uno solo, è preferibile utilizzare i metodi dell'API playlist come Player.addMediaItem.
  • SilenceMediaSource: genera silenzio per una durata specificata, utile per colmare le lacune.
  • AdsMediaSource: estende un'origine multimediale con funzionalità di inserimento di annunci lato client. Per informazioni dettagliate, consulta la guida all'inserimento di annunci.
  • ServerSideAdInsertionMediaSource: estende un'origine multimediale con funzionalità di inserimento di annunci lato server. Per informazioni dettagliate, consulta la guida all'inserimento di annunci.