Obsługiwane formaty

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.