Media Foundation : notions essentielles

Si vous débutez avec les médias numériques, cette rubrique présente certains concepts que vous devez comprendre avant d’écrire une application Media Foundation.

Flux

Un flux est une séquence de données multimédias de type uniforme. Les types les plus courants sont audio et vidéo, mais un flux peut contenir presque n’importe quel type de données, y compris du texte, des commandes de script et des images fixes. Le terme flux dans cette documentation n’implique pas la livraison sur un réseau. Un fichier multimédia destiné à la lecture locale contient également des flux.

En règle générale, un fichier multimédia contient un seul flux audio, ou exactement un flux vidéo et un flux audio. Toutefois, un fichier multimédia peut contenir plusieurs flux du même type. Par exemple, un fichier vidéo peut contenir des flux audio dans plusieurs langues différentes. Au moment de l’exécution, l’application sélectionne le flux à utiliser.

Compression

La compression fait référence à tout processus qui réduit la taille d’un flux de données en supprimant des informations redondantes. Les algorithmes de compression se répartissent en deux grandes catégories :

  • Compression sans perte . À l’aide d’un algorithme sans perte, les données reconstruites sont identiques à l’original.
  • Compression avec perte . À l’aide d’un algorithme de perte, les données reconstruites sont une approximation de l’original, mais ne correspondent pas exactement.

Dans la plupart des autres domaines, la compression avec perte n’est pas acceptable. (Imaginez récupérer une « approximation » d’une feuille de calcul!) Mais les schémas de compression avec perte sont bien adaptés à l’audio et à la vidéo, pour deux raisons.

La première raison concerne la physique de la perception humaine. Lorsque nous écoutons un son complexe, comme un enregistrement de musique, certaines des informations contenues dans ce son ne sont pas perceptibles à l’oreille. Avec l’aide de la théorie du traitement du signal, il est possible d’analyser et de séparer les fréquences qui ne peuvent pas être perçues. Ces fréquences peuvent être supprimées sans effet perceptif. Bien que l’audio reconstruit ne corresponde pas exactement à l’original, il sonnera le même pour l’écouteur. Des principes similaires s’appliquent à la vidéo.

Deuxièmement, une certaine dégradation de la qualité du son ou de l’image peut être acceptable, selon l’objectif prévu. Dans la téléphonie, par exemple, l’audio est souvent fortement compressé. Le résultat est assez bon pour une conversation téléphonique, mais vous ne voudriez pas écouter un orchestre symphonique par téléphone.

La compression est également appelée encodage, et un appareil qui encode est appelé encodeur. Le processus inverse est le décodage, et l’appareil est un décodeur naturellement appelé décodeur. Le terme général pour les encodeurs et les décodeurs est codec. Les codecs peuvent être implémentés dans du matériel ou des logiciels.

La technologie de compression a changé rapidement depuis l’avènement des médias numériques, et un grand nombre de schémas de compression sont utilisés aujourd’hui. C’est l’un des défis main pour la programmation multimédia numérique.

Conteneurs multimédias

Il est rare de stocker un flux audio ou vidéo brut sous la forme d’un fichier informatique, ou d’en envoyer un directement sur le réseau. D’une part, il serait impossible de décoder un tel flux, sans savoir à l’avance quel codec utiliser. Par conséquent, les fichiers multimédias contiennent généralement au moins certains des éléments suivants :

  • En-têtes de fichier qui décrivent le nombre de flux, le format de chaque flux, etc.
  • Index qui active l’accès aléatoire au contenu.
  • Métadonnées qui décrivent le contenu (par exemple, l’artiste ou le titre).
  • En-têtes de paquets, pour activer la transmission réseau ou l’accès aléatoire.

Cette documentation utilise le terme conteneur pour décrire l’ensemble du package de flux, d’en-têtes, d’index, de métadonnées, etc. La raison d’utiliser le terme conteneur plutôt que fichier est que certains formats de conteneur sont conçus pour la diffusion en direct. Une application peut générer le conteneur en temps réel, sans le stocker dans un fichier.

Le format de fichier AVI est un premier exemple de conteneur de média. D’autres exemples incluent MP4 et Advanced Systems Format (ASF). Les conteneurs peuvent être identifiés par l’extension de nom de fichier (par exemple, .mp4) ou par type MIME.

Le diagramme suivant montre une structure classique pour un conteneur multimédia. Le diagramme ne représente aucun format spécifique ; les détails de chaque format varient considérablement.

diagramme montrant un conteneur multimédia classique

Notez que la structure affichée dans le diagramme est hiérarchique, avec des informations d’en-tête qui apparaissent au début du conteneur. Cette structure est typique de nombreux (mais pas tous) formats de conteneur. Notez également que la section données contient des paquets audio et vidéo entrelacés. Ce type d’entrelacement est courant dans les conteneurs multimédias.

Le terme multiplexing fait référence au processus de paquetage des flux audio et vidéo et de l’entrelacement des paquets dans le conteneur. Le processus inverse, le réassemblage des flux à partir des données paquetées, est appelé démultiplexation.

Formats

Dans les médias numériques, le terme format est ambigu. Un format peut faire référence au type d’encodage, tel que la vidéo H.264, ou au conteneur, tel que MP4. Cette distinction est souvent confuse pour les utilisateurs ordinaires. Les noms donnés aux formats multimédias ne sont pas toujours utiles. Par exemple, MP3 fait référence à la fois à un format d’encodage (MPEG-1 Audio Layer 3) et à un format de fichier.

Toutefois, la distinction est importante, car la lecture d’un fichier multimédia implique en fait deux étapes :

  1. Tout d’abord, le conteneur doit être analysé. Dans la plupart des cas, le nombre de flux et le format de chaque flux ne peuvent pas être connus tant que cette étape n’est pas terminée.
  2. Ensuite, si les flux sont compressés, ils doivent être décodés à l’aide des décodeurs appropriés.

Cela conduit tout naturellement à une conception logicielle où des composants distincts sont utilisés pour analyser les conteneurs et décoder des flux. En outre, cette approche se prête à un modèle de plug-in, afin que les tiers puissent fournir leurs propres analyseurs et codecs. Sur Windows, le modèle COM (Component Object Model) fournit un moyen standard de séparer une API de son implémentation, ce qui est une exigence pour tout modèle de plug-in. Pour cette raison (entre autres), Media Foundation utilise des interfaces COM.

Le diagramme suivant montre les composants utilisés pour lire un fichier multimédia :

diagramme montrant les composants pour lire un fichier multimédia

L’écriture d’un fichier multimédia nécessite également deux étapes :

  1. Encodage des données audio/vidéo non compressées.
  2. Placer les données compressées dans un format de conteneur particulier.

Le diagramme suivant montre les composants utilisés pour écrire un fichier multimédia :

diagramme montrant les composants à écrire un fichier multimédia.

Guide de programmation Media Foundation