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.