Podczas definiowania formatów obsługiwanych przez ExoPlayer trzeba pamiętać, „formaty multimediów” są definiowane na wielu poziomach. Od najniższego do najwyższe wartości:
- Format poszczególnych próbek multimediów (np. ramka filmu lub klatki). dźwięku). To przykładowe formaty. Pamiętaj, że typowy plik wideo zawierać multimedia w co najmniej dwóch przykładowych formatach; jeden dla wideo (np. H.264) oraz jeden dla dźwięku (np. AAC).
- Format kontenera zawierającego próbki multimediów i powiązane metadanych. Są to formaty kontenerów. Plik multimedialny ma 1 kontener (np. MP4), który jest często określany przez rozszerzenie pliku. Notatka że w przypadku niektórych formatów tylko audio (np. MP3) formaty próbek i kontenerów może być taka sama.
- Adaptacyjne technologie strumieniowania, takie jak DASH, SmoothStreaming i HLS. Te nie są formatami multimedialnymi, ale i tak trzeba określić, poziomu wsparcia zapewnianego przez ExoPlayer.
W poniższych sekcjach opisano obsługę odtwarzacza ExoPlayer na każdym poziomie, od najwyższego do najniższego najniższą. W dwóch ostatnich sekcjach opisano obsługę samodzielnych formatów napisów. i odtwarzania filmów HDR.
Adaptacyjne strumieniowanie
DASH
ExoPlayer obsługuje DASH z wieloma formatami kontenerów. Strumienie multimediów muszą być:
demuksowany, co oznacza, że wideo, dźwięk i tekst muszą być zdefiniowane osobno.
elementów AdaptationSet
w manifeście DASH (CEA-608 jest wyjątkiem
opisane w tabeli poniżej). Zawarte w nim przykładowe formaty dźwięku i wideo muszą
również być obsługiwane (zobacz
przykładowe formaty).
Funkcja | Obsługiwane | Komentarze |
---|---|---|
Kontenery | ||
protokół FMP4 | TAK | Tylko strumienie zdemonstrowane |
WebM | TAK | Tylko strumienie zdemonstrowane |
Matroska | TAK | Tylko strumienie zdemonstrowane |
MPEG-TS | NIE | Pomoc nie jest planowana |
Napisy | ||
TTML, | TAK | Nieprzetworzone lub umieszczone w FMP4 zgodnie z normą ISO/IEC 14496-30 |
WebVTT | TAK | Nieprzetworzone lub umieszczone w FMP4 zgodnie z normą ISO/IEC 14496-30 |
CEA-608 | TAK | Umieszczony w FMP4 po sygnalizowaniu za pomocą deskryptorów ułatwień dostępu SCTE |
CEA-708 | TAK | Umieszczony w FMP4 po sygnalizowaniu za pomocą deskryptorów ułatwień dostępu SCTE |
Metadane | ||
Metadane EMSG | TAK | Umieszczone w FMP4 |
Ochrona treści | ||
Widevine | TAK | „cenc” schemat: API 19+; „cbcs” schemat: API w wersji 25+ |
PlayReady SL2000 | TAK | Android TV, „cenc” tylko schemat |
Wyczyść klucz | TAK | API 21+, „cenc” tylko schemat |
Odtwarzanie na żywo | ||
Standardowe odtwarzanie na żywo | TAK | |
Odtwarzanie na żywo w CMAF z bardzo małym opóźnieniem | TAK | |
Common Media Client Data (CMCD). | TAK | Przewodnik po integracji |
Płynne odtwarzanie
ExoPlayer obsługuje funkcję SmoothStreaming w formacie kontenera FMP4. Strumienie multimediów musi być zdemonstrowany, co oznacza, że film, dźwięk i tekst muszą być zdefiniowane osobno. elementy StreamIndex w pliku manifestu SmoothStreaming. Zawarte w nim materiały audio Muszą być też obsługiwane przykładowe formaty wideo (zobacz przykładowe formaty).
Funkcja | Obsługiwane | Komentarze |
---|---|---|
Kontenery | ||
protokół FMP4 | TAK | Tylko strumienie zdemonstrowane |
Napisy | ||
TTML, | TAK | Umieszczone w FMP4 |
Ochrona treści | ||
PlayReady SL2000 | TAK | Tylko Android TV |
Odtwarzanie na żywo | ||
Standardowe odtwarzanie na żywo | TAK | |
Common Media Client Data (CMCD). | TAK | Przewodnik po integracji |
HLS
ExoPlayer obsługuje HLS z wieloma formatami kontenerów. Zawarte w nim materiały audio Muszą być też obsługiwane przykładowe formaty wideo (zobacz przykładowe formaty). Śr zdecydowanie zachęcamy producentów treści HLS do generowania wysokiej jakości strumieni HLS, zgodnie z opisem 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 | ||
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+ (schemat „cbcs”) |
PlayReady SL2000 | TAK | Tylko Android TV |
Kontrola serwera | ||
Aktualizacje delta | TAK | |
Blokuję ponowne ładowanie playlisty | TAK | |
Blokuję ładowanie wskazówek dotyczących wstępnego wczytywania | TAK | Z wyjątkiem zakresów bajtów o nieokreślonej długości |
Odtwarzanie na żywo | ||
Standardowe odtwarzanie na żywo | TAK | |
HLS z krótkim czasem oczekiwania (Apple) | TAK | |
HLS z krótkim czasem oczekiwania (społeczność) | NIE | |
Common Media Client Data (CMCD). | TAK | Przewodnik po integracji |
Formaty kontenerów progresywnych
ExoPlayer może odtwarzać strumienie w poniższych formatach kontenera. Muszą być też obsługiwane dołączone do tego formaty dźwiękowe i wideo (patrz Przykładowe formaty). Informacje o kontenerach obrazów i obsłudze formatu znajdziesz tutaj Grafika.
Format kontenera | Obsługiwane | Komentarze |
---|---|---|
MP4 | TAK | |
M4A | TAK | |
protokół FMP4 | TAK | |
WebM | TAK | |
Matroska | TAK | |
MP3 | TAK | Niektóre strumienie można przewijać tylko z użyciem przewijania o stałej 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ępna tylko do przewijania przy stałej szybkości transmisji bitów** |
FLAC | TAK | Przy użyciu biblioteki FLAC lub wyodrębniania FLAC w bibliotece ExoPlayer*** |
AMR | TAK | Dostępna tylko do przewijania przy stałej szybkości transmisji bitów** |
* Przeszukiwanie nie jest obsługiwane, ponieważ kontener nie zawiera metadanych (na przykład przykładowy indeks), który umożliwia odtwarzaczowi multimediów skuteczne wyszukiwanie. Jeśli wymagane jest wyszukiwanie, zalecamy użycie bardziej odpowiedniego formatu kontenera.
** Te moduły wyodrębniania danych mają FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
flagi dla
umożliwiające przybliżone przewijanie z założeniem o stałej szybkości transmisji bitów. Ten
funkcja nie jest domyślnie włączona. Najprostszy sposób, aby to włączyć
dla wszystkich modułów wyodrębniania, które go obsługują, jest użycie
DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
, zgodnie z opisem
tutaj.
*** Wyodrębnianie biblioteki FLAC generuje nieprzetworzony dźwięk, który może być obsługiwany
na wszystkich poziomach
interfejsu API. Dane wyjściowe biblioteki ExoPlayer wyodrębniania FLAC
ramki audio FLAC i wymaga dekodera FLAC (np. MediaCodec
dekoder obsługujący format FLAC (wymagany od interfejsu API poziomu 27) lub
bibliotekę FFmpeg z włączonym FLAC). W elemencie DefaultExtractorsFactory
używany jest protokół
wyodrębniania rozszerzeń, jeśli aplikacja została skompilowana za pomocą biblioteki FLAC.
W przeciwnym razie używany jest ekstraktor biblioteki ExoPlayer.
RTSP
ExoPlayer obsługuje zarówno protokół RTSP na żywo, jak i na żądanie. Obsługiwane formaty próbek wymienionych poniżej.
Obsługiwane formaty próbek
- H264 (opis mediów SDP musi zawierać dane SPS/PPS w fmtp) do inicjowania dekodera).
- AAC (ze strumieniem bitowym ADTS).
- AC3.
Obsługiwane typy sieci
- Transmisja pojedyncza RTP przez UDP (multicast nie jest obsługiwany).
- Przeplatany RTSP, RTP przez RTSP przy użyciu TCP.
Przykładowe formaty
Domyślnie ExoPlayer używa dekoderów platformy Androida. Dlatego też przykładowe formaty zależą od platformy, a nie od ExoPlayer. Przeczytaj artykuł Obsługiwane formaty multimediów: dokumentacji dotyczącej przykładowych formatów obsługiwanych przez urządzenia z Androidem. Pamiętaj, że poszczególne urządzenia mogą obsługiwać dodatkowe formaty niż wymienione.
Oprócz dekoderów platformy Androida ExoPlayer może też wykorzystywać z rozszerzeń do dekodera oprogramowania. Należy je utworzyć ręcznie i uwzględnić w projektach, które chcą z nich korzystać. Obecnie udostępniamy dekoder oprogramowania biblioteki dla AV1 VP9 FLAC Opus oraz FFmpeg.
Biblioteka FFmpeg
Biblioteka FFmpeg obsługuje dekodowanie różnych formatów próbek dźwięku. Możesz wybrać, które mają być uwzględnione podczas tworzenia biblioteki, zgodnie z opisem w sekcji do pliku README.md biblioteki. ta tabela zawiera mapowanie z formatu próbki audio na odpowiedni Nazwa dekodera FFmpeg.
Przykładowy format | Nazwy dekodera |
---|---|
Vorbis | Vorbis |
Opus | Opus |
FLAC | Flac |
lista ALAC | Alac |
PCM (μ-prawo) | pcm_mulaw |
Prawo PCM | pcm_alaw |
MP1, MP2, MP3 | mp3 |
AMR-NB | Amrnb |
AMR-WB | Amrwb |
AAC | AAC |
AC-3 | AC3 |
E-AC-3 | Eac3, |
DTS, DTS-HD | DC |
TrueHD | MLP truehd |
Obrazy
ExoPlayer obsługuje następujące formaty obrazów. Zobacz Wczytywanie bibliotek obrazów integracji z bibliotekami zewnętrznymi, które mogą zapewnić obsługę różnych formatów.
Format pliku graficznego | Obsługiwane | Uwagi |
---|---|---|
BMP | TAK | |
GIF | NIE | Brak obsługi wyodrębniania |
JPEG | TAK | |
Zdjęcie ruchome JPEG | TAK | Obsługa nieruchomych obrazów i filmów |
JPEG ultra HDR | TAK | Wraca do SDR przed Androidem 14 lub nowszym wyświetlacze bez HDR |
PNG | TAK | |
WebP | TAK | |
HEIF/HEIC | TAK | |
Zdjęcie ruchome HEIC | Częściowo | Obsługiwane są tylko obrazy nieruchome* |
AVIF (wartość bazowa) | TAK | Odkodowane tylko na Androidzie 14 i nowszych |
* Fragment wideo ze zdjęć ruchomych HEIC można uzyskać za pomocą Metadatapickupr, i odtwarzane jako samodzielny plik.
Samodzielne formaty napisów
ExoPlayer obsługuje niezależne pliki napisów w różnych formatach. Napisy takie pliki mogą być ładowane z innego urządzenia zgodnie z opisem 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 |
Podstacja alfa (SSA/ASS) | TAK | Typy MIME.TEXT_SSA |
Odtwarzanie filmów HDR
ExoPlayer obsługuje wyodrębnianie filmów o wysokim zakresie dynamiki (HDR) w różnych w tym Dolby Vision w formacie MP4 i HD10+ w formacie Matroska/WebM. Dekodowanie a wyświetlanie treści HDR zależy od obsługi platformy urządzenia. Zobacz Odtwarzanie filmów HDR aby dowiedzieć się więcej o sprawdzaniu możliwości dekodowania/wyświetlania HDR i ograniczeń Obsługa HDR na różnych wersjach Androida.
Podczas odtwarzania strumienia HDR, który wymaga obsługi konkretnego profilu kodeka,
Domyślny selektor MediaCodec
ExoPlayer wybierze dekoder, który obsługuje ten
profilu (jeśli jest dostępny), nawet jeśli inny dekoder dla tego samego typu MIME
nie obsługuje tego profilu, pojawia się wyżej na liście kodeków. Może to spowodować
przy wyborze dekodera programowego w przypadkach, gdy strumień przekracza
możliwości dekodera sprzętowego dla tego samego typu MIME.