Quando definisci i formati supportati da ExoPlayer, è importante notare che i "formati multimediali" sono definiti a più livelli. Dal livello più basso a quello più alto, ecco i livelli:
- Il formato dei singoli campioni multimediali (ad esempio un fotogramma video o un fotogramma audio). Questi sono formati di esempio. Tieni presente che un tipico file video contiene contenuti multimediali in almeno due formati di esempio: uno per il video (ad esempio H.264) e uno per l'audio (ad esempio AAC).
- Il formato del contenitore che ospita i campioni multimediali e i metadati associati. Si tratta di formati contenitore. Un file multimediale ha un unico formato contenitore (ad esempio MP4), che viene comunemente indicato dall'estensione del file. Tieni presente che per alcuni formati solo audio (ad esempio MP3), i formati di esempio e contenitore potrebbero essere gli stessi.
- Tecnologie di streaming adattivo come DASH, SmoothStreaming e HLS. Questi non sono formati multimediali in quanto 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 di sottotitoli autonomi e la riproduzione video HDR.
Streaming adattivo
DASH
ExoPlayer supporta DASH con più formati contenitore. I flussi multimediali devono essere
demultiplexati, 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 seguente). Anche i formati dei campioni audio e video contenuti devono essere supportati (per i dettagli, consulta la sezione Formati dei campioni).
| Funzionalità | Supportato | Commenti |
|---|---|---|
| Container | ||
| FMP4 | SÌ | Solo flussi demux |
| WebM | SÌ | Solo flussi demux |
| Matroska | SÌ | Solo flussi demux |
| MPEG-TS | NO | Nessun supporto pianificato |
| Sottotitoli codificati / sottotitoli | ||
| TTML | SÌ | Non elaborato o incorporato in FMP4 secondo ISO/IEC 14496-30 |
| WebVTT | SÌ | Non elaborato o incorporato in FMP4 secondo 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+; Schema "cbcs": API 25+ |
| PlayReady SL2000 | SÌ | Android TV, solo schema "cenc" |
| ClearKey | SÌ | API 21+, solo schema "cenc" |
| Inserimento degli annunci | ||
| Riproduzione per più periodi | SÌ | |
| Inserimento di annunci guidato dal server (xlinks) | NO | |
| Annunci lato server e lato client IMA | SÌ | Guida all'inserimento degli annunci |
| Riproduzione live | ||
| Riproduzione live regolare | SÌ | |
| Riproduzione live CMAF a latenza molto bassa | SÌ | |
| Common Media Client Data (CMCD) | SÌ | Guida all'integrazione di CMCD |
SmoothStreaming
ExoPlayer supporta Smooth Streaming con il formato contenitore FMP4. I flussi multimediali devono essere demuxati, il che significa che video, audio e testo devono essere definiti in elementi StreamIndex distinti nel manifest Smooth Streaming. Anche i formati audio e video di esempio contenuti devono essere supportati (per i dettagli, consulta la sezione Formati di esempio).
| Funzionalità | Supportato | Commenti |
|---|---|---|
| Container | ||
| FMP4 | SÌ | Solo flussi demux |
| Sottotitoli codificati | ||
| TTML | SÌ | Incorporato in FMP4 |
| Protezione dei contenuti | ||
| PlayReady SL2000 | SÌ | Solo Android TV |
| Riproduzione live | ||
| Riproduzione live regolare | SÌ | |
| Common Media Client Data (CMCD) | SÌ | Guida all'integrazione |
HLS
ExoPlayer supporta HLS con più formati contenitore. Devono essere supportati anche i formati dei campioni audio e video contenuti (per i dettagli, consulta la sezione Formati dei campioni). Invitiamo vivamente i produttori di contenuti HLS a generare stream HLS di alta qualità, come descritto in questo post del blog.
| 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 di AES-128 | NO | |
| Widevine | SÌ | API 19+ (schema "cenc") e 25+ (schema "cbcs") |
| PlayReady SL2000 | SÌ | Solo Android TV |
| Controllo del server | ||
| Aggiornamenti delta | SÌ | |
| Blocco del ricaricamento della playlist | SÌ | |
| Blocco del caricamento dei suggerimenti di precaricamento | SÌ | Ad eccezione degli intervalli di byte con lunghezze non definite |
| Inserimento degli annunci | ||
| Inserimento di annunci guidato dal server (interstitial) | In parte | Solo VOD con X-ASSET-URI.
I live streaming e
X-ASSET-LIST verranno aggiunti
in un secondo momento. |
| Annunci lato server e lato client IMA | SÌ | Guida all'inserimento degli annunci |
| Riproduzione live | ||
| Riproduzione live regolare | SÌ | |
| HLS a bassa latenza (Apple) | SÌ | |
| HLS a bassa latenza (community) | NO | |
| Common Media Client Data CMCD | SÌ | Guida all'integrazione di CMCD |
Formati di container progressivi
Gli stream nei seguenti formati contenitore possono essere riprodotti direttamente da ExoPlayer. Anche i formati dei campioni audio e video contenuti devono essere supportati (per i dettagli, consulta la sezione Formati dei campioni). Per informazioni sul supporto di contenitori e formati di immagini, consulta Immagini.
| Formato del contenitore | Supportato | Commenti |
|---|---|---|
| MP4 | SÌ | |
| M4A | SÌ | |
| FMP4 | SÌ | |
| WebM | SÌ | |
| Matroska | SÌ | |
| MP3 | SÌ | Alcuni stream sono ricercabili solo utilizzando la ricerca a bitrate costante** |
| Ogg | SÌ | Contenente Vorbis, Opus e FLAC |
| WAV | SÌ | |
| MPEG-TS | SÌ | |
| MPEG-PS | SÌ | |
| FLV | SÌ | Non riproducibile* |
| ADTS (AAC) | SÌ | Ricercabile solo tramite ricerca a bitrate costante** |
| FLAC | SÌ | Utilizzo della libreria FLAC o dell'estrattore FLAC nella libreria ExoPlayer*** |
| AMR | SÌ | Ricercabile solo tramite ricerca a bitrate costante** |
* La ricerca non è supportata perché il contenitore non fornisce metadati (ad esempio, un indice di esempio) per consentire a un lettore multimediale di eseguire una ricerca in modo efficiente. Se è necessaria la ricerca, ti consigliamo di utilizzare un formato contenitore più appropriato.
** Questi estrattori hanno flag FLAG_ENABLE_CONSTANT_BITRATE_SEEKING per
l'attivazione della ricerca approssimativa utilizzando un'ipotesi di bitrate costante. Questa
funzionalità non è attivata 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 restituisce l'audio non elaborato, che può essere gestito
dal framework a tutti i livelli API. L'estrattore FLAC della libreria ExoPlayer genera
frame audio FLAC e si basa quindi su un decoder FLAC (ad esempio, un decoder MediaCodec
che gestisce FLAC (obbligatorio dal livello API 27) o la
libreria FFmpeg con FLAC abilitato). DefaultExtractorsFactory utilizza
l'estrattore di estensioni se l'applicazione è stata creata con la libreria FLAC.
In caso contrario, utilizza l'estrattore della libreria ExoPlayer.
RTSP
ExoPlayer supporta RTSP sia per i contenuti live che on demand. Di seguito sono elencati i formati di esempio e i tipi di rete supportati.
Formati di esempio supportati
- H264 (la descrizione dei media SDP deve includere i dati SPS/PPS nell'attributo fmtp per l'inizializzazione del decodificatore).
- AAC (con bitstream ADTS).
- AC3.
Tipi di rete supportati
- RTP su UDP unicast (il multicast non è supportato).
- RTSP interleaved, RTP over RTSP using TCP.
Formati di esempio
Per impostazione predefinita, ExoPlayer utilizza i decoder della piattaforma Android. Pertanto, i formati di esempio supportati dipendono dalla piattaforma sottostante 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 decoder della piattaforma Android, ExoPlayer può utilizzare anche estensioni del decoder software. Questi devono essere creati manualmente e inclusi nei progetti che vogliono utilizzarli. Attualmente forniamo librerie di decodifica software per AV1, VP9, FLAC, Opus, FFmpeg, MIDI, IAMF e MPEG-H.
Libreria FFmpeg
La libreria FFmpeg supporta la decodifica di una serie di formati di campioni audio diversi. Puoi scegliere i decoder da includere durante la creazione della libreria, come documentato nel file README.md della libreria. La tabella seguente fornisce una mappatura dal formato di esempio audio al nome del decoder FFmpeg corrispondente.
| Formato di esempio | Nome o nomi del decodificatore |
|---|---|
| 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 immagine. Consulta Librerie di caricamento delle immagini per scoprire come eseguire l'integrazione con librerie esterne che potrebbero fornire 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 statiche e video supportati |
| JPEG Ultra HDR | SÌ | Esegue il fallback a SDR prima di Android 14 o su display non HDR |
| PNG | SÌ | |
| WebP | SÌ | |
| HEIF/HEIC | SÌ | |
| Foto in movimento HEIC | SÌ | |
| AVIF (base di riferimento) | SÌ | Decodificato solo su Android 14 e versioni successive |
Formati di sottotitoli codificati autonomi
ExoPlayer supporta file di sottotitoli codificati autonomi in vari formati. I file dei sottotitoli codificati possono essere caricati lateralmente come descritto nella pagina degli 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 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 Android e del dispositivo. Consulta Riproduzione video HDR per informazioni su come verificare le funzionalità di decodifica/visualizzazione HDR e le limitazioni del supporto HDR nelle varie versioni di Android.
Quando riproduce un flusso HDR che richiede il supporto di un particolare profilo codec, il selettore MediaCodec predefinito di ExoPlayer sceglie 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 decoder software nei casi in cui lo stream supera le
capacità di un decoder hardware per lo stesso tipo MIME.