Qu’est-ce que le format commun d’application multimédia (CMAF) ?
Le format commun d’application multimédia (CMAF) est une norme MPEG, ISO/IEC 23000-19, pour l’encodage et le conditionnement de médias segmentés en MP4 fragmenté. Il spécifie la structure des pistes, le chiffrement et les profils multimédias afin que HLS et DASH puissent référencer les mêmes objets multimédias.
Fonctionnement du format commun d’application multimédia (CMAF)
CMAF définit des objets multimédias, mais pas de manifeste ni de protocole de distribution ; la présentation relève d’un modèle d’application abstrait que HLS et DASH implémentent tous deux. Une piste CMAF contient un seul type de média (vidéo, audio ou sous-titres) et se compose d’un en-tête CMAF, qui initialise un décodeur, suivi de fragments. Les encodages alternatifs d’un même contenu entre lesquels un lecteur peut basculer aux limites des fragments forment un ensemble de commutation. Les ensembles de commutation d’un même type de média, par exemple pour différentes langues ou différents codecs, forment un ensemble de sélection, et une présentation combine des ensembles de sélection synchronisés. Pour la distribution, les fragments sont regroupés en segments ou divisés en blocs. Une liste de lecture multimédia HLS répertorie les segments d’une piste et pointe vers son en-tête avec EXT-X-MAP, et un MPD DASH peut adresser les mêmes fichiers.
Points clés
- Les pistes CMAF transportent chacune un seul type de média ; l’audio et la vidéo sont donc conditionnés et demandés séparément. Les recommandations HLS d’Apple indiquent que les segments CMAF ne peuvent généralement pas contenir plusieurs types de médias, qu’il devrait y avoir une liste de lecture multimédia par piste CMAF et que chaque segment nécessite une balise
EXT-X-MAPpointant vers l’en-tête CMAF de la piste. Les segments de flux de transport multiplexés doivent donc être reconditionnés, et non simplement renommés, et le lecteur a besoin de l’en-tête correspondant avant de pouvoir décoder un segment. - Un segment comprend un ou plusieurs fragments entiers ; un bloc est un sous-ensemble consécutif des échantillons d’un fragment. Les fragments sont décodables indépendamment, et les lecteurs changent de variante aux limites des fragments. Les blocs servent à réduire la latence : ils peuvent être publiés avant que le fragment soit complet, mais DASH-IF précise qu’ils ne sont générés ni pour le changement de débit binaire ni pour l’accès aléatoire. La chaîne de distribution et le lecteur doivent également coopérer : les recommandations de DASH-IF pour la faible latence exigent l’encodage de transfert HTTP par blocs depuis l’entrée de l’outil de conditionnement jusqu’à la périphérie du CDN et définissent des exigences distinctes pour les clients à faible latence. HLS expose les blocs sous forme de segments partiels répertoriés dans la liste de lecture et définit son mode à faible latence comme l’utilisation combinée de segments partiels, du rechargement bloquant des listes de lecture et d’indications de préchargement.
- CMAF ne vous fournit pas une copie chiffrée unique pour tous les appareils. Il définit des profils de présentation pour les contenus non chiffrés, le chiffrement
cbcset le chiffrementcenc, et Apple précise que HLS ne prend en charge que les contenus non chiffrés et le chiffrementcbcs. Microsoft documente la prise en charge du chiffrementcbcsdans PlayReady à partir de la version 4.0 du client, en tant que fonctionnalité facultative, les clients antérieurs étant limités au chiffrementcenc. Une copie utilisantcbcsexclut donc les appareils PlayReady antérieurs à la version 4.0, et une copie utilisantcencexclut les lecteurs HLS d’Apple. Vérifiez les versions des clients DRM de votre parc d’appareils avant de prévoir une distribution chiffrée reposant sur une copie unique. - CMAF sur HLS nécessite des lecteurs qui acceptent le MP4 fragmenté. Apple date la prise en charge des segments fMP4 dans la spécification HLS de septembre 2016, indique que les clients basés sur des révisions antérieures ne pourront probablement pas lire les contenus CMAF et cite iOS 10, macOS 10.12 et tvOS 10 comme les premières versions d’Apple censées le permettre. Concernant les versions du protocole, le projet de spécification HLS exige une version de compatibilité 6 ou supérieure pour
EXT-X-MAPdans une liste de lecture multimédia qui ne contient pas uniquement des images I, tandis que la documentation du multiplexeur HLS de FFmpeg indique que les segments fMP4 peuvent être utilisés à partir de la version 7 de HLS et décrit les segments de flux de transport comme compatibles avec toutes les versions de HLS. La liste d’Apple ne couvre que ses propres plateformes ; testez donc la lecture fMP4 sur les autres appareils que vous devez continuer à prendre en charge. Les clients HLS qui ne peuvent pas lire ce format ont toujours besoin d’une variante en flux de transport en complément de la variante CMAF.
Quand le format commun d’application multimédia (CMAF) est utile
Utilisez CMAF lorsqu’un même contenu doit atteindre des lecteurs HLS et DASH et que vous souhaitez conserver un seul ensemble de segments dans le stockage et le cache CDN plutôt que deux. Le gain n’existe que lorsque les capacités des lecteurs cibles se recoupent : chaque client doit pouvoir lire le MP4 fragmenté, décoder les codecs choisis et, pour les contenus protégés, prendre en charge le même schéma de chiffrement. CMAF ne fournit pas de manifestes ; vous devez donc toujours publier une liste de lecture HLS et un MPD DASH qui pointent vers les segments partagés.
Comment Transloadit vous aide avec le format commun d’application multimédia (CMAF)
Le Robot /video/adaptive de Transloadit possède un paramètre technique dont la valeur cmaf est documentée comme produisant une sortie CMAF basée sur FFmpeg, avec des manifestes MPEG-DASH et HLS qui référencent les mêmes segments fMP4. Avec cette technique, playlist_name nomme le manifeste DASH et hls_playlist_name nomme la liste de lecture principale HLS. Le Robot est normalement utilisé après /video/encode, qui produit les variantes.
Avec cmaf, la documentation indique que tout l’audio est placé dans un seul ensemble d’adaptation étiqueté avec la première langue audio et que les entrées contenant plus d’une langue audio connue ajoutent un avertissement à l’Assembly ; pour l’audio multilingue, elle recommande technique: "hls" avec audio_group: true. La page du Robot ne décrit aucune option de chiffrement du contenu ni de blocs à faible latence.
Explorer les possibilités de Transloadit en matière de formats de fichiers et de compression
Références
- MPEG : MPEG-A, partie 19, format commun d’application multimédia (CMAF) pour les médias segmentés (éditions d’ISO/IEC 23000-19)
- Apple : à propos du format commun d’application multimédia avec HTTP Live Streaming (HLS)
- IETF draft-pantos-hls-rfc8216bis-22 : HTTP Live Streaming, édition 2 (section 2 Vue d’ensemble, section 3.1.2 MPEG-4 fragmenté, section 3.2 Segments partiels et section 8 Compatibilité des versions du protocole)
- Demande de modification de DASH-IF pour IOP v4.3 : modes à faible latence pour DASH (2020)
- Microsoft Learn : modes de chiffrement des contenus PlayReady (prise en charge de cenc et cbcs selon la version du client)
- Documentation des formats de FFmpeg : multiplexeur dash, multiplexeur hls (hls_segment_type) et option movflag cmaf
- Problème Shaka Packager #1475 : question sur l’utilisation de différents schémas de protection par sortie