Progressiv

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

Containerformat Unterstützt Kommentare
MP4 JA
M4A JA
FMP4 JA
WebM JA
Matroska JA
MP3 JA Einige Streams können nur mit der Suche nach konstanter Bitrate angesteuert werden**
Ogg JA Enthält Vorbis, Opus und FLAC
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 Mit der FLAC-Bibliothek oder dem FLAC-Extractor in der ExoPlayer-Bibliothek***
AMR JA Nur mit Suchfunktion bei konstanter Bitrate anwendbar**

* Das Suchen wird nicht unterstützt, da der Container keine Metadaten (z. B. einen Sample-Index) bereitstellt, mit denen ein Mediaplayer eine effiziente Suche durchführen kann. Wenn ein Suchvorgang erforderlich ist, empfehlen wir die Verwendung eines geeigneteren Containerformats.

** Diese Extractor haben FLAG_ENABLE_CONSTANT_BITRATE_SEEKING-Flags, um eine ungefähre Suche unter der Annahme einer konstanten Bitrate zu ermöglichen. Diese Funktion ist standardmäßig nicht aktiviert. Am einfachsten aktivieren Sie diese Funktion für alle unterstützten Extraktoren mit DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, wie hier beschrieben.

*** Der Extractor der FLAC-Bibliothek gibt Rohaudio aus, das vom Framework auf allen API-Ebenen verarbeitet werden kann. Der FLAC-Extraktor der ExoPlayer-Bibliothek gibt 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). Die DefaultExtractorsFactory verwendet den 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 hast du mehrere Möglichkeiten, die Wiedergabe an die Anforderungen deiner App anzupassen. Beispiele finden Sie auf der Seite „Anpassen“.