Formats compatibles

Lorsque vous définissez les formats compatibles avec ExoPlayer, il est important de noter que les "formats multimédias" sont définis à plusieurs niveaux. Voici les différents niveaux, du plus bas au plus élevé :

  • Format des échantillons multimédias individuels (par exemple, une image vidéo ou une image audio). Il s'agit d'exemples de formats. Notez qu'un fichier vidéo standard contient des éléments multimédias dans au moins deux formats d'échantillon : un pour la vidéo (par exemple, H.264) et un pour l'audio (par exemple, AAC).
  • Format du conteneur qui héberge les exemples de contenus multimédias et les métadonnées associées. Il s'agit de formats de conteneurs. Un fichier multimédia possède un seul format de conteneur (par exemple, MP4), qui est généralement indiqué par l'extension du fichier. Notez que pour certains formats audio uniquement (MP3, par exemple), les formats d'échantillon et de conteneur peuvent être identiques.
  • Technologies de streaming adaptatif telles que DASH, SmoothStreaming et HLS. Il ne s'agit pas de formats multimédias à proprement parler, mais il est tout de même nécessaire de définir le niveau de compatibilité fourni par ExoPlayer.

Les sections suivantes définissent la compatibilité d'ExoPlayer à chaque niveau, du plus élevé au plus bas. Les deux dernières sections décrivent la compatibilité avec les formats de sous-titres autonomes et la lecture de vidéos HDR.

Streaming adaptatif

DASH

ExoPlayer est compatible avec DASH et plusieurs formats de conteneur. Les flux multimédias doivent être démultiplexés, ce qui signifie que la vidéo, l'audio et le texte doivent être définis dans des éléments AdaptationSet distincts du fichier manifeste DASH (CEA-608 est une exception, comme indiqué dans le tableau ci-dessous). Les formats des exemples audio et vidéo contenus doivent également être compatibles (pour en savoir plus, consultez la section Formats des exemples).

Fonctionnalité Compatible Commentaires
Conteneurs
FMP4 OUI Flux démultiplexés uniquement
WebM OUI Flux démultiplexés uniquement
Matroska OUI Flux démultiplexés uniquement
MPEG-TS NON Aucune assistance prévue
Sous-titres
TTML OUI Brut ou intégré au format FMP4 selon la norme ISO/IEC 14496-30
WebVTT OUI Brut ou intégré au format FMP4 selon la norme ISO/IEC 14496-30
CEA-608 OUI Intégrées dans le format FMP4 lorsqu'elles sont signalées à l'aide de descripteurs d'accessibilité SCTE
CEA-708 OUI Intégrées dans le format FMP4 lorsqu'elles sont signalées à l'aide de descripteurs d'accessibilité SCTE
Métadonnées
Métadonnées EMSG OUI Intégration dans FMP4
Protection du contenu
Widevine OUI Schéma "cenc" : API 19+ ; Schéma "cbcs" : API 25+
PlayReady SL2000 OUI Android TV, schéma "cenc" uniquement
ClearKey OUI API 21+, schéma "cenc" uniquement
Insertion d'annonces
Lecture multi-période OUI
Insertion d'annonces guidée par le serveur (xlinks) NON
Annonces IMA côté serveur et côté client OUI Guide d'insertion d'annonces
Lecture en direct
Lecture en direct normale OUI
Lecture en direct CMAF à latence ultra-faible OUI
Common Media Client Data (CMCD) OUI Guide d'intégration CMCD

SmoothStreaming

ExoPlayer est compatible avec SmoothStreaming et le format de conteneur FMP4. Les flux multimédias doivent être démultiplexés, ce qui signifie que la vidéo, l'audio et le texte doivent être définis dans des éléments StreamIndex distincts du fichier manifeste SmoothStreaming. Les formats des exemples audio et vidéo inclus doivent également être acceptés (pour en savoir plus, consultez la section Formats des exemples).

Fonctionnalité Compatible Commentaires
Conteneurs
FMP4 OUI Flux démultiplexés uniquement
Sous-titres
TTML OUI Intégration dans FMP4
Protection du contenu
PlayReady SL2000 OUI Android TV uniquement
Lecture en direct
Lecture en direct normale OUI
CMCD (Common Media Client Data) OUI Guide d'intégration

HLS

ExoPlayer est compatible avec HLS et plusieurs formats de conteneurs. Les formats des exemples audio et vidéo inclus doivent également être acceptés (pour en savoir plus, consultez la section Formats des exemples). Nous encourageons vivement les producteurs de contenu HLS à générer des flux HLS de haute qualité, comme décrit dans cet article de blog.

Fonctionnalité Compatible Commentaires
Conteneurs
MPEG-TS OUI
FMP4/CMAF OUI
ADTS (AAC) OUI
MP3 OUI
Sous-titres
CEA-608 OUI
CEA-708 OUI
WebVTT OUI
Métadonnées
ID3 OUI
SCTE-35 NON
Protection du contenu
AES-128 OUI
Exemple AES-128 NON
Widevine OUI API 19+ (schéma "cenc") et 25+ (schéma "cbcs")
PlayReady SL2000 OUI Android TV uniquement
Contrôle du serveur
Mises à jour delta OUI
Bloquer le rechargement de la playlist OUI
Blocage du chargement des indications de préchargement OUI Sauf pour les plages d'octets dont la longueur n'est pas définie
Insertion d'annonces
Insertion d'annonces guidée par le serveur (interstitielles) En partie VOD uniquement avec X-ASSET-URI. Les diffusions en direct et les X-ASSET-LIST seront ajoutés ultérieurement.
Annonces IMA côté serveur et côté client OUI Guide d'insertion d'annonces
Lecture en direct
Lecture en direct normale OUI
HLS à faible latence (Apple) OUI
HLS à faible latence (communauté) NON
CMCD (Common Media Client Data) OUI Guide d'intégration CMCD

Formats de conteneurs progressifs

ExoPlayer peut lire directement les flux dans les formats de conteneur suivants. Les formats des exemples audio et vidéo contenus doivent également être compatibles (pour en savoir plus, consultez la section Formats des exemples). Pour en savoir plus sur les conteneurs et les formats d'images compatibles, consultez Images.

Format du conteneur Compatible Commentaires
MP4 OUI
M4A OUI
FMP4 OUI
WebM OUI
Matroska OUI
MP3 OUI Certains flux ne sont accessibles qu'avec la recherche à débit constant**
Ogg OUI Contenant Vorbis, Opus et FLAC
WAV OUI
MPEG-TS OUI
MPEG-PS OUI
FLV OUI Non disponible pour la recherche*
ADTS (AAC) OUI Recherche possible uniquement avec une recherche à débit constant**
FLAC OUI Utiliser la bibliothèque FLAC ou l'extracteur FLAC dans la bibliothèque ExoPlayer***
AMR OUI Recherche possible uniquement avec une recherche à débit constant**

* La recherche n'est pas prise en charge, car le conteneur ne fournit pas de métadonnées (par exemple, un index d'échantillons) permettant à un lecteur multimédia d'effectuer une recherche de manière efficace. Si la recherche est requise, nous vous suggérons d'utiliser un format de conteneur plus approprié.

** Ces extracteurs comportent des indicateurs FLAG_ENABLE_CONSTANT_BITRATE_SEEKING permettant d'activer la recherche approximative en utilisant une hypothèse de débit constant. Cette fonctionnalité n'est pas activée par défaut. Le moyen le plus simple d'activer cette fonctionnalité pour tous les extracteurs qui la prennent en charge consiste à utiliser DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, comme décrit ici.

*** L'extracteur de bibliothèque FLAC génère un fichier audio brut, qui peut être géré par le framework à tous les niveaux d'API. L'extracteur FLAC de la bibliothèque ExoPlayer génère des trames audio FLAC et repose donc sur un décodeur FLAC (par exemple, un décodeur MediaCodec qui gère le format FLAC (requis à partir du niveau d'API 27) ou la bibliothèque FFmpeg avec le format FLAC activé). DefaultExtractorsFactory utilise l'extracteur d'extension si l'application a été créée avec la bibliothèque FLAC. Sinon, il utilise l'extracteur de la bibliothèque ExoPlayer.

RTSP

ExoPlayer est compatible avec RTSP en direct et à la demande. Vous trouverez ci-dessous les formats d'échantillons et les types de réseaux acceptés.

Formats d'échantillons acceptés

  • H264 (la description média SDP doit inclure les données SPS/PPS dans l'attribut fmtp pour l'initialisation du décodeur).
  • AAC (avec flux binaire ADTS)
  • AC3.

Types de réseaux compatibles

  • RTP sur UDP unicast (le multicast n'est pas pris en charge).
  • RTSP entrelacé, RTP sur RTSP utilisant TCP.

Exemples de formats

Par défaut, ExoPlayer utilise les décodeurs de plate-forme d'Android. Par conséquent, les formats d'échantillons compatibles dépendent de la plate-forme sous-jacente plutôt que d'ExoPlayer. Consultez la page Formats multimédias acceptés pour obtenir de la documentation sur les formats d'échantillons compatibles avec les appareils Android. Notez que certains appareils peuvent être compatibles avec d'autres formats que ceux listés.

En plus des décodeurs de plate-forme Android, ExoPlayer peut également utiliser des extensions de décodeur logiciel. Elles doivent être créées manuellement et incluses dans les projets qui souhaitent les utiliser. Nous fournissons actuellement des bibliothèques de décodeurs logiciels pour AV1, VP9, FLAC, Opus, FFmpeg, MIDI, IAMF et MPEG-H.

Bibliothèque FFmpeg

La bibliothèque FFmpeg permet de décoder différents formats d'échantillons audio. Vous pouvez choisir les décodeurs à inclure lors de la compilation de la bibliothèque, comme indiqué dans le fichier README.md de la bibliothèque. Le tableau suivant fournit un mappage du format d'échantillon audio au nom du décodeur FFmpeg correspondant.

Exemple de format Nom(s) du décodeur
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

Images

ExoPlayer est compatible avec les formats d'image suivants. Consultez la section Bibliothèques de chargement d'images pour savoir comment intégrer des bibliothèques externes pouvant prendre en charge un ensemble de formats différent.

Format de l'image Compatible Notes
BMP OUI
GIF NON Aucune compatibilité avec l'extracteur
JPEG OUI
Photo animée JPEG OUI Images fixes et vidéos acceptées
JPEG Ultra HDR OUI Rétrogradation vers SDR avant Android 14 ou sur les écrans non HDR
PNG OUI
WebP OUI
HEIF/HEIC OUI
Photo animée HEIC OUI
AVIF (référence) OUI Décodé sur Android 14 ou version ultérieure uniquement

Formats de sous-titres autonomes

ExoPlayer est compatible avec les fichiers de sous-titres autonomes dans différents formats. Les fichiers de sous-titres peuvent être chargés de manière indépendante, comme décrit sur la page des éléments multimédias.

Format du conteneur Compatible Type MIME
WebVTT OUI MimeTypes.TEXT_VTT
TTML / SMPTE-TT OUI MimeTypes.APPLICATION_TTML
SubRip OUI MimeTypes.APPLICATION_SUBRIP
SubStationAlpha (SSA/ASS) OUI MimeTypes.TEXT_SSA

Lecture de vidéos HDR

ExoPlayer gère l'extraction de vidéos HDR (High Dynamic Range) dans différents conteneurs, y compris Dolby Vision dans MP4 et HDR10+ dans Matroska/WebM. Le décodage et l'affichage de contenus HDR dépendent de la compatibilité de la plate-forme et de l'appareil Android. Consultez Lecture de vidéos HDR pour savoir comment vérifier les capacités de décodage/d'affichage HDR et les limites de la prise en charge HDR dans les différentes versions d'Android.

Lors de la lecture d'un flux HDR nécessitant la prise en charge d'un profil de codec particulier, le sélecteur MediaCodec par défaut d'ExoPlayer choisit un décodeur compatible avec ce profil (si disponible), même si un autre décodeur pour le même type MIME qui n'est pas compatible avec ce profil apparaît plus haut dans la liste des codecs. Cela peut entraîner la sélection d'un décodeur logiciel dans les cas où le flux dépasse les capacités d'un décodeur matériel pour le même type MIME.