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“.