Wenn Sie die von ExoPlayer unterstützten Formate definieren, müssen Sie beachten, dass Medienformate auf mehreren Ebenen definiert werden. Von der untersten bis zur höchsten Ebene sind das:
- Das Format der einzelnen Medienproben (z. B. ein Video- oder Audioframe). Dies sind Beispielformate. Beachten Sie, dass eine typische Videodatei Medien in mindestens zwei Beispielformaten enthält: eines für Video (z. B. H.264) und eines für Audio (z. B. AAC).
- Das Format des Containers, der die Medienproben und die zugehörigen Metadaten enthält. Dies sind Containerformate. Eine Mediendatei hat ein einzelnes Containerformat (z. B. MP4), was häufig durch die Dateiendung angegeben wird. Bei einigen Nur-Audio-Formaten (z. B. MP3) können die Beispiel- und Containerformate identisch sein.
- Adaptive Streamingtechnologien wie DASH, SmoothStreaming und HLS. Dies sind keine Medienformate als solche. Sie müssen aber festlegen, welche Unterstützung ExoPlayer bietet.
In den folgenden Abschnitten wird die ExoPlayer-Unterstützung auf den einzelnen Stufen von der höchsten bis zur niedrigsten Stufe definiert. In den letzten beiden Abschnitten wird die Unterstützung für eigenständige Untertitelformate und die HDR-Videowiedergabe beschrieben.
Adaptives Streaming
DASHBOARD
ExoPlayer unterstützt DASH mit mehreren Containerformaten. Medienstreams müssen entnommen werden. Das heißt, Video, Audio und Text müssen im DASH-Manifest in separaten AdaptationSet
-Elementen definiert sein. CEA-608 ist eine Ausnahme, wie in der Tabelle unten beschrieben. Die enthaltenen Audio- und Video-Beispielformate müssen ebenfalls unterstützt werden. Weitere Informationen finden Sie im Abschnitt Beispielformate.
Funktion | Unterstützt | Kommentare |
---|---|---|
Container | ||
FMP4 | JA | Nur demuxtisierte Streams |
WebM | JA | Nur demuxtisierte Streams |
Matroska | JA | Nur demuxtisierte Streams |
MPEG-TS | NEIN | Kein Support geplant |
Untertitel | ||
TTML | JA | Unbearbeitet oder gemäß ISO/IEC 14496-30 in FMP4 eingebettet |
WebVTT | JA | Unbearbeitet oder gemäß ISO/IEC 14496-30 in FMP4 eingebettet |
CEA-608 | JA | In FMP4 eingebettet, wenn SCTE-Deskriptoren für die Barrierefreiheit verwendet werden |
CEA-708 | JA | In FMP4 eingebettet, wenn SCTE-Deskriptoren für die Barrierefreiheit verwendet werden |
Metadaten | ||
EMSG-Metadaten | JA | Eingebettet in FMP4 |
Inhaltsschutz | ||
Widevine | JA | Schema „cenc“: API 19+; „cbcs“-Schema: API 25+ |
PlayReady SL2000 | JA | Android TV, nur „cenc“-Schema |
Löschschlüssel | JA | API 21+, nur "cenc"-Schema |
Live-Wiedergabe | ||
Regelmäßige Livewiedergabe | JA | |
CMAF-Live-Wiedergabe mit extrem niedriger Latenz | JA | |
Common Media Client Data (CMCD) | JA | Integrationsleitfaden |
SmoothStreaming
ExoPlayer unterstützt SmoothStreaming mit dem Containerformat FMP4. Medienstreams müssen aufgeteilt werden. Das bedeutet, dass Video, Audio und Text in separaten StreamIndex-Elementen im SmoothStreaming-Manifest definiert sein müssen. Die enthaltenen Audio- und Video-Beispielformate müssen ebenfalls unterstützt werden. Weitere Informationen finden Sie im Abschnitt Beispielformate.
Funktion | Unterstützt | Kommentare |
---|---|---|
Container | ||
FMP4 | JA | Nur demuxtisierte Streams |
Untertitel | ||
TTML | JA | Eingebettet in FMP4 |
Inhaltsschutz | ||
PlayReady SL2000 | JA | Nur Android TV |
Live-Wiedergabe | ||
Regelmäßige Livewiedergabe | JA | |
Common Media Client Data (CMCD) | JA | Integrationsleitfaden |
HLS
ExoPlayer unterstützt HLS mit mehreren Containerformaten. Die enthaltenen Audio- und Video-Beispielformate müssen ebenfalls unterstützt werden. Weitere Informationen finden Sie im Abschnitt Beispielformate. Wir empfehlen Erstellern von HLS-Inhalten dringend, HLS-Streams 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-Aktualisierungen | JA | |
Aktualisieren der Playlist wird blockiert | JA | |
Laden von Vorabladehinweisen blockieren | JA | Mit Ausnahme von Bytebereichen mit nicht definierten Längen |
Live-Wiedergabe | ||
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-Beispielformate müssen ebenfalls unterstützt werden. Weitere Informationen finden Sie im Abschnitt Beispielformate.
Container format | Unterstützt | Kommentare |
---|---|---|
MP4 | JA | |
M4A | JA | |
FMP4 | JA | |
WebM | JA | |
Matroska | JA | |
MP3 | JA | Einige Streams sind nur mit einer konstanten Bitrate auffindbar.** |
Ogg | JA | Mit Vorbis, Opus und FLAC |
WAV | JA | |
MPEG-TS | JA | |
MPEG-PS | JA | |
FLV | JA | Nicht suchbar* |
ADTS (AAC) | JA | Nur suchbar mit konstanter Bitrate** |
FLAC | JA | Verwendung der FLAC-Bibliothek oder des FLAC-Extraktors in der ExoPlayer-Bibliothek*** |
Logo: AMR | JA | Nur suchbar mit konstanter Bitrate** |
JPEG-Foto mit Bewegtbild | JA | Nur der MP4-Inhalt wird extrahiert. |
* Die Suche wird nicht unterstützt, da der Container keine Metadaten (z. B. einen Beispielindex) enthält, die ein Mediaplayer eine effiziente Suche ermöglicht. Wenn eine Suche erforderlich ist, empfehlen wir die Verwendung eines geeigneteren Containerformats.
** Diese Extraktoren haben FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
-Flags, die die ungefähre Suche unter Verwendung einer Annahme einer konstanten Bitrate ermöglichen. Diese Funktion ist nicht standardmäßig aktiviert. Die einfachste Möglichkeit, diese Funktion für alle Extraktoren zu aktivieren, die sie unterstützen, ist die Verwendung von DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
, wie hier beschrieben.
*** Der Extrahierer der FLAC-Bibliothek gibt rohe Audiodaten aus, die vom Framework auf allen API-Ebenen verarbeitet werden können. Der FLAC-Extrahierenr der ExoPlayer-Bibliothek gibt FLAC-Audioframes aus und benötigt daher einen FLAC-Decoder (z. B. einen MediaCodec
-Decoder, der FLAC verarbeitet (erforderlich ab API-Level 27) oder die FFmpeg-Bibliothek mit aktiviertem FLAC). Der DefaultExtractorsFactory
verwendet den Erweiterungsextraktor, wenn die Anwendung mit der FLAC-Bibliothek erstellt wurde.
Andernfalls wird der ExoPlayer-Bibliotheksextraktor 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 Beschreibung der SDP-Medien muss SPS/PPS-Daten im duxp-Attribut für die Decodierer-Initialisierung enthalten)
- AAC (mit ADTS-Bitstream).
- AC3
Unterstützte Netzwerktypen
- RTP über UDP-Unicast (Multicast wird nicht unterstützt).
- Verschränktes RTSP, RTP über RTSP mit TCP.
Beispielformate
Standardmäßig verwendet ExoPlayer die Plattformdecoder von Android. Daher hängen die unterstützten Beispielformate von der zugrunde liegenden Plattform und nicht von ExoPlayer ab. Weitere Informationen zu Beispielformaten, die von Android-Geräten unterstützt werden, finden Sie unter Unterstützte Medienformate. Einzelne Geräte können zusätzliche Formate unterstützen.
Zusätzlich zu den Decodern der Android-Plattform kann ExoPlayer auch Software-Decoder-Erweiterungen nutzen. Sie müssen manuell erstellt und in Projekte einbezogen werden, in denen sie verwendet werden sollen. Wir bieten derzeit Software-Decodierer-Bibliotheken für AV1, VP9, FLAC, Opus und FFmpeg an.
FFmpeg-Bibliothek
Die FFmpeg-Bibliothek unterstützt das Decodieren verschiedener Audiobeispielformate. Sie können auswählen, welche Decoder beim Erstellen der Bibliothek verwendet werden sollen. Informationen hierzu finden Sie in der Datei README.md der Bibliothek. Die folgende Tabelle enthält eine Zuordnung vom Audiobeispielformat zum entsprechenden FFmpeg-Decodernamen.
Beispielformat | Decoder-Name(n) |
---|---|
Vorbis | Vorbis |
Opus | Opus |
FLAC | FLAC |
Logo: ALAC | AAC |
PCM-μ-Gesetz | pcm_mulaw |
PCM A-Gesetz | pcm_alaw |
MP1, MP2, MP3 | MP3 |
AMR-NB | Amrnb |
AMR-WB | Amrwb |
AAC | AAC |
AC-3 | Ac3 |
AC-3 | EAC3 |
DTS, DTS-HD | DCA |
TrueHD | MPP TrueHD |
Eigenständige Untertitelformate
ExoPlayer unterstützt eigenständige Untertiteldateien in einer Vielzahl von Formaten. Untertiteldateien können wie auf der Seite „Medienelemente“ beschrieben per Sideload übertragen werden.
Container format | Unterstützt | MIME-Typ |
---|---|---|
WebVTT | JA | MIME-Typen.TEXT_VTT |
TTML / SMPTE-TT | JA | MimeTypes.APPLICATION_TTML |
SubRip | JA | MIME-Typen.APPLICATION_SUBRIP |
SubStationAlpha (SSA/ASS) | JA | MIME-TypenTEXT_SSA |
HDR-Videowiedergabe
ExoPlayer extrahiert das HDR-Video (High Dynamic Range) in verschiedenen Containern, darunter Dolby Vision in MP4 und HDR10+ in Matroska/WebM. Das Decodieren und Anzeigen von HDR-Inhalten hängt davon ab, ob die Android-Plattform und das Android-Gerät unterstützt werden. Unter HDR-Videowiedergabe erfahren Sie, ob Sie die HDR-Decodierungs-/-Anzeigefunktionen und die Einschränkungen der HDR-Unterstützung in verschiedenen Android-Versionen prüfen können.
Bei der Wiedergabe eines HDR-Streams, der 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 erscheint. Dies kann dazu führen, dass ein Softwaredecoder ausgewählt wird, wenn der Stream die Funktionen eines Hardwaredecoders für denselben MIME-Typ überschreitet.