Quando definisci i formati supportati da ExoPlayer, è importante tenere presente che i "formati multimediali" sono definiti a più livelli. Dal livello più basso al più alto, sono:
- Il formato dei singoli sample multimediali (ad esempio un frame di video o un frame di audio). Si tratta di formati di esempio. Tieni presente che un file video tipico conterrà contenuti multimediali in almeno due formati di sample: uno per il video (ad es. H.264) e uno per l'audio (ad es. AAC).
- Il formato del contenitore che ospita i sample multimediali e i metadati associati. Si tratta di formati contenitore. Un file multimediale ha un singolo formato contenitore (ad esempio MP4), che in genere è indicato dall'estensione del file. Tieni presente che per alcuni formati solo audio (ad esempio MP3), i formati del Sample e del contenitore possono essere gli stessi.
- Tecnologie di streaming adattivo come DASH, SmoothStreaming e HLS. Questi non sono formati multimediali come tali, ma è comunque necessario definire il livello di supporto fornito da ExoPlayer.
Le sezioni seguenti definiscono il supporto di ExoPlayer a ogni livello, dal più alto al più basso. Le ultime due sezioni descrivono il supporto per i formati dei sottotitoli autonomi e la riproduzione di video HDR.
Streaming adattivo
DASH
ExoPlayer supporta DASH con più formati di contenitore. Gli stream multimediali devono essere demuxati, il che significa che video, audio e testo devono essere definiti in elementi AdaptationSet
distinti nel manifest DASH (CEA-608 è un'eccezione, come descritto nella tabella di seguito). Devono essere supportati anche i formati dei sample audio e video contenuti (per maggiori dettagli, consulta la sezione Formati dei sample).
Funzionalità | Supportato | Commenti |
---|---|---|
Container | ||
FMP4 | SÌ | Solo stream demuxed |
WebM | SÌ | Solo stream demuxed |
Matroska | SÌ | Solo stream demuxed |
MPEG-TS | NO | Nessun supporto pianificato |
Sottotitoli codificati/sottotitoli | ||
TTML | SÌ | Raw o incorporato in FMP4 secondo lo standard ISO/IEC 14496-30 |
WebVTT | SÌ | Raw o incorporato in FMP4 secondo lo standard ISO/IEC 14496-30 |
CEA-608 | SÌ | Incorporato in FMP4 quando segnalato utilizzando i descrittori di accessibilità SCTE |
CEA-708 | SÌ | Incorporato in FMP4 quando segnalato utilizzando i descrittori di accessibilità SCTE |
Metadati | ||
Metadati EMSG | SÌ | Incorporato in FMP4 |
Protezione dei contenuti | ||
Widevine | SÌ | Schema "cenc": API 19 e versioni successive; schema "cbcs": API 25 e versioni successive |
PlayReady SL2000 | SÌ | Android TV, solo schema "cenc" |
ClearKey | SÌ | API 21 e versioni successive, solo schema "cenc" |
Riproduzione in tempo reale | ||
Riproduzione dal vivo normale | SÌ | |
Riproduzione in diretta CMAF con latenza molto bassa | SÌ | |
Common Media Client Data (CMCD) | SÌ | Guida all'integrazione |
SmoothStreaming
ExoPlayer supporta SmoothStreaming con il formato contenitore FMP4. Gli stream multimediali devono essere demuxati, il che significa che video, audio e testo devono essere definiti in elementi StreamIndex distinti nel file manifest di SmoothStreaming. Devono essere supportati anche i formati dei sample audio e video contenuti (per maggiori dettagli, consulta la sezione Formati sample).
Funzionalità | Supportato | Commenti |
---|---|---|
Container | ||
FMP4 | SÌ | Solo stream demuxed |
Sottotitoli codificati/sottotitoli | ||
TTML | SÌ | Incorporato in FMP4 |
Protezione dei contenuti | ||
PlayReady SL2000 | SÌ | Solo Android TV |
Riproduzione in tempo reale | ||
Riproduzione dal vivo normale | SÌ | |
Common Media Client Data (CMCD) | SÌ | Guida all'integrazione |
HLS
ExoPlayer supporta HLS con più formati di contenitore. Devono essere supportati anche i formati dei sample audio e video contenuti (per maggiori dettagli, consulta la sezione Formati sample). Invitiamo vivamente i produttori di contenuti HLS a generare stream HLS di alta qualità, come descritto qui.
Funzionalità | Supportato | Commenti |
---|---|---|
Container | ||
MPEG-TS | SÌ | |
FMP4/CMAF | SÌ | |
ADTS (AAC) | SÌ | |
MP3 | SÌ | |
Sottotitoli codificati/sottotitoli | ||
CEA-608 | SÌ | |
CEA-708 | SÌ | |
WebVTT | SÌ | |
Metadati | ||
ID3 | SÌ | |
SCTE-35 | NO | |
Protezione dei contenuti | ||
AES-128 | SÌ | |
Esempio AES-128 | NO | |
Widevine | SÌ | API 19 e versioni successive ("cenc") e 25 e versioni successive ("cbcs") |
PlayReady SL2000 | SÌ | Solo Android TV |
Controllo del server | ||
Aggiornamenti delta | SÌ | |
Blocco del ricaricamento della playlist | SÌ | |
Blocco del caricamento degli indicatori di precaricamento | SÌ | Ad eccezione di byterange con lunghezze non definite |
Riproduzione in tempo reale | ||
Riproduzione dal vivo normale | SÌ | |
HLS a bassa latenza (Apple) | SÌ | |
HLS a bassa latenza (community) | NO | |
Common Media Client Data (CMCD) | SÌ | Guida all'integrazione |
Formati di container progressivi
Gli stream nei seguenti formati contenitore possono essere riprodotti direttamente da ExoPlayer. Devono essere supportati anche i formati dei sample audio e video contenuti (per maggiori dettagli, consulta la sezione Formati dei sample). Per informazioni sul supporto dei formati e dei contenitori delle immagini, consulta Immagini.
Formato del contenitore | Supportato | Commenti |
---|---|---|
MP4 | SÌ | |
M4A | SÌ | |
FMP4 | SÌ | |
WebM | SÌ | |
Matroska | SÌ | |
MP3 | SÌ | Alcuni stream possono essere sottoposti a ricerca solo utilizzando la ricerca con velocità in bit costante** |
Ogg | SÌ | Contiene Vorbis, Opus e FLAC |
WAV | SÌ | |
MPEG-TS | SÌ | |
MPEG-PS | SÌ | |
FLV | SÌ | Non avanzabile* |
ADTS (AAC) | SÌ | Possono essere cercati solo utilizzando la ricerca con velocità in bit costante** |
FLAC | SÌ | Utilizzo della libreria FLAC o dell'estrattore FLAC nella libreria ExoPlayer*** |
AMR | SÌ | Possono essere cercati solo utilizzando la ricerca con velocità in bit costante** |
* La ricerca non è supportata perché il contenitore non fornisce metadati (ad esempio un indice di sample) per consentire a un media player di eseguire una ricerca in modo efficiente. Se la ricerca è obbligatoria, ti consigliamo di utilizzare un formato del contenitore più appropriato.
** Questi estrattori hanno flag FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
per attivare la ricerca approssimativa utilizzando un'ipotesi di velocità in bit costante. Questa funzionalità non è attiva per impostazione predefinita. Il modo più semplice per attivare questa funzionalità per tutti gli estrattori che la supportano è utilizzare DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
, come descritto qui.
*** L'estrattore della libreria FLAC genera audio non elaborato, che può essere gestito dal framework su tutti i livelli dell'API. L'estrattore FLAC della libreria ExoPlayer genera frame audio FLAC e si basa quindi sulla presenza di un decodificatore FLAC (ad esempio un decodificatore MediaCodec
che gestisce FLAC (obbligatorio dal livello API 27) o la libreria FFmpeg con FLAC abilitato). DefaultExtractorsFactory
utilizza l'estrazione delle estensioni se l'applicazione è stata creata con la libreria FLAC.
In caso contrario, utilizza l'estrattore della libreria ExoPlayer.
RTSP
ExoPlayer supporta RTSP sia dal vivo che on demand. Di seguito sono elencati i formati di sample e i tipi di emittenti supportati.
Formati di sample supportati
- H264 (la descrizione multimediale SDP deve includere i dati SPS/PPS nell'attributo fmtp per l'inizializzazione del decodificatore).
- AAC (con stream di bit ADTS).
- AC3.
Tipi di reti supportati
- RTP su unicast UDP (il multicast non è supportato).
- RTSP interlacciato, RTP su RTSP tramite TCP.
Formati di esempio
Per impostazione predefinita, ExoPlayer utilizza i decodificatori della piattaforma Android. Di conseguenza, i formati di sample supportati dipendono dalla piattaforma di base anziché da ExoPlayer. Consulta la sezione Formati multimediali supportati per la documentazione sui formati di esempio supportati dai dispositivi Android. Tieni presente che i singoli dispositivi potrebbero supportare formati aggiuntivi oltre a quelli elencati.
Oltre ai decodificatori della piattaforma Android, ExoPlayer può utilizzare anche estensioni di decodificatori software. Devono essere creati e inclusi manualmente nei progetti che vogliono utilizzarli. Al momento forniamo librerie di decodificatori software per AV1, VP9, FLAC, Opus, FFmpeg, MIDI e IAMF.
Libreria FFmpeg
La libreria FFmpeg supporta la decodifica di diversi formati di sample audio. Puoi scegliere quali decodificatori includere durante la compilazione della libreria, come descritto nel file README.md della libreria. La tabella seguente fornisce una mappatura dal formato del Sample audio al nome del decodificatore FFmpeg corrispondente.
Formato di esempio | Nomi dei decodificatori |
---|---|
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 |
Immagini
ExoPlayer supporta i seguenti formati di immagine. Consulta Librerie di caricamento delle immagini per scoprire come eseguire l'integrazione con librerie esterne che potrebbero fornire il supporto per un insieme diverso di formati.
Formato dell'immagine | Supportato | Note |
---|---|---|
BMP | SÌ | |
GIF | NO | Nessun supporto per Extractor |
JPEG | SÌ | |
Foto in movimento JPEG | SÌ | Immagini e video supportati |
JPEG Ultra HDR | SÌ | Torna a SDR prima di Android 14 o su display non HDR |
PNG | SÌ | |
WebP | SÌ | |
HEIF/HEIC | SÌ | |
Foto in movimento HEIC | In parte | Sono supportate solo le immagini fisse* |
AVIF (base di riferimento) | SÌ | Decodificato solo su Android 14 e versioni successive |
* La parte video delle foto in movimento HEIC può essere ottenuta con MetadataRetriever e riprodotta come file autonomo.
Formati di sottotitoli autonomi
ExoPlayer supporta file di sottotitoli autonomi in vari formati. I file di sottotitoli codificati possono essere caricati come descritto nella pagina Elementi multimediali.
Formato del contenitore | Supportato | Tipo MIME |
---|---|---|
WebVTT | SÌ | MimeTypes.TEXT_VTT |
TTML / SMPTE-TT | SÌ | MimeTypes.APPLICATION_TTML |
SubRip | SÌ | MimeTypes.APPLICATION_SUBRIP |
SubStationAlpha (SSA/ASS) | SÌ | MimeTypes.TEXT_SSA |
Riproduzione di video HDR
ExoPlayer gestisce l'estrazione di video HDR (High Dynamic Range) in vari contenitori, tra cui Dolby Vision in MP4 e HDR10+ in Matroska/WebM. La decodifica e la visualizzazione dei contenuti HDR dipendono dal supporto della piattaforma e del dispositivo Android. Consulta la sezione Riproduzione di video HDR per scoprire come verificare le funzionalità di decodifica/visualizzazione HDR e le limitazioni del supporto HDR nelle varie versioni di Android.
Quando riproduci uno stream HDR che richiede il supporto di un determinato profilo codec, il selettore MediaCodec
predefinito di ExoPlayer sceglierà un decodificatore che supporta quel profilo (se disponibile), anche se un altro decodificatore per lo stesso tipo MIME che non supporta quel profilo appare più in alto nell'elenco dei codec. Ciò può comportare la selezione di un decodificatore software nei casi in cui lo stream superi le funzionalità di un decodificatore hardware per lo stesso tipo MIME.