Obsługiwane formaty

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 zawiera treści w co najmniej 2 formatach 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 opisano 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 w wielu formatach 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 dźwięku 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 ze standardem ISO/IEC 14496-30;
WebVTT TAK w formacie nieskompresowanym lub osadzonym w formacie FMP4 zgodnie ze standardem ISO/IEC 14496-30;
CEA-608 TAK osadzone w formacie FMP4, gdy są sygnalizowane za pomocą opisu dostępności SCTE;
CEA-708 TAK osadzone w formacie FMP4, gdy są sygnalizowane za pomocą opisu dostępności 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”.
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 integracji

SmoothStreaming

ExoPlayer obsługuje SmoothStreaming w ramach formatu 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óły 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 strumieni HLS wysokiej jakości, jak opisano tutaj.

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+ (schemat „cenc”) i 25+ (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
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 integracji

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 przy użyciu funkcji przesunięcia przy stałej szybkości 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 wyszukiwanie, 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óre mogą być obsługiwane przez framework na wszystkich poziomach interfejsu API. Wyodrętnik FLAC w bibliotece ExoPlayer wyprowadza ramki audio FLAC, dlatego wymaga dekodera FLAC (na przykład MediaCodecdekodera 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 strumieniem bitów 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 Android. 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 oprogramowania dla AV1, VP9, FLAC, Opus, FFmpeg, MIDI i IAMF.

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 integracji z bibliotekami zewnętrznymi, które mogą obsługiwać inne formaty, znajdziesz w artykule Biblioteki wczytywania obrazów.

Format obrazu Obsługiwane Uwagi
BMP TAK
GIF NIE Brak obsługi narzędzia Extractor
JPEG TAK
JPEG Motion Photo TAK Obsługa obrazów i filmów
JPEG Ultra HDR TAK W przypadku wersji Androida wcześniejszej niż 14 lub 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 statyczne*
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 przez platformę Android i urządzenie. 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 obsługujący 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.