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. Weitere Informationen finden Sie im Abschnitt Beispielformate.

Container format Unterstützt Kommentare
MP4 JA
M4A JA
FMP4 JA
WebM JA
Matroska JA
MP3 JA Einige Streams sind nur mit einer konstanten Bitrate auffindbar.**
Ogg JA Mit Vorbis, Opus und FLAC
WAV JA
MPEG-TS JA
MPEG-PS JA
FLV JA Nicht suchbar*
ADTS (AAC) JA Nur suchbar mit konstanter Bitrate**
FLAC JA Verwendung der FLAC-Bibliothek oder des FLAC-Extraktors in der ExoPlayer-Bibliothek***
Logo: AMR JA Nur suchbar mit konstanter Bitrate**
JPEG-Foto mit Bewegtbild JA Nur der MP4-Inhalt wird extrahiert.

* Die Suche wird nicht unterstützt, da der Container keine Metadaten (z. B. einen Beispielindex) enthält, die ein Mediaplayer eine effiziente Suche ermöglicht. Wenn eine Suche erforderlich ist, empfehlen wir die Verwendung eines geeigneteren Containerformats.

** Diese Extraktoren haben FLAG_ENABLE_CONSTANT_BITRATE_SEEKING-Flags, die die ungefähre Suche unter Verwendung einer Annahme einer konstanten Bitrate ermöglichen. Diese Funktion ist nicht standardmäßig aktiviert. Die einfachste Möglichkeit, diese Funktion für alle Extraktoren zu aktivieren, die sie unterstützen, ist die Verwendung von DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, wie hier beschrieben.

*** Der Extrahierer der FLAC-Bibliothek gibt rohe Audiodaten aus, die vom Framework auf allen API-Ebenen verarbeitet werden können. Der FLAC-Extrahierenr der ExoPlayer-Bibliothek gibt FLAC-Audioframes aus und benötigt daher einen FLAC-Decoder (z. B. einen MediaCodec-Decoder, der FLAC verarbeitet (erforderlich ab API-Level 27) oder die FFmpeg-Bibliothek mit aktiviertem FLAC). Der DefaultExtractorsFactory verwendet den Erweiterungsextraktor, wenn die Anwendung mit der FLAC-Bibliothek erstellt wurde. Andernfalls wird der ExoPlayer-Bibliotheksextraktor verwendet.

MediaItem verwenden

Erstellen Sie zum Abspielen eines Progressive-Streams einen MediaItem mit dem Medien-URI und übergeben Sie ihn 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

Für weitere Anpassungsoptionen kannst du anstelle von MediaItem ein ProgressiveMediaSource erstellen und direkt zum Player führen.

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

ExoPlayer bietet Ihnen mehrere Möglichkeiten, die Wiedergabe an die Anforderungen Ihrer App anzupassen. Beispiele finden Sie auf der Seite „Anpassen“.