Lorsque vous définissez les formats compatibles avec ExoPlayer, il est important de noter que les "formats multimédias" sont définis à plusieurs niveaux. Du niveau le plus bas au plus élevé:
- Format des échantillons multimédias individuels (par exemple, un frame de vidéo ou un frame d'audio). Il s'agit d'exemples de formats. Notez qu'un fichier vidéo typique contient des contenus multimédias dans 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 contient les échantillons multimédias et les métadonnées associées. Il s'agit de formats de conteneur. Un fichier multimédia ne comporte qu'un seul format de conteneur (par exemple, MP4), qui est généralement indiqué 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.
- Technologies de streaming adaptatif telles que DASH, SmoothStreaming et HLS Il ne s'agit pas de formats multimédias en tant que tels, mais il est tout de même nécessaire de définir le niveau de compatibilité d'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 vidéo HDR.
Streaming adaptatif
DASH
ExoPlayer est compatible avec DASH avec 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 dans le fichier manifeste DASH (CEA-608 est une exception, comme indiqué 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 Formats d'échantillons).
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 prise en charge prévue |
Sous-titres | ||
TTML | OUI | Brut ou intégré au format FMP4, conformément à la norme ISO/CEI 14496-30 |
WebVTT | OUI | Brut ou intégré au format FMP4, conformément à la norme ISO/CEI 14496-30 |
CEA-608 | OUI | Intégré au format FMP4 lorsqu'il est signalé à l'aide de descripteurs d'accessibilité SCTE |
CEA-708 | OUI | Intégré au format FMP4 lorsqu'il est signalé à l'aide de descripteurs d'accessibilité SCTE |
Métadonnées | ||
Métadonnées EMSG | OUI | Intégrés au format FMP4 |
Protection du contenu | ||
Widevine | OUI | Scénario "cenc" : API 19 et versions ultérieures ; scénario "cbcs" : API 25 et versions ultérieures |
PlayReady SL2000 | OUI | Android TV, schéma "cenc" uniquement |
ClearKey | OUI | API 21 et versions ultérieures, schéma "cenc" uniquement |
Lecture en direct | ||
Lecture en direct régulière | OUI | |
Lecture en direct CMAF à latence ultrafaible | OUI | |
CMCD (Common Media Client Data) | OUI | Guide d'intégration |
SmoothStreaming
ExoPlayer est compatible avec SmoothStreaming avec 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 dans le fichier manifeste SmoothStreaming. Les formats d'échantillons audio et vidéo contenus doivent également être compatibles (pour en savoir plus, consultez la section Formats d'échantillons).
Fonctionnalité | Compatible | Commentaires |
---|---|---|
Conteneurs | ||
FMP4 | OUI | Flux démultiplexés uniquement |
Sous-titres | ||
TTML | OUI | Intégrés au format FMP4 |
Protection du contenu | ||
PlayReady SL2000 | OUI | Android TV uniquement |
Lecture en direct | ||
Lecture en direct régulière | OUI | |
CMCD (Common Media Client Data) | OUI | Guide d'intégration |
HLS
ExoPlayer est compatible avec HLS avec plusieurs formats de conteneur. Les formats d'échantillons audio et vidéo contenus doivent également être compatibles (pour en savoir plus, consultez la section Formats d'échantillons). Nous encourageons vivement les producteurs de contenus HLS à générer des flux HLS de haute qualité, comme décrit ici.
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 ou version ultérieure ("cenc") et 25 ou version ultérieure ("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 indices de préchargement | OUI | À l'exception des plages d'octets dont la longueur n'est pas définie |
Lecture en direct | ||
Lecture en direct régulière | OUI | |
HLS à faible latence (Apple) | OUI | |
HLS à faible latence (communauté) | NON | |
CMCD (Common Media Client Data) | 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 Formats d'échantillons). Pour en savoir plus sur la compatibilité des conteneurs et des formats d'images, consultez la section Images.
Format du conteneur | Compatible | Commentaires |
---|---|---|
MP4 | OUI | |
M4A | OUI | |
FMP4 | OUI | |
WebM | OUI | |
Matroska | OUI | |
MP3 | OUI | Certains flux ne sont accessibles que par recherche de débit constant** |
Ogg | OUI | contenant Vorbis, Opus et FLAC |
WAV | OUI | |
MPEG-TS | OUI | |
MPEG-PS | OUI | |
FLV | OUI | Non inclus dans l'index de recherche* |
ADTS (AAC) | OUI | Peut être rembobiné uniquement à l'aide de la recherche de débit constant** |
FLAC | OUI | À l'aide de la bibliothèque FLAC ou de l'extracteur FLAC de la bibliothèque ExoPlayer*** |
AMR | OUI | Peut être rembobiné uniquement à l'aide de la recherche de débit constant** |
* La recherche n'est pas prise en charge, car le conteneur ne fournit pas de métadonnées (par exemple, un indice d'échantillon) 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 disposent d'indicateurs FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
pour activer la recherche approximative à l'aide d'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 un audio brut, qui peut être géré par le framework à tous les niveaux d'API. L'extracteur FLAC de la bibliothèque ExoPlayer produit 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 acceptés
- H264 (la description multimédia 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
- RTP sur unicast UDP (le multicast n'est pas pris en charge).
- RTSP entrelacé, 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 formats d'exemples compatibles dépendent de la plate-forme sous-jacente plutôt que d'ExoPlayer. Consultez la section Formats multimédias acceptés pour obtenir des informations sur les exemples de formats compatibles avec les appareils Android. Notez que certains appareils peuvent prendre en charge des formats supplémentaires en plus de ceux listés.
En plus des décodeurs de plate-forme Android, ExoPlayer peut également utiliser des extensions de décodeur logiciel. Ils doivent être compilés manuellement et inclus dans les projets qui souhaitent les utiliser. Nous fournissons actuellement des bibliothèques de décodeur logiciel pour AV1, VP9, FLAC, Opus, FFmpeg, MIDI et IAMF.
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 ou des décodeurs |
---|---|
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 découvrir comment intégrer des bibliothèques externes pouvant prendre en charge un autre ensemble de formats.
Format d'image | Compatible | Notes |
---|---|---|
BMP | OUI | |
GIF | NON | Aucune compatibilité avec l'extracteur |
JPEG | OUI | |
Photo animée JPEG | OUI | Images fixes et vidéos compatibles |
JPEG Ultra HDR | OUI | Retourne à la SDR avant Android 14 ou sur les écrans non HDR |
PNG | OUI | |
WebP | OUI | |
HEIF/HEIC | OUI | |
Photo animée HEIC | En partie | Seules les images fixes sont acceptées* |
AVIF (référence) | OUI | Décodé sur Android 14 ou version ultérieure uniquement |
* La partie vidéo des photos animées HEIC peut être obtenue avec MetadataRetriever et lue en tant que fichier autonome.
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 installés en mode hors connexion, 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 au format MP4 et HDR10+ au format Matroska/WebM. Le décodage et l'affichage du contenu HDR dépendent de la compatibilité de la plate-forme Android et de l'appareil. Consultez la section Lecture de vidéos HDR pour découvrir comment vérifier les fonctionnalités de décodage/d'affichage HDR et les limites de la compatibilité HDR entre les versions d'Android.
Lorsque vous lisez un flux HDR qui nécessite la prise en charge d'un profil de codec particulier, le sélecteur MediaCodec
par défaut d'ExoPlayer sélectionne un décodeur compatible avec ce profil (le cas échéant), même si un autre décodeur du 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 lorsque le flux dépasse les capacités d'un décodeur matériel pour le même type MIME.