Formati supportati

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 Solo stream demuxed
WebM Solo stream demuxed
Matroska Solo stream demuxed
MPEG-TS NO Nessun supporto pianificato
Sottotitoli codificati/sottotitoli
TTML Raw o incorporato in FMP4 secondo lo standard ISO/IEC 14496-30
WebVTT Raw o incorporato in FMP4 secondo lo standard ISO/IEC 14496-30
CEA-608 Incorporato in FMP4 quando segnalato utilizzando i descrittori di accessibilità SCTE
CEA-708 Incorporato in FMP4 quando segnalato utilizzando i descrittori di accessibilità SCTE
Metadati
Metadati EMSG Incorporato in FMP4
Protezione dei contenuti
Widevine Schema "cenc": API 19 e versioni successive; schema "cbcs": API 25 e versioni successive
PlayReady SL2000 Android TV, solo schema "cenc"
ClearKey API 21 e versioni successive, solo schema "cenc"
Riproduzione in tempo reale
Riproduzione dal vivo normale
Riproduzione in diretta CMAF con latenza molto bassa
Common Media Client Data (CMCD) 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 Solo stream demuxed
Sottotitoli codificati/sottotitoli
TTML Incorporato in FMP4
Protezione dei contenuti
PlayReady SL2000 Solo Android TV
Riproduzione in tempo reale
Riproduzione dal vivo normale
Common Media Client Data (CMCD) 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
FMP4/CMAF
ADTS (AAC)
MP3
Sottotitoli codificati/sottotitoli
CEA-608
CEA-708
WebVTT
Metadati
ID3
SCTE-35 NO
Protezione dei contenuti
AES-128
Esempio AES-128 NO
Widevine API 19 e versioni successive ("cenc") e 25 e versioni successive ("cbcs")
PlayReady SL2000 Solo Android TV
Controllo del server
Aggiornamenti delta
Blocco del ricaricamento della playlist
Blocco del caricamento degli indicatori di precaricamento Ad eccezione di byterange con lunghezze non definite
Riproduzione in tempo reale
Riproduzione dal vivo normale
HLS a bassa latenza (Apple)
HLS a bassa latenza (community) NO
Common Media Client Data (CMCD) 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
M4A
FMP4
WebM
Matroska
MP3 Alcuni stream possono essere sottoposti a ricerca solo utilizzando la ricerca con velocità in bit costante**
Ogg Contiene Vorbis, Opus e FLAC
WAV
MPEG-TS
MPEG-PS
FLV Non avanzabile*
ADTS (AAC) Possono essere cercati solo utilizzando la ricerca con velocità in bit costante**
FLAC Utilizzo della libreria FLAC o dell'estrattore FLAC nella libreria ExoPlayer***
AMR 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
GIF NO Nessun supporto per Extractor
JPEG
Foto in movimento JPEG Immagini e video supportati
JPEG Ultra HDR Torna a SDR prima di Android 14 o su display non HDR
PNG
WebP
HEIF/HEIC
Foto in movimento HEIC In parte Sono supportate solo le immagini fisse*
AVIF (base di riferimento) 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 MimeTypes.TEXT_VTT
TTML / SMPTE-TT MimeTypes.APPLICATION_TTML
SubRip MimeTypes.APPLICATION_SUBRIP
SubStationAlpha (SSA/ASS) 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.