Formati supportati

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 Solo flussi demux
WebM Solo flussi demux
Matroska Solo flussi demux
MPEG-TS NO Nessun supporto pianificato
Sottotitoli codificati / sottotitoli
TTML Non elaborato o incorporato in FMP4 secondo ISO/IEC 14496-30
WebVTT Non elaborato o incorporato in FMP4 secondo 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+; Schema "cbcs": API 25+
PlayReady SL2000 Android TV, solo schema "cenc"
ClearKey API 21+, solo schema "cenc"
Inserimento degli annunci
Riproduzione per più periodi
Inserimento di annunci guidato dal server (xlinks) NO
Annunci lato server e lato client IMA Guida all'inserimento degli annunci
Riproduzione live
Riproduzione live regolare
Riproduzione live CMAF a latenza molto bassa
Common Media Client Data (CMCD) 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 Solo flussi demux
Sottotitoli codificati
TTML Incorporato in FMP4
Protezione dei contenuti
PlayReady SL2000 Solo Android TV
Riproduzione live
Riproduzione live regolare
Common Media Client Data (CMCD) 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
FMP4/CMAF
ADTS (AAC)
MP3
Sottotitoli codificati / sottotitoli
CEA-608
CEA-708
WebVTT
Metadati
ID3
SCTE-35 NO
Protezione dei contenuti
AES-128
Esempio di AES-128 NO
Widevine API 19+ (schema "cenc") e 25+ (schema "cbcs")
PlayReady SL2000 Solo Android TV
Controllo del server
Aggiornamenti delta
Blocco del ricaricamento della playlist
Blocco del caricamento dei suggerimenti di precaricamento 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 Guida all'inserimento degli annunci
Riproduzione live
Riproduzione live regolare
HLS a bassa latenza (Apple)
HLS a bassa latenza (community) NO
Common Media Client Data CMCD 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
M4A
FMP4
WebM
Matroska
MP3 Alcuni stream sono ricercabili solo utilizzando la ricerca a bitrate costante**
Ogg Contenente Vorbis, Opus e FLAC
WAV
MPEG-TS
MPEG-PS
FLV Non riproducibile*
ADTS (AAC) Ricercabile solo tramite ricerca a bitrate costante**
FLAC Utilizzo della libreria FLAC o dell'estrattore FLAC nella libreria ExoPlayer***
AMR 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
GIF NO Nessun supporto per Extractor
JPEG
Foto in movimento JPEG Immagini statiche e video supportati
JPEG Ultra HDR Esegue il fallback a SDR prima di Android 14 o su display non HDR
PNG
WebP
HEIF/HEIC
Foto in movimento HEIC
AVIF (base di riferimento) 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 MimeTypes.TEXT_VTT
TTML / SMPTE-TT MimeTypes.APPLICATION_TTML
SubRip MimeTypes.APPLICATION_SUBRIP
SubStationAlpha (SSA/ASS) 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.