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.