Progressiv

Streams in den folgenden Containerformaten können direkt von ExoPlayer wiedergegeben werden. Die enthaltenen Audio- und Videosample-Formate müssen ebenfalls unterstützt werden (weitere Informationen finden Sie im Abschnitt Sample-Formate). Informationen zur Unterstützung von Bildcontainern und ‑formaten finden Sie unter Bilder.

Container format Unterstützt Kommentare
MP4 JA
M4A JA
FMP4 JA
WebM JA
Matroska JA
MP3 JA Bei einigen Streams ist die Suche nur mit konstanter Bitrate möglich**
Ogg JA Vorbis, Opus und FLAC
WAV JA
MPEG-TS JA
MPEG-PS JA
FLV JA Nicht suchbar*
ADTS (AAC) JA Nur mit Suche mit konstanter Bitrate möglich**
FLAC JA FLAC-Bibliothek oder FLAC-Extractor in der ExoPlayer-Bibliothek verwenden***
AMR JA Nur mit Suche mit konstanter Bitrate möglich**

* Das Suchen wird nicht unterstützt, da der Container keine Metadaten (z. B. einen Beispielindex) enthält, die es einem Mediaplayer ermöglichen, effizient zu suchen. Wenn die Suche erforderlich ist, empfehlen wir, ein geeigneteres Containerformat zu verwenden.

** Diese Extraktoren haben FLAG_ENABLE_CONSTANT_BITRATE_SEEKING-Flags, mit denen die ungefähre Suche unter der Annahme einer konstanten Bitrate aktiviert werden kann. Diese Funktion ist nicht standardmäßig aktiviert. Am einfachsten aktivieren Sie diese Funktion für alle Extraktoren, die sie unterstützen, indem Sie DefaultExtractorsFactory.setConstantBitrateSeekingEnabled verwenden, wie hier beschrieben.

*** Der Extractor der FLAC-Bibliothek gibt Rohaudio aus, die vom Framework auf allen API-Ebenen verarbeitet werden kann. Der FLAC-Extractor der ExoPlayer-Bibliothek gibt FLAC-Audio-Frames aus und setzt daher einen FLAC-Decoder voraus (z. B. einen MediaCodec-Decoder, der FLAC verarbeitet (ab API-Level 27 erforderlich), oder die FFmpeg-Bibliothek mit aktivierter FLAC-Unterstützung). Die DefaultExtractorsFactory verwendet den Erweiterungsextraktor, wenn die Anwendung mit der FLAC-Bibliothek erstellt wurde. Andernfalls wird der Extraktor der ExoPlayer-Bibliothek verwendet.

MediaItem verwenden

Wenn Sie einen progressiven Stream abspielen möchten, erstellen Sie ein MediaItem mit dem Media-URI und übergeben Sie es 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

Wenn Sie mehr Anpassungsoptionen benötigen, können Sie ein ProgressiveMediaSource erstellen und es anstelle eines MediaItem direkt an den Player ü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

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