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. La il player li crea da elementi multimediali utilizzando un MediaSource.Factory.

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

DefaultMediaSourceFactory può anche creare origini multimediali più complesse a seconda sulle proprietà degli elementi multimediali corrispondenti. Questa operazione viene descritta in maggior dettaglio nel dettaglio Pagina Elementi multimediali.

Per le app che richiedono configurazioni di fonti multimediali non supportate dal configurazione predefinita del player, sono disponibili diverse opzioni personalizzazione.

Personalizzazione della creazione di fonti multimediali

Durante la creazione del player, è possibile inserire un MediaSource.Factory. Ad esempio: se un'app vuole inserire annunci e usare un CacheDataSource.Factory per supportare per la memorizzazione nella cache, un'istanza di DefaultMediaSourceFactory può essere configurata questi requisiti e inseriti 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();

La DefaultMediaSourceFactory JavaDoc le opzioni disponibili sono descritte in maggiore dettaglio.

È anche possibile inserire un'implementazione MediaSource.Factory personalizzata per per supportare la creazione di un tipo di origine multimediale personalizzato. La fabbrica createMediaSource(MediaItem) verrà chiamato per creare una fonte multimediale per ogni l'elemento multimediale aggiunto alla playlist.

API Media source based playlist

L'interfaccia di ExoPlayer definisce i metodi aggiuntivi per le playlist che accettano fonti multimediali piuttosto che elementi multimediali. In questo modo è possibile bypassare i valori MediaSource.Factory interni del player e passano le istanze di origine multimediale al player:

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 di fonti multimediali

ExoPlayer fornisce più implementazioni MediaSource per modificare e scrivere e altre MediaSource istanze. Questi sono particolarmente utili nei casi in cui le personalizzazioni devono essere combinate e nessuno dei percorsi di configurazione più semplici sufficienti.

  • ClippingMediaSource: consente di ritagliare 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, per Ad esempio, la semplice esposizione della traccia video di un file contenente audio e video. Se questa è l'unica modifica, è preferibile utilizzare parametri di selezione delle tracce.
  • MergingMediaSource: unisce più origini multimediali da riprodurre in parallelo. Nella in quasi tutti i casi, è consigliabile chiamare il costruttore adjustPeriodTimeOffsets e clipDurations vengono impostati su true per garantire che tutte le le origini iniziano e finiscono contemporaneamente. Se questa modifica viene apportata per aggiungere per i sottotitoli codificati in sideload, è preferibile utilizzare MediaItem.SubtitleConfiguration.
  • ConcatenatingMediaSource2: unisce più fonti multimediali da riprodurre in sequenza. La struttura multimediale visibile all'utente espone una singola Timeline.Window, che indica che appare come un singolo articolo. Se questo viene apportata una modifica per riprodurre più elementi che non dovrebbero avere uno solo, è preferibile utilizzare i metodi dell'API Playlist come Player.addMediaItem in alternativa.
  • SilenceMediaSource: genera silenzio per una durata specificata, ovvero utili per colmare le lacune.
  • AdsMediaSource: estende un'origine multimediale con l'inserimento di annunci lato client le funzionalità di machine learning. Per informazioni dettagliate, consulta la guida all'inserimento degli annunci.
  • ServerSideAdInsertionMediaSource: estende un'origine multimediale con annuncio lato server funzionalità di inserimento. Per informazioni dettagliate, consulta la guida all'inserimento degli annunci.