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.