Unterstützte Formate

Bei der Definition der von ExoPlayer unterstützten Formate ist zu beachten, dass „Medienformate“ auf mehreren Ebenen definiert sind. Von der niedrigsten bis zur höchsten Ebene sind dies folgende Möglichkeiten:

  • Das Format der einzelnen Mediensamples (z. B. ein Videoframe oder ein Audioframe). Das sind Beispielformate. Eine typische Videodatei enthält Medien in mindestens zwei Sample-Formaten: eines für Video (z. B. H.264) und eines für Audio (z. B. AAC).
  • Das Format des Containers, in dem sich die Medienbeispiele und die zugehörigen Metadaten befinden. Das sind Containerformate. Eine Mediendatei hat ein einzelnes Containerformat (z. B. MP4), das in der Regel durch die Dateiendung angegeben wird. Bei einigen reinen Audioformaten (z. B. MP3) können das Sample- und das Containerformat identisch sein.
  • Adaptive Streaming-Technologien wie DASH, SmoothStreaming und HLS Dies sind keine Medienformate im eigentlichen Sinne, aber es ist dennoch erforderlich, die Unterstützungsstufe von ExoPlayer zu definieren.

In den folgenden Abschnitten wird die Unterstützung von ExoPlayer auf den einzelnen Ebenen von der höchsten bis zur niedrigsten definiert. In den letzten beiden Abschnitten wird die Unterstützung für eigenständige Untertitelformate und die Wiedergabe von HDR-Videos beschrieben.

Adaptives Streaming

DASH

ExoPlayer unterstützt DASH mit mehreren Containerformaten. Medienstreams müssen demultiplext werden, d. h. Video, Audio und Text müssen im DASH-Manifest in separaten AdaptationSet-Elementen definiert werden. CEA-608 ist eine Ausnahme, wie in der folgenden Tabelle beschrieben. Die enthaltenen Audio- und Video-Sample-Formate müssen ebenfalls unterstützt werden. Weitere Informationen finden Sie im Abschnitt Sample-Formate.

Funktion Unterstützt Kommentare
Container
FMP4 JA Nur demultiplexierte Streams
WebM JA Nur demultiplexierte Streams
Matroska JA Nur demultiplexierte Streams
MPEG-TS NEIN Kein Support geplant
Untertitel
TTML JA Roh oder in FMP4 gemäß ISO/IEC 14496-30 eingebettet
WebVTT JA Roh oder in FMP4 gemäß ISO/IEC 14496-30 eingebettet
CEA-608 JA In FMP4 eingebettet, wenn sie mit SCTE-Beschreibungen für die Barrierefreiheit signalisiert werden
CEA-708 JA In FMP4 eingebettet, wenn sie mit SCTE-Beschreibungen für die Barrierefreiheit signalisiert werden
Metadaten
EMSG-Metadaten JA In FMP4 eingebettet
Inhaltsschutz
Widevine JA „cenc“-Schema: API 19 und höher; „cbcs“-Schema: API 25 und höher
PlayReady SL2000 JA Android TV, nur „cenc“-Schema
ClearKey JA API 21 und höher, nur „cenc“-Schema
Livewiedergabe
Regelmäßige Livewiedergabe JA
CMAF-Livewiedergabe mit extrem niedriger Latenz JA
Common Media Client Data (CMCD) JA Integrationsleitfaden

SmoothStreaming

ExoPlayer unterstützt SmoothStreaming mit dem FMP4-Containerformat. Medienstreams müssen demultiplext werden. Das bedeutet, dass Video, Audio und Text in separaten StreamIndex-Elementen im SmoothStreaming-Manifest definiert werden müssen. Außerdem müssen die enthaltenen Audio- und Video-Sample-Formate unterstützt werden. Weitere Informationen finden Sie im Abschnitt Sample-Formate.

Funktion Unterstützt Kommentare
Container
FMP4 JA Nur demultiplexierte Streams
Untertitel
TTML JA In FMP4 eingebettet
Inhaltsschutz
PlayReady SL2000 JA Nur Android TV
Livewiedergabe
Regelmäßige Livewiedergabe JA
Common Media Client Data (CMCD) JA Integrationsleitfaden

HLS

ExoPlayer unterstützt HLS mit mehreren Containerformaten. Außerdem müssen die enthaltenen Audio- und Video-Sample-Formate unterstützt werden. Weitere Informationen finden Sie im Abschnitt Sample-Formate. Wir empfehlen HLS-Inhaltsproduzenten dringend, HLS-Streams in hoher Qualität zu generieren, wie hier beschrieben.

Funktion Unterstützt Kommentare
Container
MPEG-TS JA
FMP4/CMAF JA
ADTS (AAC) JA
MP3 JA
Untertitel
CEA-608 JA
CEA-708 JA
WebVTT JA
Metadaten
ID3 JA
SCTE-35 NEIN
Inhaltsschutz
AES-128 JA
Beispiel AES-128 NEIN
Widevine JA API 19+ („cenc“-Schema) und 25+ („cbcs“-Schema)
PlayReady SL2000 JA Nur Android TV
Serversteuerung
Delta-Updates JA
Playlist-Neustart blockieren JA
Laden von Hinweisen zum Vorladen blockieren JA Außer für Bytebereiche mit nicht definierter Länge
Livewiedergabe
Regelmäßige Livewiedergabe JA
HLS mit niedriger Latenz (Apple) JA
HLS mit niedriger Latenz (Community) NEIN
Common Media Client Data (CMCD) JA Integrationsleitfaden

Progressive Containerformate

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 Bildcontainern 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 mit der Suche nach konstanter Bitrate angesteuert werden**
Ogg JA mit Vorbis, Opus und FLAC
WAV JA
MPEG-TS JA
MPEG-PS JA
FLV JA Nicht suchbar*
ADTS (AAC) JA Nur mit der Suche nach konstanter Bitrate suchbar**
FLAC JA Mit der FLAC-Bibliothek oder dem FLAC-Extractor in der ExoPlayer-Bibliothek***
AMR JA Nur mit der Suche nach konstanter Bitrate suchbar**

* 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 eine Suche 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-Extractor der ExoPlayer-Bibliothek gibt FLAC-Audioframes aus und benötigt daher einen FLAC-Decoder (z. B. einen MediaCodec-Decoder, der FLAC verarbeitet (ab API-Level 27 erforderlich) oder die FFmpeg-Bibliothek mit aktiviertem FLAC). Die DefaultExtractorsFactory verwendet den Erweiterungsextraktor, wenn die Anwendung mit der FLAC-Bibliothek erstellt wurde. Andernfalls wird der Extractor der ExoPlayer-Bibliothek verwendet.

RTSP

ExoPlayer unterstützt sowohl Live- als auch On-Demand-RTSP. Unten finden Sie eine Liste der unterstützten Beispielformate und Netzwerktypen.

Unterstützte Sample-Formate

  • H264 (die SDP-Medienbeschreibung muss SPS-/PPS-Daten im fmtp-Attribut für die Decoderinitialisierung enthalten).
  • AAC (mit ADTS-Bitstream)
  • AC3.

Unterstützte Netzwerktypen

  • RTP über UDP-Unicast (Multicast wird nicht unterstützt).
  • Interleaved RTSP, RTP over RTSP mit TCP.

Beispielformate

Standardmäßig verwendet ExoPlayer die Plattformdekoder von Android. Die unterstützten Sample-Formate hängen daher von der zugrunde liegenden Plattform und nicht von ExoPlayer ab. Unter Unterstützte Medienformate finden Sie Informationen zu Beispielformaten, die von Android-Geräten unterstützt werden. Hinweis: Einzelne Geräte unterstützen möglicherweise weitere Formate als die hier aufgeführten.

Neben den Plattformdekodern von Android kann ExoPlayer auch Software-Dekodierungserweiterungen nutzen. Sie müssen manuell erstellt und in Projekte aufgenommen werden, in denen sie verwendet werden sollen. Derzeit bieten wir Software-Dekodierungsbibliotheken für AV1, VP9, FLAC, Opus, FFmpeg, MIDI und IAMF an.

FFmpeg-Bibliothek

Die FFmpeg-Bibliothek unterstützt die Dekodierung verschiedener Audio-Stichprobenformate. Sie können beim Erstellen der Bibliothek auswählen, welche Decoder eingeschlossen werden sollen. Weitere Informationen finden Sie in der README.md der Bibliothek. In der folgenden Tabelle wird das Audio-Sample-Format dem entsprechenden FFmpeg-Decodernamen zugeordnet.

Beispielformat Decodername(n)
Vorbis vorbis
Opus opus
FLAC flac
ALAC alac
PCM μ-Law pcm_mulaw
PCM A-Law pcm_alaw
MP1, MP2, MP3 MP3
AMR-NB amrnb
AMR-WB amrwb
AAC AAC
AC-3 ac3
E-AC-3 eac3
DTS, DTS-HD dca
TrueHD mlp truehd

Bilder

ExoPlayer unterstützt die folgenden Bildformate. Unter Bibliotheken zum Laden von Bildern erfahren Sie, wie Sie externe Bibliotheken einbinden, die möglicherweise eine andere Reihe von Formaten unterstützen.

Bildformat Unterstützt Hinweise
BMP JA
GIF NEIN Keine Unterstützung für Extractor
JPEG JA
JPEG-Fotos mit bewegtem Motiv JA Standbilder und Videos werden unterstützt
JPEG Ultra HDR JA Rückfall auf SDR vor Android 14 oder auf Nicht-HDR-Displays
PNG JA
WebP JA
HEIF/HEIC JA
HEIC-Fotos mit Bewegtbild Teilweise Nur Standbilder werden unterstützt*
AVIF (ursprüngliche Variante) JA Nur unter Android 14 und höher decodiert

* Der Videoteil von HEIC-Fotos mit Bewegtbild kann mit MetadataRetriever abgerufen und als eigenständige Datei wiedergegeben werden.

Eigenständige Untertitelformate

ExoPlayer unterstützt eigenständige Untertiteldateien in verschiedenen Formaten. Untertiteldateien können wie auf der Seite „Medienelemente“ beschrieben per Sideload übertragen werden.

Container format Unterstützt MIME-Typ
WebVTT JA MimeTypes.TEXT_VTT
TTML / SMPTE-TT JA MimeTypes.APPLICATION_TTML
SubRip JA MimeTypes.APPLICATION_SUBRIP
SubStationAlpha (SSA/ASS) JA MimeTypes.TEXT_SSA

HDR-Videowiedergabe

ExoPlayer kann HDR-Videos (High Dynamic Range) aus verschiedenen Containern extrahieren, darunter Dolby Vision in MP4 und HDR10+ in Matroska/WebM. Das Dekodieren und Darstellen von HDR-Inhalten hängt von der Unterstützung durch die Android-Plattform und das Gerät ab. Unter HDR-Videowiedergabe erfährst du, wie du die HDR-Dekodierungs-/Anzeigefunktionen und Einschränkungen der HDR-Unterstützung in verschiedenen Android-Versionen prüfen kannst.

Bei der Wiedergabe eines HDR-Streams, für den die Unterstützung eines bestimmten Codec-Profils erforderlich ist, wird mit der Standardauswahl MediaCodec von ExoPlayer ein Decoder ausgewählt, der dieses Profil unterstützt (falls verfügbar), auch wenn ein anderer Decoder für denselben MIME-Typ, der dieses Profil nicht unterstützt, weiter oben in der Codec-Liste steht. Dies kann dazu führen, dass ein Software-Decoder ausgewählt wird, wenn der Stream die Fähigkeiten eines Hardware-Decoders für denselben MIME-Typ übersteigt.