Przy definiowaniu formatów obsługiwanych przez ExoPlayer należy pamiętać, że „formaty multimediów” są zdefiniowane na wielu poziomach. Oto te wyniki (od najniższego do najwyższego poziomu):
- Format poszczególnych próbek multimediów (np. klatka filmu lub dźwięku). Oto przykładowe formaty. Typowy plik wideo zawiera multimedia w co najmniej 2 formatach: jeden dla wideo (np. H.264) i drugi dla dźwięku (np. AAC).
- Format kontenera, w którym znajdują się próbki multimediów i powiązane z nimi metadane. Są to formaty kontenerów. Plik multimedialny ma jeden format kontenera (np. MP4), którym często używa się rozszerzenia pliku. Pamiętaj, że w przypadku niektórych formatów zawierających tylko dźwięk (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 jako takie, ale nadal konieczne jest określenie poziomu obsługi, jaką zapewnia ExoPlayer.
Poniższe sekcje określają obsługę odtwarzacza ExoPlayer na poszczególnych poziomach – od najwyższego do najniższego. Dwie ostatnie sekcje opisują obsługę samodzielnych formatów napisów i odtwarzanie filmów w trybie HDR.
Adaptacyjne przesyłanie strumieniowe
DASH
ExoPlayer obsługuje DASH z wieloma formatami kontenerów. Strumienie multimediów muszą być demuksowane, co oznacza, że wideo, dźwięk i tekst muszą być zdefiniowane w odrębnych elementach AdaptationSet
w pliku manifestu DASH (wyjątek CEA-608 jest opisany w tabeli poniżej). Muszą być też obsługiwane przykładowe formaty audio i wideo (szczegóły znajdziesz w sekcji przykładowe formaty).
Cecha | Obsługiwane | Komentarze |
---|---|---|
Kontenery | ||
FMP4 | TAK | Tylko zdecentralizowane strumienie |
WebM | TAK | Tylko zdecentralizowane strumienie |
Matroška | TAK | Tylko zdecentralizowane strumienie |
MPEG-TS | NIE | Nie zaplanowano pomocy |
Napisy | ||
TTML | TAK | Nieprzetworzony lub umieszczony w FMP4 zgodnie z normą ISO/IEC 14496-30 |
WebVTT | TAK | Nieprzetworzony lub umieszczony w FMP4 zgodnie z normą ISO/IEC 14496-30 |
CEA-608 | TAK | Umieszczony w FMP4 przy sygnalizowaniu za pomocą deskryptorów SCTE Accessibility |
CEA-708 | TAK | Umieszczony w FMP4 przy sygnalizowaniu za pomocą deskryptorów SCTE Accessibility |
Metadane | ||
Metadane EMSG | TAK | Umieszczone w FMP4 |
Ochrona treści | ||
Widevine | TAK | Schemat „cenc”: API 19+; schemat „cbcs”: API 25+ |
PlayReady SL2000 | TAK | Android TV, tylko schemat „cenc” |
ClearKey | TAK | API 21+, tylko schemat „cenc” |
Odtwarzanie na żywo | ||
Zwykłe odtwarzanie na żywo | TAK | |
Odtwarzanie na żywo w CMAF o bardzo małym opóźnieniu | TAK | |
Dane klienta Common Media Client Data (CMCD) | TAK | Przewodnik po integracji |
Płynne strumieniowanie
ExoPlayer obsługuje SmoothStreaming w formacie kontenera FMP4. Strumienie multimediów muszą być zdemiksowane, co oznacza, że wideo, dźwięk i tekst muszą być zdefiniowane w odrębnych elementach StreamIndex w pliku manifestu SmoothStreaming. Muszą być też obsługiwane przykładowe formaty audio i wideo (szczegóły znajdziesz w sekcji przykładowe formaty).
Cecha | Obsługiwane | Komentarze |
---|---|---|
Kontenery | ||
FMP4 | TAK | Tylko zdecentralizowane strumienie |
Napisy | ||
TTML | TAK | Umieszczone w FMP4 |
Ochrona treści | ||
PlayReady SL2000 | TAK | Tylko Android TV |
Odtwarzanie na żywo | ||
Zwykłe odtwarzanie na żywo | TAK | |
Dane klienta Common Media Client Data (CMCD) | TAK | Przewodnik po integracji |
HLS
ExoPlayer obsługuje HLS z wieloma formatami kontenerów. Muszą być też obsługiwane przykładowe formaty audio i wideo (szczegóły znajdziesz w sekcji przykładowe formaty). Zdecydowanie zachęcamy producentów treści HLS do generowania wysokiej jakości strumieni HLS, jak opisano tutaj.
Cecha | 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 | ||
Identyfikator 3 | TAK | |
SCTE-35 | NIE | |
Ochrona treści | ||
AES-128 | TAK | |
Przykład AES-128 | NIE | |
Widevine | TAK | API 19+ („schemat „cenc”) i 25+ („cbcs”) |
PlayReady SL2000 | TAK | Tylko Android TV |
Kontrola serwera | ||
Aktualizacje delta | TAK | |
Blokowanie ponownego wczytywania playlisty | TAK | |
Blokowanie wczytywania wskazówek dotyczących wstępnego wczytywania | TAK | Oprócz zakresów bajtów o nieokreślonej długości |
Odtwarzanie na żywo | ||
Zwykłe odtwarzanie na żywo | TAK | |
HLS z krótkim czasem oczekiwania (Apple) | TAK | |
HLS z małym opóźnieniem (społeczność) | NIE | |
Dane klienta Common Media Client Data (CMCD) | TAK | Przewodnik po integracji |
Progresywne formaty kontenerów
Strumienie w poniższych formatach kontenerów mogą być odtwarzane bezpośrednio przez ExoPlayer. Zawarte w nim treści muszą być też obsługiwane w formatach przykładowych audio i wideo (szczegóły znajdziesz w sekcji przykładowe formaty).
Format kontenera | Obsługiwane | Komentarze |
---|---|---|
MP4 | TAK | |
M4A | TAK | |
FMP4 | TAK | |
WebM | TAK | |
Matroška | TAK | |
MP3 | TAK | Niektóre transmisje można wyszukiwać tylko ze stałą szybkością transmisji bitów** |
Ogg | TAK | Zawiera Vorbis, Opus i FLAC |
WAV | TAK | |
MPEG-TS | TAK | |
MPEG-PS | TAK | |
FLV | TAK | Nie można przewijać* |
ADTS (AAC) | TAK | Dostępne tylko przy przewijaniu ze stałą szybkością transmisji** |
FLAC | TAK | Korzystanie z biblioteki FLAC lub wyodrębniania plików FLAC w bibliotece ExoPlayer*** |
AMR | TAK | Dostępne tylko przy przewijaniu ze stałą szybkością transmisji** |
Zdjęcie ruchome JPEG | TAK | Wyodrębniana jest tylko treść w formacie MP4 |
* Wyszukiwanie nie jest obsługiwane, ponieważ kontener nie zawiera metadanych (np. przykładowego indeksu), które umożliwiają odtwarzaczowi multimediów skuteczne wykonanie wyszukiwania. Jeśli wyszukiwanie jest wymagane, zalecamy użycie bardziej odpowiedniego formatu kontenera.
** Te moduły wyodrębniania danych mają flagi FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
, które umożliwiają przybliżone przewijanie z założeniem stałej szybkości transmisji bitów. Ta funkcja jest domyślnie wyłączona. Najprostszym sposobem włączenia tej funkcji we wszystkich modułach wyodrębniania, które ją obsługują, jest użycie DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
zgodnie z opisem tutaj.
*** Ekstraktor FLAC generuje nieprzetworzony dźwięk, który może być obsługiwany przez platformę na wszystkich poziomach interfejsu API. Ekstraktor plików FLAC z biblioteki ExoPlayer generuje klatki audio FLAC, więc korzysta z dekodera plików FLAC (np. dekodera MediaCodec
, który obsługuje pliki FLAC (wymagane w przypadku interfejsu API na poziomie 27), lub biblioteki FFmpeg z włączonym formatem FLAC). Jeśli aplikacja została skompilowana przy użyciu biblioteki FLAC, DefaultExtractorsFactory
używa modułu wyodrębniania rozszerzeń.
W przeciwnym razie używa programu wyodrębniania biblioteki ExoPlayer.
RTSP
ExoPlayer obsługuje protokół RTSP zarówno na żywo, jak i na żądanie. Poniżej znajdziesz obsługiwane przykładowe formaty i typy sieci.
Obsługiwane przykładowe formaty
- H264 (aby inicjowanie dekodera opis mediów SDP musi zawierać dane SPS/PPS w atrybucie fmtp).
- AAC (ze strumieniem bitowym ADTS).
- AC3.
Obsługiwane typy sieci
- RTP przez pojedynek UDP (emisja grupowa nie jest obsługiwana).
- Przeplatany protokół RTSP, RTP przez RTSP przy użyciu TCP.
Przykładowe formaty
Domyślnie ExoPlayer używa dekoderów platformy Androida. Z tego powodu obsługiwane formaty zależą od platformy, na której działa baza, a nie od odtwarzacza ExoPlayer. W sekcji Obsługiwane formaty multimediów znajdziesz dokumentację na temat przykładowych formatów obsługiwanych przez urządzenia z Androidem. Pamiętaj, że poszczególne urządzenia mogą obsługiwać dodatkowe formaty oprócz tych wymienionych na liście.
Oprócz dekoderów platformy Androida, ExoPlayer może też korzystać z rozszerzeń dekoderów oprogramowania. Należy je tworzyć ręcznie i uwzględniać w projektach, w których mają być używane. Obecnie udostępniamy biblioteki dekoderów oprogramowania do systemów AV1, VP9, FLAC, Opus i FFmpeg.
Biblioteka FFmpeg
Biblioteka FFmpeg obsługuje różne formaty próbek audio. Możesz wybrać dekodery, które chcesz uwzględnić podczas tworzenia biblioteki, zgodnie z opisem w pliku README.md biblioteki. W tabeli poniżej znajdziesz mapowanie z formatu przykładowego dźwięku na odpowiednią nazwę dekodera FFmpeg.
Przykładowy format | Nazwy dekoderów |
---|---|
Vorbis | Vorbis |
Opus | Opus |
FLAC | Flac |
kod ALAC | Alac |
Prawo PCM μ- | pcm_mulaw |
PCM A-prawo | 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 |
Samodzielne formaty napisów
ExoPlayer obsługuje samodzielne pliki napisów w różnych formatach. Pliki napisów można przesyłać z innego urządzenia w sposób opisany na stronie elementów multimedialnych.
Format kontenera | Obsługiwane | Typ MIME |
---|---|---|
WebVTT | TAK | Typy MIME.TEXT_VTT |
TTML / SMPTE-TT | TAK | Typy MIME.APPLICATION_TTML |
SubRip | TAK | Typy MIME.APPLICATION_SUBRIP |
PodStation Alfa (SSA/ASS) | TAK | Typy MIME.TEXT_SSA |
Odtwarzanie filmów w jakości HDR
ExoPlayer obsługuje wyodrębnianie filmów o wysokim zakresie dynamiki (HDR) w różnych kontenerach, w tym Dolby Vision w formacie MP4 i HDR10+ w Matroska/WebM. Dekodowanie i wyświetlanie treści HDR wymaga obsługi platformy i urządzenia z Androidem. W sekcji Odtwarzanie filmów w HDR znajdziesz informacje o sprawdzaniu możliwości dekodowania/wyświetlacza HDR oraz o ograniczeniach obsługi HDR w różnych wersjach Androida.
Podczas odtwarzania strumienia HDR, który wymaga obsługi określonego profilu kodeka, domyślny selektor MediaCodec
w ExoPlayer wybiera dekoder, który obsługuje ten profil (jeśli jest dostępny), nawet jeśli na wyższej pozycji na liście kodeków znajdzie się inny dekoder tego samego typu MIME, który nie obsługuje danego profilu. Może to spowodować wybór dekodera programowego, gdy strumień przekracza możliwości dekodera sprzętowego dla tego samego typu MIME.