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:
DashMediaSource
per DASH.SsMediaSource
per Streaming fluido.HlsMediaSource
per HLS.ProgressiveMediaSource
per i file multimediali normali.RtspMediaSource
per RTSP.
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 utilizzareMediaItem.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 costruttoreadjustPeriodTimeOffsets
eclipDurations
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 utilizzareMediaItem.SubtitleConfiguration
.ConcatenatingMediaSource2
: unisce più fonti multimediali da riprodurre in sequenza. La struttura multimediale visibile all'utente espone una singolaTimeline.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 comePlayer.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.