Formati supportati

Quando definisci i formati supportati da ExoPlayer, è importante notare che i "formati multimediali" sono definiti a più livelli. Dal più basso al più alto, i livelli sono:

  • 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 demuxati
WebM SÌ Solo flussi demuxati
Matroska SÌ Solo flussi demuxati
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Ì Incorporati in FMP4 quando segnalati utilizzando i descrittori di accessibilità SCTE
CEA-708 SÌ Incorporati in FMP4 quando segnalati 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 in diretta
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 dei campioni audio e video contenuti devono essere supportati (per maggiori dettagli, consulta la sezione Formati dei campioni).

Funzionalità Supportato Commenti
Container
FMP4 SÌ Solo flussi demuxati
Sottotitoli codificati
TTML SÌ Incorporato in FMP4
Protezione dei contenuti
PlayReady SL2000 SÌ Solo Android TV
Riproduzione in diretta
Riproduzione live regolare SÌ
Common Media Client Data (CMCD) SÌ Guida all'integrazione

HLS

ExoPlayer supporta HLS con più formati contenitore. Anche i formati dei campioni audio e video contenuti devono essere supportati (per maggiori 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 in diretta
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Ì Contenenti Vorbis, Opus e FLAC
WAV SÌ
MPEG-TS SÌ
MPEG-PS SÌ
FLV SÌ Non riproducibile*
ADTS (AAC) SÌ Ricercabile solo tramite la ricerca a bitrate costante**
FLAC SÌ Utilizzo della libreria FLAC o dell'estrattore FLAC nella libreria ExoPlayer***
AMR SÌ Ricercabile solo tramite la 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 contenuti multimediali 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 utilizzando 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 diversi formati di campioni audio. 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 del campione 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 informazioni su 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 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.