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.