Formats compatibles

Lorsque vous définissez les formats compatibles avec ExoPlayer, notez que les "formats multimédias" sont définis à plusieurs niveaux. Voici, du niveau le plus bas au plus élevé:

  • Format des échantillons multimédias individuels (tels qu'une image vidéo ou audio). Il s'agit d'exemples de formats. Notez qu'un fichier vidéo standard contiendra au moins deux formats d'échantillons : 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 multimédias et les métadonnées associées. Il s'agit de formats de conteneurs. Un fichier multimédia a un format de conteneur unique (par exemple, MP4), qui est généralement désigné par l'extension de fichier. Notez que pour certains formats audio uniquement (par exemple, MP3), les formats d'échantillon et de conteneur peuvent être identiques.
  • Les technologies de streaming adaptatives telles que DASH, SmoothStreaming et HLS Il ne s'agit pas de formats multimédias en tant que tels, mais il est toujours 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 prise en charge des formats de sous-titres autonomes et de la lecture de vidéos HDR.

Streaming adaptatif

DASH

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

Fonctionnalité Autorisé Commentaires
Conteneurs
FMP4 OUI Flux démuxés uniquement
WebM OUI Flux démuxés uniquement
Matroska OUI Flux démuxés uniquement
MPEG-TS NON Aucune assistance prévue
Sous-titres
TTML OUI Brut ou intégré dans FMP4 conformément à la norme ISO/IEC 14496-30
WebVTT OUI Brut ou intégré dans FMP4 conformément à la norme ISO/IEC 14496-30
CEA-608 OUI Intégrée à FMP4 lorsque signalée à l'aide de descripteurs d'accessibilité SCTE
CEA-708 OUI Intégrée à FMP4 lorsque signalée à l'aide de descripteurs d'accessibilité SCTE
Métadonnées
Métadonnées EMSG OUI Intégrée dans FMP4
Protection du contenu
Widevine OUI Schéma "cenc" : API 19 ou version ultérieure ; schéma "cbcs" : API 25 ou version ultérieure
PlayReady SL2000 OUI Android TV, schéma "cenc" uniquement
Effacer la clé OUI API 21 et versions ultérieures, schéma "cenc" uniquement
Lecture en direct
Lecture en direct standard OUI
Lecture en direct du CMAF à très faible latence OUI
Common Media Client Data (CMCD) OUI Guide d'intégration

SmoothStreaming

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

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

HLS

ExoPlayer est compatible avec le protocole HLS avec plusieurs formats de conteneurs. Les formats d'échantillon audio et vidéo contenus doivent également être compatibles (pour en savoir plus, consultez la section Exemples de formats). Nous encourageons vivement les producteurs de contenu HLS à générer des flux HLS de haute qualité, comme décrit ici.

Fonctionnalité Autorisé 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 d'algorithme AES-128 NON
Widevine OUI API 19 ou version ultérieure (schéma "cenc") et version 25 ou ultérieure (schéma "cbcs")
PlayReady SL2000 OUI Android TV uniquement
Contrôle des serveurs
Mises à jour delta OUI
Blocage de l'actualisation de la playlist OUI
Blocage du chargement des suggestions de préchargement OUI Sauf pour les plages d'octets dont la longueur n'est pas définie
Lecture en direct
Lecture en direct standard OUI
HLS à faible latence (Apple) OUI
HLS (communauté) à faible latence NON
Common Media Client Data (CMCD) OUI Guide d'intégration

Formats de conteneurs progressifs

Les flux dans les formats de conteneur suivants peuvent être lus directement par ExoPlayer. Les formats d'échantillons audio et vidéo contenus doivent également être compatibles (pour en savoir plus, consultez la section Exemples de formats).

Format du conteneur Autorisé Commentaires
MP4 OUI
M4A OUI
FMP4 OUI
WebM OUI
Matroska OUI
MP3 OUI Certains flux ne peuvent être recherchés qu'à l'aide de la recherche à débit constant**.
Ogg OUI Contenant vorbis, Opus et FLAC
WAV OUI
MPEG-TS OUI
MPEG-PS OUI
FLV OUI Recherche impossible*
ADTS (AAC) OUI Recherche possible uniquement à l'aide de la recherche à débit constant**
FLAC OUI Utilisation de la bibliothèque FLAC ou de l'extracteur FLAC de la bibliothèque ExoPlayer***
AMR OUI Recherche possible uniquement à l'aide de la recherche à débit constant**
Photo animée JPEG OUI Seul le contenu MP4 est extrait

* La recherche n'est pas acceptée, car le conteneur ne fournit pas de métadonnées (par exemple, un exemple d'index) pour permettre à un lecteur multimédia d'effectuer une recherche efficace. Si une recherche est nécessaire, nous vous suggérons d'utiliser un format de conteneur plus approprié.

** Ces extracteurs disposent d'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 compatibles consiste à utiliser DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, comme décrit ici.

*** L'extracteur de la bibliothèque FLAC produit du contenu 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 FLAC (requis à partir du niveau d'API 27) ou la bibliothèque FFmpeg avec 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 des exemples de formats et de types de réseaux compatibles.

Exemples de formats compatibles

  • H264 (la description du support SDP doit inclure des données SPS/PPS dans l'attribut fmtp pour l'initialisation du décodeur).
  • AAC (avec flux de bits ADTS).
  • AC3

Types de réseaux compatibles

  • Unicast RTP sur UDP (la multidiffusion n'est pas prise en charge).
  • RTSP entrelacé et RTP sur RTSP via TCP

Exemples de formats

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

En plus des décodeurs de la plate-forme Android, ExoPlayer peut également utiliser des extensions de décodeur logiciel. Ceux-ci doivent être créés manuellement et inclus dans les projets qui souhaitent les utiliser. Nous fournissons actuellement des bibliothèques de décodeur logicielles pour AV1, VP9, FLAC, Opus et FFmpeg.

Bibliothèque FFmpeg

La bibliothèque FFmpeg prend en charge le décodage de divers formats d'échantillons audio. Vous pouvez choisir les décodeurs à inclure lors de la création de la bibliothèque, comme indiqué dans le fichier README.md de la bibliothèque. Le tableau suivant établit une correspondance entre le format d'échantillon audio et le nom du décodeur FFmpeg correspondant.

Exemple de format Noms des décodeurs
Vorbis Vorbis
Opus Opus
FLAC flac
ALAC (ALAC) Allac
Loi μ-MCP pcm_mulaw
PCM A 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

Formats de sous-titres autonomes

ExoPlayer est compatible avec les fichiers de sous-titres autonomes dans de nombreux formats. Les fichiers de sous-titres peuvent être téléchargés indépendamment, comme décrit sur la page des éléments multimédias.

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

Lecture de vidéos HDR

ExoPlayer gère l'extraction de vidéos HDR (High Dynamic Range) dans divers conteneurs, y compris Dolby Vision au format MP4 et HDR10+ dans Matroska/WebM. Le décodage et l'affichage du contenu HDR dépendent de la compatibilité de la plate-forme et de l'appareil Android. Consultez la section Lecture vidéo HDR pour en savoir plus sur la vérification des capacités de décodage/d'affichage HDR et les limites de la compatibilité HDR sur les 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 (le cas échéant), 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.