Unterstützte Formate

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

  • Das Format der einzelnen Media-Samples, z. B. ein Videobild oder ein Audiobild. Das sind Beispielformate. Eine typische Videodatei enthält Medien in mindestens zwei Beispielformaten: eines für Video (z. B. H.264) und eines für Audio (z. B. AAC).
  • Das Format des Containers, in dem sich die Media-Samples 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 Beispiel- und das Containerformat identisch sein.
  • Adaptive Streaming-Technologien wie DASH, SmoothStreaming und HLS. Das sind keine Medienformate an sich, aber es ist trotzdem erforderlich, zu definieren, welche Unterstützung ExoPlayer bietet.

In den folgenden Abschnitten wird die Unterstützung von ExoPlayer auf jeder Ebene beschrieben, von der höchsten bis zur niedrigsten. In den letzten beiden Abschnitten wird die Unterstützung für eigenständige Untertitelformate und die HDR-Videowiedergabe beschrieben.

Adaptives Streaming

DASH

ExoPlayer unterstützt DASH mit mehreren Containerformaten. Medienstreams müssen demuxt werden. Das bedeutet, dass Video, Audio und Text in separaten AdaptationSet-Elementen im DASH-Manifest definiert werden müssen (CEA-608 ist eine Ausnahme, wie in der Tabelle unten beschrieben). Die enthaltenen Audio- und Videosample-Formate müssen ebenfalls unterstützt werden (weitere Informationen finden Sie im Abschnitt Sample-Formate).

Funktion Unterstützt Kommentare
Container
FMP4 JA Nur demultiplexte Streams
WebM JA Nur demultiplexte Streams
Matroska JA Nur demultiplexte Streams
MPEG-TS NEIN Keine Unterstützung geplant
Untertitel
TTML JA Roh oder gemäß ISO/IEC 14496-30 in FMP4 eingebettet
WebVTT JA Roh oder gemäß ISO/IEC 14496-30 in FMP4 eingebettet
CEA-608 JA Eingebettet in FMP4, wenn dies über SCTE-Barrierefreiheitsdeskriptoren signalisiert wird
CEA-708 JA Eingebettet in FMP4, wenn dies über SCTE-Barrierefreiheitsdeskriptoren signalisiert wird
Metadaten
EMSG-Metadaten JA In FMP4 eingebettet
Inhaltsschutz
Widevine JA „cenc“-Schema: API 19+; „cbcs“-Schema: API 25+
PlayReady SL2000 JA Android TV, nur „cenc“-Schema
ClearKey JA API 21+, nur „cenc“-Schema
Anzeigenbereitstellung
Wiedergabe über mehrere Zeiträume hinweg JA
Servergesteuerte Anzeigenbereitstellung (xlinks) NEIN
Serverseitige und clientseitige IMA-Anzeigen JA Leitfaden für die Anzeigenbereitstellung
Livewiedergabe
Regelmäßige Live-Wiedergabe JA
CMAF-Livestreaming mit extrem niedriger Latenz JA
Common Media Client Data (CMCD) JA CMCD-Integrationsleitfaden

SmoothStreaming

ExoPlayer unterstützt SmoothStreaming mit dem FMP4-Containerformat. Medienstreams müssen demuxt werden. Das bedeutet, dass Video, Audio und Text in separaten StreamIndex-Elementen im SmoothStreaming-Manifest definiert werden müssen. Die enthaltenen Audio- und Videosample-Formate müssen ebenfalls unterstützt werden (weitere Informationen finden Sie im Abschnitt Sample-Formate).

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

HLS

ExoPlayer unterstützt HLS mit mehreren Containerformaten. Die enthaltenen Audio- und Videosample-Formate müssen ebenfalls unterstützt werden (weitere Informationen finden Sie im Abschnitt Sample-Formate). Wir empfehlen HLS-Content-Produzenten dringend, hochwertige HLS-Streams zu erstellen, wie in diesem Blogpost 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
Sample-AES-128 NEIN
Widevine JA API 19+ („cenc“-Schema) und 25+ („cbcs“-Schema)
PlayReady SL2000 JA Nur Android TV
Serversteuerung
Delta-Updates JA
Neuladen von Playlists blockieren JA
Laden von Preload-Hinweisen blockieren JA Außer für Byteranges mit undefinierten Längen
Anzeigenbereitstellung
Servergesteuerte Anzeigenbereitstellung (Interstitials) Teilweise Nur VOD mit X-ASSET-URI. Livestreams und X-ASSET-LIST werden später hinzugefügt.
Serverseitige und clientseitige IMA-Anzeigen JA Leitfaden für die Anzeigenbereitstellung
Livewiedergabe
Regelmäßige Live-Wiedergabe JA
HLS mit niedriger Latenz (Apple) JA
HLS mit niedriger Latenz (Community) NEIN
Common Media Client Data CMCD JA CMCD-Integrationsleitfaden

Progressive Containerformate

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 Mit 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 Extraktor 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.

RTSP

ExoPlayer unterstützt sowohl Live- als auch On-Demand-RTSP. Unterstützte Beispielformate und Netzwerktypen sind unten aufgeführt.

Unterstützte Beispielformate

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

Unterstützte Netzwerktypen

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

Beispielformate

Standardmäßig verwendet ExoPlayer die Plattformdecoder von Android. Die unterstützten Beispielformate hängen daher von der zugrunde liegenden Plattform und nicht von ExoPlayer ab. Informationen zu den von Android-Geräten unterstützten Beispielformaten finden Sie unter Unterstützte Medienformate. Hinweis: Einzelne Geräte unterstützen möglicherweise zusätzliche Formate, die hier nicht aufgeführt sind.

Zusätzlich zu den Plattformdecodern von Android kann ExoPlayer auch Softwaredecoder-Erweiterungen verwenden. Sie müssen manuell erstellt und in Projekte eingebunden werden, in denen sie verwendet werden sollen. Derzeit bieten wir Software-Decoderbibliotheken für AV1, VP9, FLAC, Opus, FFmpeg, MIDI, IAMF und MPEG-H an.

FFmpeg-Bibliothek

Die FFmpeg-Bibliothek unterstützt das Decodieren verschiedener Audiobeispielformate. Sie können auswählen, welche Decoder beim Erstellen der Bibliothek enthalten sein sollen. Weitere Informationen finden Sie in der README.md der Bibliothek. In der folgenden Tabelle wird das Audiobeispielformat dem entsprechenden FFmpeg-Decodernamen zugeordnet.

Beispielformat Decoder-Name(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 Unterstützung für andere Formate bieten.

Bildformat Unterstützt Hinweise
BMP JA
GIF NEIN Keine Unterstützung für Extractor
JPEG JA
JPEG-Bewegungsfoto JA Standbilder und Videos werden unterstützt
JPEG Ultra HDR JA SDR-Fallback vor Android 14 oder auf Nicht-HDR-Displays
PNG JA
WebP JA
HEIF/HEIC JA
HEIC-Foto mit Bewegtbild JA
AVIF (Baseline) JA Nur auf Geräten mit Android 14 oder höher decodiert

Eigenständige Untertitelformate

ExoPlayer unterstützt eigenständige Untertiteldateien in verschiedenen Formaten. Untertiteldateien können wie auf der Seite „Medienelemente“ beschrieben per Sideloading geladen 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 Decodieren und Anzeigen von HDR-Inhalten hängt von der Unterstützung durch die Android-Plattform und das Gerät ab. Informationen zum Prüfen der HDR-Decodierungs- und ‑Anzeigefunktionen sowie zu Einschränkungen der HDR-Unterstützung in verschiedenen Android-Versionen finden Sie unter HDR-Videowiedergabe.

Wenn ein HDR-Stream wiedergegeben wird, der die Unterstützung für ein bestimmtes Codec-Profil erfordert, wählt die Standardauswahl MediaCodec von ExoPlayer einen Decoder aus, 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 Softwaredecoder ausgewählt wird, wenn der Stream die Möglichkeiten eines Hardwaredecoders für denselben MIME-Typ übersteigt.