Durante la definizione dei formati supportati da ExoPlayer, è importante notare che i "formati multimediali" sono definiti a più livelli. Dal livello più basso al più alto, questi sono:
- Il formato dei singoli campioni multimediali (ad esempio un frame di video o un frame di audio). Ecco alcuni formati di esempio. Tieni presente che un tipico file video conterrà contenuti multimediali in almeno due formati di esempio: uno per i video (ad esempio H.264) e uno per l'audio (ad esempio, AAC).
- Il formato del container che ospita gli esempi di contenuti multimediali e i metadati associati. Questi sono i formati contenitore. Un file multimediale ha un singolo formato container (ad esempio MP4), comunemente indicato dall'estensione del file. Tieni presente che per alcuni formati solo audio (ad esempio MP3), i formati di esempio e container potrebbero essere gli stessi.
- Tecnologie di streaming adattivo come DASH, livestreaming e HLS. Non sono formati multimediali in quanto tali, tuttavia è comunque necessario definire il livello di supporto fornito da ExoPlayer.
Le seguenti sezioni definiscono il supporto di ExoPlayer a ogni livello, dal più alto al più basso. Le ultime due sezioni descrivono il supporto dei formati di sottotitoli autonomi e della riproduzione di video HDR.
Streaming adattivo
DASH
ExoPlayer supporta DASH con diversi formati di contenitore. Gli stream multimediali devono essere deduplicati, ovvero video, audio e testo devono essere definiti in elementi AdaptationSet
distinti nel manifest DASH (il CEA-608 è un'eccezione, come descritto nella tabella seguente). Devono essere supportati anche i formati di esempio audio e video contenuti (per informazioni dettagliate, consulta la sezione Formati di esempio).
Funzionalità | Prove di supporto | Commenti |
---|---|---|
Container | ||
FMP4 | SÌ | Solo stream eliminati |
WebM | SÌ | Solo stream eliminati |
Matroska | SÌ | Solo stream eliminati |
MPEG-TS | NO | Nessuna assistenza pianificata |
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 tramite descrittori di accessibilità SCTE |
CEA-708 | SÌ | Incorporato in FMP4 quando segnalato tramite descrittori di accessibilità SCTE |
Metadati | ||
Metadati EMSG | SÌ | Incorporata in FMP4 |
Protezione dei contenuti | ||
Widevine | SÌ | Schema "cenc": API 19+; schema "cbcs": API 25+ |
PlayReady SL2000 | SÌ | Android TV, solo schema "cenc" |
Cancella | SÌ | API 21+, solo schema "cenc" |
Riproduzione dal vivo | ||
Riproduzione regolare dal vivo | SÌ | |
Riproduzione dal vivo con CMAF a latenza molto bassa | SÌ | |
Dati Common Media Client (CMCD) | SÌ | Guida all'integrazione |
Streaming fluido
ExoPlayer supporta lo streaming fluido con il formato contenitore FMP4. Gli stream multimediali devono essere rimossi, il che significa che video, audio e testo devono essere definiti in elementi StreamIndex distinti nel file manifest LiveStreaming. Devono essere supportati anche i formati di esempio audio e video contenuti (per informazioni dettagliate, consulta la sezione sui formati di esempio).
Funzionalità | Prove di supporto | Commenti |
---|---|---|
Container | ||
FMP4 | SÌ | Solo stream eliminati |
Sottotitoli codificati/sottotitoli | ||
TTML | SÌ | Incorporata in FMP4 |
Protezione dei contenuti | ||
PlayReady SL2000 | SÌ | Solo Android TV |
Riproduzione dal vivo | ||
Riproduzione regolare dal vivo | SÌ | |
Dati Common Media Client (CMCD) | SÌ | Guida all'integrazione |
HLS
ExoPlayer supporta HLS con più formati di container. Devono essere supportati anche i formati di esempio audio e video contenuti (per informazioni dettagliate, consulta la sezione sui formati di esempio). Incoraggiamo vivamente i produttori di contenuti HLS a generare stream HLS di alta qualità, come descritto qui.
Funzionalità | Prove di supporto | 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 server | ||
Aggiornamenti delta | SÌ | |
Blocco del ricaricamento della playlist in corso... | SÌ | |
Blocco del carico di suggerimenti di precaricamento | SÌ | Tranne per gli intervalli di byte con lunghezze non definite |
Riproduzione dal vivo | ||
Riproduzione regolare dal vivo | SÌ | |
HLS a bassa latenza (Apple) | SÌ | |
HLS a bassa latenza (community) | NO | |
Dati Common Media Client (CMCD) | SÌ | Guida all'integrazione |
Formati container progressivi
Gli stream nei seguenti formati container possono essere riprodotti direttamente da ExoPlayer. Devono essere supportati anche i formati di esempio audio e video contenuti (per informazioni dettagliate, consulta la sezione Formati di esempio).
Formato container | Prove di supporto | Commenti |
---|---|---|
MP4 | SÌ | |
M4 | SÌ | |
FMP4 | SÌ | |
WebM | SÌ | |
Matroska | SÌ | |
MP3 | SÌ | Alcuni stream sono ricercabili solo utilizzando la ricerca a velocità in bit costante** |
Ogg | SÌ | Contiene Vorbis, Opus e FLAC |
WAV | SÌ | |
MPEG-TS | SÌ | |
MPEG-PS | SÌ | |
FLV | SÌ | Impossibile cercare* |
ADTS (AAC) | SÌ | Ricercabile solo con la ricerca a velocità in bit costante** |
FLAC | SÌ | Utilizzando la libreria FLAC o l'estrattore FLAC nella libreria ExoPlayer*** |
AMR | SÌ | Ricercabile solo con la ricerca a velocità in bit costante** |
Foto in movimento JPEG | SÌ | Vengono estratti solo i contenuti MP4 |
* La ricerca non è supportata perché il container non fornisce metadati (ad esempio, un indice di esempio) per consentire a un media player di eseguire una ricerca in modo efficiente. Se la ricerca è obbligatoria, ti consigliamo di utilizzare un formato contenitore più appropriato.
** Questi estrattori hanno flag FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
per consentire la ricerca approssimativa utilizzando un'ipotesi di velocità in bit costante. Questa funzionalità non è abilitata per impostazione predefinita. Il modo più semplice per abilitare questa funzionalità per tutti gli estrattori che la supportano è utilizzare DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
, come descritto qui.
*** L'estrattore della libreria FLAC produce audio non elaborato, che può essere gestito
dal framework a tutti i livelli API. L'estrattore FLAC della libreria ExoPlayer genera frame audio FLAC, pertanto si basa sull'utilizzo di un decodificatore FLAC (ad esempio, un decodificatore MediaCodec
che gestisce FLAC (richiesto 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 libreria ExoPlayer.
RTSP
ExoPlayer supporta RTSP sia in diretta sia on demand. I formati di esempio e i tipi di rete supportati sono elencati di seguito.
Formati di esempio supportati
- H264 (la descrizione del supporto SDP deve includere dati SPS/PPS nell'attributo fmtp per l'inizializzazione del decoder).
- AAC (con ADTS bitstream).
- AC3.
Tipi di rete supportati
- RTP su unicast UDP (il multicast non è supportato).
- RTSP con interleaving, RTP su RTSP tramite TCP.
Formati di esempio
Per impostazione predefinita ExoPlayer utilizza i decoder della piattaforma di Android. Pertanto, i formati di esempio supportati dipendono dalla piattaforma sottostante anziché da ExoPlayer. Consulta 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ò anche utilizzare estensioni di decodifica software. Queste devono essere create manualmente e incluse nei progetti che vogliono usarle. Al momento forniamo librerie di decoder software per AV1, VP9, FLAC, Opus e FFmpeg.
Libreria FFmpeg
La libreria FFmpeg supporta la decodifica di una varietà di formati di esempio audio diversi. Puoi scegliere quali decodificatori includere durante la creazione della libreria, come documentato nel file README.md della libreria. La seguente tabella fornisce una mappatura dal formato audio di esempio al nome del decoder FFmpeg corrispondente.
Formato di esempio | Nomi dei decoder |
---|---|
Vorbis | Vorbis |
Opus | opus |
FLAC | flacone |
ALAC | alac |
Legge μ PCM | pcm_mulaw |
Legge per il non profit PCM | Pcm_alaw |
MP1, MP2, MP3. | mp3 |
AMR-NB | Amrnb |
AMR-WB | Amrwb |
AAC | aac |
CA-3 | AC3 |
E-AC-3 | Eac3 |
DTS e DTS-HD | dca |
TrueHD | MLP truehd |
Formati di sottotitoli autonomi
ExoPlayer supporta file di sottotitoli autonomi in diversi formati. I file dei sottotitoli possono essere caricati tramite sideload come descritto nella pagina degli elementi multimediali.
Formato container | Prove di supporto | 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 container, tra cui Dolby Vision in MP4 e HDR10+ in Matroska/WebM. La decodifica e la visualizzazione di contenuti HDR dipendono dal supporto della piattaforma Android e del dispositivo. Consulta la sezione Riproduzione video HDR per informazioni su come verificare le funzionalità di decodifica/visualizzazione HDR e le limitazioni del supporto HDR nelle versioni Android.
Durante la riproduzione di uno stream HDR che richiede il supporto di un determinato 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 viene visualizzato più in alto nell'elenco dei codec. Ciò può comportare la selezione di un decodificatore software nei casi in cui il flusso superi le funzionalità di un decodificatore hardware per lo stesso tipo MIME.