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:
DashMediaSource
pour DASH.SsMediaSource
pour SmoothStreaming.HlsMediaSource
pour HLS.ProgressiveMediaSource
pour les fichiers multimédias standardsRtspMediaSource
pour 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 avecadjustPeriodTimeOffsets
etclipDurations
dé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.