Sources multimédias
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
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:
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.
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.
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();
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'utiliser
MediaItem.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 avec
adjustPeriodTimeOffsets
et clipDurations
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'utiliser
MediaItem.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 seul
Timeline.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 comme
Player.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.
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/27 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/07/27 (UTC)."],[],[],null,["# Media sources\n\nIn ExoPlayer, every piece of media is represented by a `MediaItem`. However\ninternally, the player needs `MediaSource` instances to play the content. The\nplayer creates these from media items using a `MediaSource.Factory`.\n\nBy default the player uses a `DefaultMediaSourceFactory`, which can create\ninstances of the following content `MediaSource` implementations:\n\n- `DashMediaSource` for [DASH](/guide/topics/media/exoplayer/dash).\n- `SsMediaSource` for [SmoothStreaming](/guide/topics/media/exoplayer/smoothstreaming).\n- `HlsMediaSource` for [HLS](/guide/topics/media/exoplayer/hls).\n- `ProgressiveMediaSource` for [regular media files](/guide/topics/media/exoplayer/progressive).\n- `RtspMediaSource` for [RTSP](/guide/topics/media/exoplayer/rtsp).\n\n`DefaultMediaSourceFactory` can also create more complex media sources depending\non the properties of the corresponding media items. This is described in more\ndetail on the\n[Media items page](/guide/topics/media/exoplayer/media-items).\n\nFor apps that need media source setups that are not supported by the\ndefault configuration of the player, there are several options for\ncustomization.\n\nCustomizing media source creation\n---------------------------------\n\nWhen building the player, a `MediaSource.Factory` can be injected. For example,\nif an app wants to insert ads and use a `CacheDataSource.Factory` to support\ncaching, an instance of `DefaultMediaSourceFactory` can be configured to match\nthese requirements and injected during player construction: \n\n### Kotlin\n\n```kotlin\n val mediaSourceFactory: MediaSource.Factory =\n DefaultMediaSourceFactory(context)\n .setDataSourceFactory(cacheDataSourceFactory)\n .setLocalAdInsertionComponents(adsLoaderProvider, playerView)\n val player = ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build()\n```\n\n### Java\n\n```java\nMediaSource.Factory mediaSourceFactory =\n new DefaultMediaSourceFactory(context)\n .setDataSourceFactory(cacheDataSourceFactory)\n .setLocalAdInsertionComponents(adsLoaderProvider, /* adViewProvider= */ playerView);\nExoPlayer player =\n new ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build();\n```\n\n\u003cbr /\u003e\n\nThe\n[`DefaultMediaSourceFactory` JavaDoc](/reference/androidx/media3/exoplayer/source/DefaultMediaSourceFactory)\ndescribes the available options in more detail.\n\nIt's also possible to inject a custom `MediaSource.Factory` implementation, for\nexample to support creation of a custom media source type. The factory's\n`createMediaSource(MediaItem)` will be called to create a media source for each\nmedia item that is\n[added to the playlist](/guide/topics/media/exoplayer/playlists).\n\nMedia source based playlist API\n-------------------------------\n\nThe [`ExoPlayer`](/reference/androidx/media3/exoplayer/ExoPlayer) interface defines additional playlist methods that accept\nmedia sources rather than media items. This makes it possible to bypass the\nplayer's internal `MediaSource.Factory` and pass media source instances to the\nplayer directly: \n\n### Kotlin\n\n```kotlin\n// Set a list of media sources as initial playlist.\nexoPlayer.setMediaSources(listOfMediaSources)\n// Add a single media source.\nexoPlayer.addMediaSource(anotherMediaSource)\n\n// Can be combined with the media item API.\nexoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri))\n\nexoPlayer.prepare()\nexoPlayer.play()\n```\n\n### Java\n\n```java\n// Set a list of media sources as initial playlist.\nexoPlayer.setMediaSources(listOfMediaSources);\n// Add a single media source.\nexoPlayer.addMediaSource(anotherMediaSource);\n\n// Can be combined with the media item API.\nexoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri));\n\nexoPlayer.prepare();\nexoPlayer.play();\n```\n\n\u003cbr /\u003e\n\nAdvanced media source composition\n---------------------------------\n\nExoPlayer provides multiple `MediaSource` implementations to modify and compose\nother `MediaSource` instances. These are most useful in cases where multiple\ncustomizations have to be combined and none of the simpler setup paths are\nsufficient.\n\n- `ClippingMediaSource`: Allows to clip media to a specified timestamp range. If this is the only modification, it's preferable to use [`MediaItem.ClippingConfiguration`](/guide/topics/media/exoplayer/media-items#clipping-media) instead.\n- `FilteringMediaSource`: Filters available tracks to the specified types, for example, just exposing the video track from a file that contains both audio and video. If this is the only modification, it's preferable to use [track selection parameters](/guide/topics/media/exoplayer/track-selection#disabling-track) instead.\n- `MergingMediaSource`: Merges multiple media sources to play in parallel. In almost all cases, it's advisable to call the constructor with `adjustPeriodTimeOffsets` and `clipDurations` set to true to ensure all sources start and end at the same time. If this modification is done to add side-loaded subtitles, it's preferable to use [`MediaItem.SubtitleConfiguration`](/guide/topics/media/exoplayer/media-items#sideloading-subtitle) instead.\n- `ConcatenatingMediaSource2`: Merges multiple media source to play consecutively. The user-visible media structure exposes a single `Timeline.Window`, meaning that it looks like a single item. If this modification is done to play multiple items that are not supposed to look like a single one, it's preferable to use the [playlist API](/guide/topics/media/exoplayer/playlists) methods like `Player.addMediaItem` instead.\n- `SilenceMediaSource`: Generates silence for a specified duration that is useful to fill gaps.\n- `AdsMediaSource`: Extends a media source with client-side ad insertion capabilities. Refer to the [ad insertion guide](/guide/topics/media/exoplayer/ad-insertion) for details.\n- `ServerSideAdInsertionMediaSource`: Extends a media source with server-side ad insertion capabilities. Refer to the [ad insertion guide](/guide/topics/media/exoplayer/ad-insertion) for details."]]