Podczas definiowania formatów obsługiwanych przez ExoPlayer należy pamiętać, że „formaty multimediów” są definiowane na wielu poziomach. Od najniższego do najwyższego:
- Format poszczególnych próbek multimediów (np. klatki wideo lub klatki dźwięku). Oto przykładowe formaty. Pamiętaj, że typowy plik wideo będzie zawierać co najmniej 2 formaty próbek: jeden dla wideo (np. H.264) i jeden dla dźwięku (np. AAC).
- Format kontenera zawierającego próbki multimediów i powiązane metadane. Są to formaty kontenera. Plik multimedialny ma jeden format kontenera (np. MP4), który jest zwykle wskazywany przez rozszerzenie pliku. Pamiętaj, że w przypadku niektórych formatów wyłącznie dźwiękowych (np. MP3) formaty próbki i kontenera mogą być takie same.
- technologie adaptacyjnego strumieniowego przesyłania danych, takie jak DASH, SmoothStreaming i HLS; Nie są to formaty multimediów, ale i tak trzeba określić poziom obsługi przez ExoPlayer.
W następnych sekcjach określono obsługę ExoPlayera na poszczególnych poziomach, od najwyższego do najniższego. Ostatnie 2 sekwencje opisują obsługę samodzielnych formatów napisów oraz odtwarzanie filmów w HDR.
strumieniowanie adaptacyjne,
DASH
ExoPlayer obsługuje DASH z wieloma formatami kontenera. Strumienie multimediów muszą być demuxowane, co oznacza, że film, dźwięk i tekst muszą być zdefiniowane w różnych elementach AdaptationSet
w pliku manifestu DASH (CEA-608 jest wyjątkiem, jak opisano w tabeli poniżej). Muszą być też obsługiwane formaty próbek audio i wideo (szczegóły znajdziesz w sekcji Formaty próbek).
Funkcja | Obsługiwane | Komentarze |
---|---|---|
Kontenery | ||
FMP4 | TAK | tylko demultipleksowane strumienie; |
WebM | TAK | tylko demultipleksowane strumienie; |
Matroska | TAK | tylko demultipleksowane strumienie; |
MPEG-TS | NIE | Brak zaplanowanej pomocy |
Napisy | ||
TTML | TAK | w formacie nieskompresowanym lub osadzonym w formacie FMP4 zgodnie z normą ISO/IEC 14496-30, |
WebVTT | TAK | w formacie nieskompresowanym lub osadzonym w formacie FMP4 zgodnie z normą ISO/IEC 14496-30, |
CEA-608 | TAK | osadzone w formacie FMP4, gdy zostanie wysłany sygnał za pomocą Descriptorów ułatwień dostępu SCTE; |
CEA-708 | TAK | osadzone w formacie FMP4, gdy zostanie wysłany sygnał za pomocą Descriptorów ułatwień dostępu SCTE; |
Metadane | ||
Metadane EMSG | TAK | Umieszczone w formacie FMP4 |
Ochrona treści | ||
Widevine | TAK | Schemat „cenc”: interfejs API w wersji 19 lub nowszej; schemat „cbcs”: interfejs API w wersji 25 lub nowszej |
PlayReady SL2000 | TAK | Android TV, tylko schemat „cenc” |
ClearKey | TAK | API 21+, tylko schemat „cenc”. |
Wstawianie reklam | ||
Odtwarzanie w wielu przedziałach czasu | TAK | |
Wstawianie reklam sterowane przez serwer (xlinks) | NIE | |
Reklamy IMA po stronie serwera i klienta | TAK | Przewodnik dotyczący osadzania reklam |
Odtwarzanie na żywo | ||
Odtwarzanie na żywo | TAK | |
Odtwarzanie na żywo z wykorzystaniem CMAF z bardzo małym opóźnieniem | TAK | |
Common Media Client Data(CMCD) | TAK | Przewodnik po integracji z CMCD |
SmoothStreaming
ExoPlayer obsługuje SmoothStreaming w formacie kontenera FMP4. Strumienie multimediów muszą zostać zdemuxowane, co oznacza, że wideo, dźwięk i tekst muszą być zdefiniowane w osobnych elementach StreamIndex w pliku manifestu SmoothStreaming. Muszą być też obsługiwane formaty próbek audio i wideo (szczegółowe informacje znajdziesz w sekcji Formaty próbek).
Funkcja | Obsługiwane | Komentarze |
---|---|---|
Kontenery | ||
FMP4 | TAK | tylko demultipleksowane strumienie; |
Napisy | ||
TTML | TAK | Umieszczone w formacie FMP4 |
Ochrona treści | ||
PlayReady SL2000 | TAK | Tylko Android TV |
Odtwarzanie na żywo | ||
Odtwarzanie na żywo | TAK | |
Common Media Client Data (CMCD) | TAK | Przewodnik integracji |
HLS
ExoPlayer obsługuje HLS w wielu formatach kontenera. Muszą być też obsługiwane formaty próbek audio i wideo (szczegóły znajdziesz w sekcji Formaty próbek). Gorąco zachęcamy twórców treści HLS do generowania transmisji HLS wysokiej jakości, jak opisano w tym poście na blogu.
Funkcja | Obsługiwane | Komentarze |
---|---|---|
Kontenery | ||
MPEG-TS | TAK | |
FMP4/CMAF | TAK | |
ADTS (AAC) | TAK | |
MP3 | TAK | |
Napisy | ||
CEA-608 | TAK | |
CEA-708 | TAK | |
WebVTT | TAK | |
Metadane | ||
ID3 | TAK | |
SCTE-35 | NIE | |
Ochrona treści | ||
AES-128 | TAK | |
Przykład AES-128 | NIE | |
Widevine | TAK | Interfejs API 19 i nowsze wersje (schemat „cenc”) oraz 25 i nowsze wersje (schemat „cbcs”) |
PlayReady SL2000 | TAK | Tylko Android TV |
Zarządzanie serwerem | ||
Aktualizacje delta | TAK | |
Blokowanie ponownego wczytywania playlisty | TAK | |
Blokowanie wczytywania wskazówek dotyczących wstępnego wczytywania | TAK | z wyjątkiem zakresów bajtów o nieokreślonej długości; |
Wstawianie reklam | ||
Wstawianie reklam sterowane przez serwer (reklamy pełnoekranowe) | Częściowo | Tylko VOD z X-ASSET-URI .
Transmisje na żywo i X-ASSET-LIST zostaną dodane później. |
Reklamy IMA po stronie serwera i klienta | TAK | Przewodnik dotyczący osadzania reklam |
Odtwarzanie na żywo | ||
Odtwarzanie na żywo | TAK | |
HLS o niskim opóźnieniu (Apple) | TAK | |
HLS o niskim opóźnieniu (wersja dla społeczności) | NIE | |
Common Media Client Data (CMCD) | TAK | Przewodnik po integracji z CMCD |
Formaty progresywnych kontenerów
Strumienie w tych formatach kontenera można odtwarzać bezpośrednio w ExoPlayerze. Muszą być też obsługiwane formaty próbek audio i wideo (szczegóły znajdziesz w sekcji Formaty próbek). Informacje o obsługiwanych formatach i kontenerach obrazów znajdziesz w artykule Obrazy.
Format kontenera | Obsługiwane | Komentarze |
---|---|---|
MP4 | TAK | |
M4A | TAK | |
FMP4 | TAK | |
WebM | TAK | |
Matroska | TAK | |
MP3 | TAK | Niektóre strumienie można przeskakiwać tylko za pomocą przeskakiwania z stałym bitratem** |
Ogg | TAK | zawierające Vorbis, Opus i FLAC; |
WAV | TAK | |
MPEG-TS | TAK | |
MPEG-PS | TAK | |
FLV | TAK | Niemożliwość przewijania* |
ADTS (AAC) | TAK | Możliwość przesunięcia tylko za pomocą przesunięcia o stałą szybkość transmisji bitów** |
FLAC | TAK | Korzystanie z biblioteki FLAC lub narzędzia do wyodrębniania FLAC w bibliotece ExoPlayer*** |
AMR | TAK | Możliwość przesunięcia tylko za pomocą przesunięcia o stałą szybkość transmisji bitów** |
* Przewijanie nie jest obsługiwane, ponieważ kontener nie udostępnia metadanych (np. indeksu próbek), które pozwoliłyby odtwarzaczowi skutecznie przewinąć film. Jeśli wymagane jest kodowanie, zalecamy użycie bardziej odpowiedniego formatu kontenera.
** Te ekstraktory mają flagi FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
, które umożliwiają przybliżone wyszukiwanie przy założeniu stałej szybkości transmisji danych. Ta funkcja nie jest domyślnie włączona. Najprostszym sposobem włączenia tej funkcji dla wszystkich ekstraktorów, które ją obsługują, jest użycie DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
, jak opisano tutaj.
*** Wyodrębniacz biblioteki FLAC generuje dane audio w postaci surowej, którą można przetwarzać za pomocą frameworka na wszystkich poziomach interfejsu API. Wyodrębniacz FLAC w bibliotece ExoPlayer wyprowadza ramki audio FLAC, dlatego wymaga dekodera FLAC (na przykład MediaCodec
dekodera obsługującego FLAC (wymagany od poziomu interfejsu API 27) lub biblioteki FFmpeg z włączonym FLAC). DefaultExtractorsFactory
używa ekstraktora rozszerzeń, jeśli aplikacja została utworzona za pomocą biblioteki FLAC.
W przeciwnym razie używa ekstraktora biblioteki ExoPlayer.
RTSP
ExoPlayer obsługuje RTSP na żywo i na żądanie. Obsługiwane formaty próbek i typy sieci znajdziesz poniżej.
Obsługiwane formaty próbek
- H.264 (opis multimediów SDP musi zawierać dane SPS/PPS w atrybucie fmtp na potrzeby inicjalizacji dekodera).
- AAC (z bitstrem ADTS).
- AC3.
Obsługiwane typy sieci
- RTP przez UDP unicast (multicast nie jest obsługiwany).
- Przeplatane RTSP, RTP przez RTSP za pomocą TCP.
Przykładowe formaty
Domyślnie ExoPlayer używa dekoderów platformy Androida. Dlatego obsługiwane formaty próbek zależą od platformy, a nie od ExoPlayera. Dokumentację na temat obsługiwanych formatów plików na urządzeniach z Androidem znajdziesz w sekcji Obsługiwane formaty multimediów. Pamiętaj, że niektóre urządzenia mogą obsługiwać dodatkowe formaty, które nie są wymienione.
Oprócz dekoderów platformy Android ExoPlayer może też korzystać z rozszerzeń dekoderów oprogramowania. Należy je utworzyć ręcznie i uwzględnić w projektach, w których mają być używane. Obecnie udostępniamy biblioteki dekoderów programowych dla AV1, VP9, FLAC, Opus, FFmpeg, MIDI, IAMF i MPEG-H.
Biblioteka FFmpeg
Biblioteka FFmpeg obsługuje dekodowanie różnych formatów próbek audio. Podczas kompilowania biblioteki możesz wybrać dekodery, które mają być uwzględnione. Informacje na ten temat znajdziesz w pliku README.md biblioteki. W poniższej tabeli znajdziesz mapowanie formatu próbki audio na nazwę dekodera FFmpeg.
Przykładowy format | Nazwa dekodera |
---|---|
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 |
Obrazy
ExoPlayer obsługuje te formaty obrazów: Więcej informacji o integrowaniu z bibliotekami zewnętrznymi, które mogą obsługiwać inny zestaw formatów, znajdziesz w artykule Biblioteki wczytywania obrazów.
Format obrazu | Obsługiwane | Uwagi |
---|---|---|
BMP | TAK | |
GIF | NIE | Brak obsługi ekstraktora |
JPEG | TAK | |
JPEG Motion Photo | TAK | Obsługa obrazów i filmów |
JPEG Ultra HDR | TAK | W przypadku Androida w wersji 14 lub starszej oraz wyświetlaczy bez HDR obraz jest konwertowany na SDR. |
PNG | TAK | |
WebP | TAK | |
HEIF/HEIC | TAK | |
Zdjęcie ruchome HEIC | Częściowo | Obsługiwane są tylko obrazy nieruchome* |
AVIF (wartość domyślna) | TAK | dekodowane tylko w Androidzie 14 lub nowszym, |
* Część wideo zdjęć z ruchu w formacie HEIC można uzyskać za pomocą narzędzia MetadataRetriever i odtworzyć jako samodzielny plik.
Samodzielne formaty napisów
ExoPlayer obsługuje samodzielne pliki z napisami w różnych formatach. Pliki z napisami można przesyłać w sposób opisany na stronie z treściami multimedialnymi.
Format kontenera | Obsługiwane | Typ MIME |
---|---|---|
WebVTT | TAK | MimeTypes.TEXT_VTT |
TTML / SMPTE-TT | TAK | MimeTypes.APPLICATION_TTML |
SubRip | TAK | MimeTypes.APPLICATION_SUBRIP |
SubStationAlpha (SSA/ASS) | TAK | MimeTypes.TEXT_SSA |
Odtwarzanie filmów HDR
ExoPlayer obsługuje wyodrębnianie filmów High Dynamic Range (HDR) w różnych kontenerach, w tym Dolby Vision w MP4 i HDR10+ w Matroska/WebM. Dekodowanie i wyświetlanie treści HDR zależy od obsługi platformy Android i urządzenia. Aby dowiedzieć się więcej o sprawdzaniu możliwości dekodowania i wyświetlania HDR oraz ograniczeniach obsługi HDR w różnych wersjach Androida, zapoznaj się z artykułem Odtwarzanie filmów HDR.
Podczas odtwarzania strumienia HDR, który wymaga obsługi określonego profilu kodeka, domyślny selektor MediaCodec
ExoPlayera wybierze dekoder, który obsługuje ten profil (jeśli jest dostępny), nawet jeśli inny dekoder dla tego samego typu MIME, który nie obsługuje tego profilu, znajduje się wyżej na liście kodeków. Może to spowodować wybór dekodera oprogramowania w przypadku strumienia, który przekracza możliwości dekodera sprzętowego dla tego samego typu MIME.