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:
DashMediaSource
für DASH.SsMediaSource
für SmoothStreaming.HlsMediaSource
für HLS.ProgressiveMediaSource
für normale Mediendateien.RtspMediaSource
für RTSP.
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 SieMediaItem.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 mitadjustPeriodTimeOffsets
undclipDurations
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 MedienstrukturTimeline.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 wiePlayer.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.