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. Le lecteur les crée à partir d'éléments multimédias à l'aide d'un MediaSource.Factory
.
Par défaut, le lecteur utilise un DefaultMediaSourceFactory
, qui peut créer des 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 des propriétés des éléments multimédias correspondants. Pour en savoir plus, consultez la page Éléments multimédias.
Pour les applications nécessitant des configurations de source multimédia non compatibles avec la configuration par défaut du lecteur, plusieurs options de personnalisation sont disponibles.
Personnaliser la création de la source multimédia
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 la mise en cache, une instance de DefaultMediaSourceFactory
peut être configurée pour répondre à ces exigences et injectée lors de la construction du lecteur:
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 documentation JavaDoc DefaultMediaSourceFactory
décrit plus en détail les options disponibles.
Il est également possible d'injecter une implémentation MediaSource.Factory
personnalisée, par exemple pour permettre la création d'un type de source multimédia personnalisé. La méthode createMediaSource(MediaItem)
de la fabrique est appelée pour créer une source multimédia pour chaque élément multimédia ajouté à la playlist.
API Media Source Play playlist
L'interface ExoPlayer
définit des méthodes de playlist supplémentaires qui acceptent les sources multimédias plutôt que les éléments multimédias. Cela permet de contourner la MediaSource.Factory
interne du lecteur et de lui transmettre directement les instances de sources multimédias:
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 de MediaSource
pour modifier et composer d'autres instances de MediaSource
. Ils sont particulièrement utiles lorsqu'il faut combiner plusieurs personnalisations et qu'aucun des chemins de configuration plus simples ne suffit.
ClippingMediaSource
: permet de rogner le contenu multimédia en fonction d'une plage d'horodatage spécifiée. S'il s'agit de la seule modification, il est préférable d'utiliserMediaItem.ClippingConfiguration
.FilteringMediaSource
: filtre les pistes disponibles en fonction des types spécifiés, par exemple en exposant simplement la piste vidéo à partir d'un fichier contenant à la fois de l'audio et de la vidéo. S'il s'agit de la seule modification, il est préférable d'utiliser plutôt des paramètres de sélection de suivi.MergingMediaSource
: fusionne plusieurs sources multimédias pour les lire en parallèle. Dans la plupart des cas, il est recommandé d'appeler le constructeur avecadjustPeriodTimeOffsets
etclipDurations
définis sur "true" pour vous assurer que toutes les sources commencent et se terminent en même temps. Si cette modification est effectuée pour ajouter des sous-titres à chargement partiel, il est préférable d'utiliserMediaItem.SubtitleConfiguration
.ConcatenatingMediaSource2
: fusionne plusieurs sources multimédias pour les lire simultanément. La structure multimédia visible par l'utilisateur expose un seul élémentTimeline.Window
, ce qui signifie qu'elle ressemble à un seul élément. Si cette modification est effectuée pour lire plusieurs éléments qui ne sont pas censés ressembler à un seul, il est préférable d'utiliser les méthodes de l'API des playlists telles quePlayer.addMediaItem
.SilenceMediaSource
: génère un silence pendant une durée spécifiée utile pour combler les écarts.AdsMediaSource
: étend une source multimédia avec des fonctionnalités d'insertion d'annonces côté client. Pour en savoir plus, consultez le guide d'insertion d'annonces.ServerSideAdInsertionMediaSource
: étend une source multimédia avec des fonctionnalités d'insertion d'annonces côté serveur. Pour en savoir plus, consultez le guide d'insertion d'annonces.