Dans ExoPlayer, chaque élément multimédia est représenté par un MediaItem. Toutefois,
en interne, le lecteur a besoin d'instances MediaSource pour lire le contenu. La
le lecteur les crée à partir des éléments multimédias à l'aide d'un MediaSource.Factory.
Par défaut, le joueur utilise un DefaultMediaSourceFactory, qui peut créer
instances des implémentations MediaSource de contenu suivantes:
DashMediaSourcepour DASH.SsMediaSourcepour SmoothStreaming.HlsMediaSourcepour HLS.ProgressiveMediaSourcepour les fichiers multimédias standardsRtspMediaSourcepour RTSP.
DefaultMediaSourceFactory peut également créer des sources multimédias plus complexes en fonction
sur les propriétés
des éléments multimédias correspondants. Pour en savoir plus,
des informations sur le
Page "Éléments multimédias" :
Pour les applications nécessitant des configurations de sources multimédias non compatibles avec le configuration par défaut du lecteur, vous disposez de plusieurs options la personnalisation.
Personnaliser la création de sources multimédias
Lors de la création du lecteur, une MediaSource.Factory peut être injectée. Par exemple :
si une application souhaite insérer des annonces et utiliser un CacheDataSource.Factory pour prendre en charge
mise en cache, une instance de DefaultMediaSourceFactory peut être configurée pour correspondre
ces exigences et injectées lors de la création du joueur:
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
JavaDoc DefaultMediaSourceFactory
décrit plus en détail les options disponibles.
Il est également possible d'injecter une implémentation MediaSource.Factory personnalisée, pour
exemple pour permettre la création d'un type de source multimédia personnalisé. L'usine
createMediaSource(MediaItem) sera appelé afin de créer une source multimédia pour chaque
élément multimédia qui est
ajouté à la playlist.
API de playlist basée sur la source multimédia
L'interface ExoPlayer définit d'autres méthodes de playlist qui acceptent
de sources multimédias plutôt que d'éléments multimédias. Cela permet de contourner
MediaSource.Factory interne du lecteur et transmettre les instances de la source multimédia au
directement:
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();
Composition de la source multimédia avancée
ExoPlayer fournit plusieurs implémentations MediaSource pour modifier et composer des éléments
d'autres instances MediaSource. Ils sont particulièrement utiles lorsque plusieurs
les personnalisations doivent être combinées et aucun des chemins de configuration les plus simples
suffisant.
ClippingMediaSource: permet de rogner des contenus multimédias selon une plage d'horodatage spécifiée. S'il s'agit de la seule modification, il est préférable d'utiliserMediaItem.ClippingConfigurationà la place.FilteringMediaSource: filtre les pistes disponibles pour les types spécifiés, par Par exemple, la piste vidéo est exposée à partir d'un fichier contenant à la fois et vidéo. S'il s'agit de la seule modification, il est préférable d'utiliser suivre les paramètres de sélection à la place.MergingMediaSource: fusionne plusieurs sources multimédias pour permettre la lecture en parallèle. Dans dans presque tous les cas, il est conseillé d'appeler le constructeur avecadjustPeriodTimeOffsetsetclipDurationsdéfinis sur "true" les sources commencent et se terminent au même moment. Si cette modification est effectuée pour ajouter sous-jacents, il est préférable d'utiliserMediaItem.SubtitleConfigurationà la place.ConcatenatingMediaSource2: fusionne plusieurs sources multimédias pour lancer la lecture. de manière consécutive. La structure multimédia visible par l'utilisateur expose un seulTimeline.Window, ce qui signifie qu'il ressemble à un seul élément. Si cette modification pour lire plusieurs éléments qui ne sont pas censés ressembler à une seule, utilisez plutôt les méthodes de l'API Playlist commePlayer.addMediaItemà la place.SilenceMediaSource: génère un silence pendant une durée spécifiée utiles pour combler les lacunes.AdsMediaSource: étend une source multimédia avec l'insertion d'annonces côté client. des fonctionnalités. Pour en savoir plus, consultez le guide d'insertion d'annonces.ServerSideAdInsertionMediaSource: étend une source multimédia avec une annonce côté serveur. et d'insertion dynamique. Pour en savoir plus, consultez le guide d'insertion d'annonces.