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
:
DashMediaSource
per DASH.SsMediaSource
per Streaming fluido.HlsMediaSource
per HLS.ProgressiveMediaSource
per file multimediali normali.RtspMediaSource
per RTSP.
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 utilizzareMediaItem.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 conadjustPeriodTimeOffsets
eclipDurations
impostati su true per garantire che tutte le origini inizino e terminino contemporaneamente. Se questa modifica viene apportata per aggiungere sottotitoli caricati localmente, è preferibile utilizzareMediaItem.SubtitleConfiguration
.ConcatenatingMediaSource2
: unisce più origini di contenuti multimediali per la riproduzione consecutiva. La struttura dei contenuti multimediali visibile all'utente espone un singoloTimeline.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 comePlayer.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.