Sources multimédias

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.

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'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.