In ExoPlayer, ogni elemento multimediale è rappresentato da un MediaItem. Tuttavia, internamente il player ha bisogno di MediaSource istanze per riprodurre i contenuti. Il
player li crea dagli elementi multimediali utilizzando un MediaSource.Factory.
Per impostazione predefinita, il player utilizza un DefaultMediaSourceFactory, che può creare istanze delle seguenti implementazioni di MediaSource:
DashMediaSourceper DASH.SsMediaSourceper Smooth Streaming.HlsMediaSourceper HLS.ProgressiveMediaSourceper i file multimediali regolari.RtspMediaSourceper RTSP.
DefaultMediaSourceFactory può anche creare origini media più complesse a seconda
delle proprietà degli elementi multimediali corrispondenti. Questo aspetto è descritto in modo più
dettagliato nella
pagina Elementi multimediali.
Per le app che richiedono configurazioni di origini media non supportate dalla configurazione predefinita del player, sono disponibili diverse opzioni di personalizzazione.
Personalizzazione della creazione di origini media
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, un'istanza di DefaultMediaSourceFactory può essere configurata in modo che corrisponda
a 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();
La
DefaultMediaSourceFactory JavaDoc
descrive le opzioni disponibili in modo più dettagliato.
È anche possibile inserire un'implementazione MediaSource.Factory personalizzata, ad esempio per supportare la creazione di un tipo di origine media personalizzato. Il metodo createMediaSource(MediaItem) della factory verrà chiamato per creare un'origine media per ogni elemento multimediale aggiunto alla playlist.
API playlist basata sull'origine dei contenuti multimediali
L'interfaccia ExoPlayer definisce metodi di playlist aggiuntivi che accettano
origini multimediali anziché elementi multimediali. In questo modo è possibile bypassare l'MediaSource.Factory interno del lettore e passare le istanze dell'origine media direttamente al lettore:
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 delle origini media
ExoPlayer fornisce più implementazioni di MediaSource per modificare e comporre
altre istanze di MediaSource. Questi sono più utili nei casi in cui devono essere combinate più personalizzazioni e nessuno dei percorsi di configurazione più semplici è sufficiente.
ClippingMediaSource: consente di tagliare i contenuti multimediali in 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 mostra solo la traccia video di un file che contiene sia audio che video. Se questa è l'unica modifica, è preferibile utilizzare i parametri di selezione delle tracce.MergingMediaSource: unisce più sorgenti multimediali per la riproduzione in parallelo. In quasi tutti i casi, è consigliabile chiamare il costruttore conadjustPeriodTimeOffsetseclipDurationsimpostati su true per garantire che tutte le origini inizino e terminino contemporaneamente. Se questa modifica viene apportata per aggiungere sottotitoli caricati lateralmente, è preferibile utilizzareMediaItem.SubtitleConfiguration.ConcatenatingMediaSource2: unisce più fonti multimediali per la riproduzione consecutiva. La struttura dei contenuti multimediali visibile all'utente espone un singoloTimeline.Window, il che significa che sembra un singolo elemento. Se questa modifica viene apportata per riprodurre più elementi che non devono sembrare un unico elemento, è 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 media con funzionalità di inserimento di annunci lato client. Per ulteriori dettagli, consulta la guida all'inserimento di annunci.ServerSideAdInsertionMediaSource: Estende una sorgente media con funzionalità di inserimento di annunci lato server. Per ulteriori dettagli, consulta la guida all'inserimento di annunci.