Progressiv

Streams in den folgenden Containerformaten können direkt von ExoPlayer wiedergegeben werden. Die enthaltenen Audio- und Video-Beispielformate müssen ebenfalls unterstützt werden (siehe Beispielformate. Informationen zur Unterstützung von Image-Containern und -Formaten finden Sie unter Bilder:

Container format Unterstützt Kommentare
MP4 JA
M4A JA
FMP4 JA
WebM JA
Matroska JA
MP3 JA Einige Streams können nur über die konstante Bitratesuche gefunden werden**
OGG JA Enthält Vorbis, Opus und FLAC
WAV (WAV) JA
MPEG-TS JA
MPEG-PS JA
FLV JA Nicht suchbar*
ADTS (AAC) JA Suche nur mit konstanter Bitrate-Suche möglich**
FLAC JA Sie können die FLAC-Bibliothek oder den FLAC-Extraktor in der ExoPlayer-Bibliothek verwenden.***
Logo: AMR JA Suche nur mit konstanter Bitrate-Suche möglich**

* Die Suche wird nicht unterstützt, da der Container keine Metadaten bereitstellt (z. B. ein Beispielindex), damit ein Mediaplayer eine Suche auf effiziente Weise ausführen kann. Wenn eine Suche erforderlich ist, sollten Sie ein geeigneteres Containerformat verwenden.

** Diese Extraktoren haben FLAG_ENABLE_CONSTANT_BITRATE_SEEKING-Flags für eine ungefähre Suche mit einer konstanten Bitratenannahme möglich. Dieses ist standardmäßig nicht aktiviert. Das geht am einfachsten für alle Extraktoren, die diese unterstützen, besteht darin, DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, wie beschrieben finden Sie hier.

*** Der Extraktor der FLAC-Bibliothek gibt Audio-Rohdaten aus, die verarbeitet werden können. des Frameworks auf allen API-Ebenen. Der FLAC-Extraktor der ExoPlayer-Bibliothek gibt aus FLAC-Audioframes und ist daher auf einen FLAC-Decoder (z. B. MediaCodec) angewiesen. der FLAC verarbeitet (erforderlich ab API-Level 27), oder der FFmpeg-Bibliothek mit aktiviertem FLAC). DefaultExtractorsFactory verwendet die Methode Erweiterungsextraktor, wenn die Anwendung mit der FLAC-Bibliothek erstellt wurde. Andernfalls wird der ExoPlayer-Extraktor der ExoPlayer-Bibliothek verwendet.

MediaItem verwenden

Wenn du einen progressiven Stream wiedergeben möchtest, musst du einen MediaItem mit dem Medien-URI erstellen und übergeben an den Player.

Kotlin

// Create a player instance.
val player = ExoPlayer.Builder(context).build()
// Set the media item to be played.
player.setMediaItem(MediaItem.fromUri(progressiveUri))
// 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(progressiveUri));
// Prepare the player.
player.prepare();

ProgressiveMediaSource verwenden

Weitere Anpassungsoptionen erhalten Sie, wenn Sie einen ProgressiveMediaSource und direkt an den Spieler statt an MediaItem übergeben.

Kotlin

// Create a data source factory.
val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory()
// Create a progressive media source pointing to a stream uri.
val mediaSource: MediaSource =
ProgressiveMediaSource.Factory(dataSourceFactory)
    .createMediaSource(MediaItem.fromUri(progressiveUri))
// 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 progressive media source pointing to a stream uri.
MediaSource mediaSource =
    new ProgressiveMediaSource.Factory(dataSourceFactory)
        .createMediaSource(MediaItem.fromUri(progressiveUri));
// 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();

Wiedergabe anpassen

Mit ExoPlayer können Sie die Wiedergabe auf verschiedene die Anforderungen der App zu erfüllen. Beispiele finden Sie auf der Seite „Anpassen“.