Medienquellen

In ExoPlayer wird jedes Medium durch ein MediaItem dargestellt. Allerdings intern benötigt der Player MediaSource-Instanzen zur Wiedergabe des Inhalts. Die Diese werden im Player mithilfe von MediaSource.Factory aus Mediaelementen erstellt.

Standardmäßig verwendet der Player ein DefaultMediaSourceFactory, das Instanzen der folgenden Inhalts-MediaSource-Implementierungen:

DefaultMediaSourceFactory kann auch komplexere Medienquellen erstellen, der zugehörigen Medienelemente festlegen. Dies wird in ausführlicheren Details zum Seite „Medien“:

Für Apps, bei denen Medienquellen eingerichtet werden müssen, die vom Standardkonfiguration des Players angezeigt wird, gibt es mehrere Möglichkeiten, Personalisierung.

Erstellung der Medienquelle anpassen

Beim Erstellen des Players kann ein MediaSource.Factory eingeschleust werden. Beispiel: wenn in einer App Werbung eingefügt und CacheDataSource.Factory zur Unterstützung Caching verwendet wird, kann eine Instanz von DefaultMediaSourceFactory so konfiguriert werden, diese Anforderungen erfüllen und bei der Player-Erstellung eingefügt werden:

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();

Die DefaultMediaSourceFactory JavaDoc werden die verfügbaren Optionen ausführlicher beschrieben.

Es ist auch möglich, eine benutzerdefinierte MediaSource.Factory-Implementierung für Beispiel, um die Erstellung eines benutzerdefinierten Medienquellentyps zu unterstützen. Die Fabrik createMediaSource(MediaItem) wird aufgerufen, um für jede eine Medienquelle zu erstellen Medienelement, das zur Playlist hinzugefügt.

Auf Medienquellen basierende Playlist-API

Die Schnittstelle ExoPlayer definiert zusätzliche Playlist-Methoden, die Medienquellen und nicht als Medienelemente. Dadurch können die des internen MediaSource.Factory des Players und übergeben Medienquelleninstanzen an den Player direkt:

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();

Erweiterte Zusammensetzung der Medienquelle

ExoPlayer bietet mehrere MediaSource-Implementierungen zum Ändern und Zusammenstellen andere MediaSource-Instanzen. Dies ist besonders nützlich, wenn mehrere Anpassungen müssen kombiniert werden und keiner der einfacheren Einrichtungspfade ist ausreichend.

  • ClippingMediaSource: Ermöglicht das Zuschneiden von Medien auf einen bestimmten Zeitstempelbereich. Wenn dies die einzige Änderung ist, sollten Sie MediaItem.ClippingConfiguration.
  • FilteringMediaSource: Filtert verfügbare Tracks nach den angegebenen Typen für z. B. wenn der Videotrack aus einer Datei offengelegt wird, die sowohl Audio- als auch und Videos. Wenn dies die einzige Änderung ist, sollten Sie Tracking-Auswahlparameter.
  • MergingMediaSource: Führt mehrere Medienquellen zusammen, um sie gleichzeitig wiederzugeben. In ist es in fast allen Fällen ratsam, den Konstruktor mit adjustPeriodTimeOffsets und clipDurations auf „true“ gesetzt, um sicherzustellen, Start und Ende der Quellen sind identisch. Wenn Sie diese Änderung vornehmen, per Sideload übertragene Untertitel, MediaItem.SubtitleConfiguration.
  • ConcatenatingMediaSource2: Führt mehrere Medienquellen für die Wiedergabe zusammen aufeinanderfolgen. Die für den Nutzer sichtbare Medienstruktur Timeline.Window, was bedeutet, dass er wie ein einzelner Artikel aussieht. Wenn dieses Änderungen werden vorgenommen, um mehrere Elemente wiederzugeben, die nicht so aussehen sollen. einzelne, empfehlen wir die Verwendung von playlist API-Methoden wie Player.addMediaItem.
  • SilenceMediaSource: Erzeugt Stille für eine bestimmte Dauer, die um Lücken zu füllen.
  • AdsMediaSource: Erweitert eine Mediaquelle mit der clientseitigen Anzeigenbereitstellung Funktionen. Weitere Informationen finden Sie im Leitfaden zur Anzeigenbereitstellung.
  • ServerSideAdInsertionMediaSource: erweitert eine Mediaquelle um eine serverseitige Anzeige Funktionen zur Anzeigenbereitstellung. Weitere Informationen finden Sie im Leitfaden zur Anzeigenbereitstellung.