ExoPlayer unterstützt SmoothStreaming mit dem FMP4-Containerformat. Mediastreams müssen aufgeteilt werden. Das bedeutet, dass Video, Audio und Text in verschiedenen StreamIndex-Elementen im SmoothStreaming-Manifest definiert werden müssen. Die enthaltenen Audio- und Video-Beispielformate müssen ebenfalls unterstützt werden. Weitere Informationen finden Sie im Abschnitt Beispielformate.
Funktion | Unterstützt | Kommentare |
---|---|---|
Container | ||
FMP4 | JA | Nur Demuxed-Streams |
Untertitel | ||
TTML | JA | In FMP4 eingebettet |
Inhaltsschutz | ||
PlayReady SL2000 | JA | Nur Android TV |
Live-Wiedergabe | ||
Regelmäßige Live-Wiedergabe | JA | |
Common Media Client Data (CMCD) | JA | Integrationsleitfaden |
MediaItem verwenden
Für die Wiedergabe eines SmoothStreaming-Streams benötigen Sie das SmoothStreaming-Modul.
Kotlin
implementation("androidx.media3:media3-exoplayer-smoothstreaming:1.3.1")
Cool
implementation "androidx.media3:media3-exoplayer-smoothstreaming:1.3.1"
Du kannst dann eine MediaItem
für den URI eines SmoothStreaming-Manifests erstellen und an den Player übergeben.
Kotlin
// Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(ssUri)) // Prepare the player. player.prepare()
Java
// Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(ssUri)); // Prepare the player. player.prepare();
Wenn der URI nicht mit .ism/Manifest
endet, können Sie MimeTypes.APPLICATION_SS
an setMimeType
von MediaItem.Builder
übergeben, um den Inhaltstyp explizit anzugeben.
Der ExoPlayer passt sich automatisch zwischen den im Manifest definierten Darstellungen an und berücksichtigt dabei sowohl die verfügbare Bandbreite als auch die Gerätefunktionen.
SsMediaSource verwenden
Weitere Anpassungsoptionen erhältst du, wenn du ein SsMediaSource
erstellst und es direkt an den Player statt an einen MediaItem
weitergibst.
Kotlin
// Create a data source factory. val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory() // Create a SmoothStreaming media source pointing to a manifest uri. val mediaSource: MediaSource = SsMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(ssUri)) // Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media source to be played. player.setMediaSource(mediaSource) // Prepare the player. player.prepare()
Java
// Create a data source factory. DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory(); // Create a SmoothStreaming media source pointing to a manifest uri. MediaSource mediaSource = new SsMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(ssUri)); // Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media source to be played. player.setMediaSource(mediaSource); // Prepare the player. player.prepare();
Auf das Manifest zugreifen
Du kannst das aktuelle Manifest abrufen, indem du Player.getCurrentManifest
aufrufst.
Für SmoothStreaming sollten Sie das zurückgegebene Objekt in SsManifest
umwandeln. Der onTimelineChanged
-Callback von Player.Listener
wird ebenfalls aufgerufen, wenn das Manifest geladen wird. Dies geschieht einmal bei On-Demand-Inhalten,
möglicherweise auch bei Live-Inhalten. Das folgende Code-Snippet zeigt, wie eine App beim Laden des Manifests Aktionen ausführen kann.
Kotlin
player.addListener( object : Player.Listener { override fun onTimelineChanged(timeline: Timeline, @TimelineChangeReason reason: Int) { val manifest = player.currentManifest if (manifest is SsManifest) { // Do something with the manifest. } } } )
Java
player.addListener( new Player.Listener() { @Override public void onTimelineChanged( Timeline timeline, @Player.TimelineChangeReason int reason) { Object manifest = player.getCurrentManifest(); if (manifest != null) { SsManifest ssManifest = (SsManifest) manifest; // Do something with the manifest. } } });
Wiedergabe anpassen
ExoPlayer bietet mehrere Möglichkeiten, die Wiedergabe an die Anforderungen Ihrer App anzupassen. Beispiele finden Sie auf der Seite „Anpassen“.