Share via


À propos des filtres DirectShow

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

DirectShow utilise une architecture modulaire, où chaque étape de traitement est effectuée par un objet COM appelé filtre. DirectShow fournit un ensemble de filtres standard que les applications peuvent utiliser, et les développeurs peuvent écrire leurs propres filtres personnalisés qui étendent les fonctionnalités de DirectShow. Pour illustrer, voici les étapes nécessaires pour lire un fichier vidéo AVI, ainsi que les filtres qui effectuent chaque étape :

  • Lit les données brutes du fichier en tant que flux d’octets (filtre source de fichier).
  • Examinez les en-têtes AVI et analysez le flux d’octets dans des images vidéo et des exemples audio distincts (filtre AVI Splitter).
  • Décodez les trames vidéo (différents filtres de décodeur, selon le format de compression).
  • Dessinez les trames vidéo (filtre du convertisseur vidéo).
  • Envoyez les échantillons audio à l’carte audio (filtre d’appareil DirectSound par défaut).

Ces filtres sont illustrés dans le diagramme suivant.

graphe de filtre pour lire un fichier avi avec une vidéo compressée

Comme le montre le diagramme, chaque filtre est connecté à un ou plusieurs autres filtres. Les points de connexion sont également des objets COM, appelés épingles. Les filtres utilisent des broches pour déplacer des données d’un filtre à l’autre. Les flèches du diagramme montrent la direction dans laquelle les données se déplacent. Dans DirectShow, un ensemble de filtres est appelé graphe de filtres.

Les filtres ont trois états possibles : en cours d’exécution, arrêté et suspendu. Lorsqu’un filtre est en cours d’exécution, il traite les données multimédias. Lorsqu’il est arrêté, il cesse de traiter les données. L’état suspendu est utilisé pour indiquer les données avant l’exécution ; la section Data Flow du graphe de filtre décrit ce concept plus en détail. À de très rares exceptions près, les changements d’état sont coordonnés dans l’ensemble du graphique de filtre ; tous les filtres dans le graphique changent d’état à l’unisson. Par conséquent, l’ensemble du graphique de filtre est également considéré comme en cours d’exécution, arrêté ou suspendu.

Les filtres peuvent être regroupés en plusieurs grandes catégories :

  • Un filtre source introduit des données dans le graphique. Les données peuvent provenir d’un fichier, d’un réseau, d’une caméra ou de n’importe où ailleurs. Chaque filtre source gère un type de source de données différent.
  • Un filtre de transformation prend un flux d’entrée, traite les données et crée un flux de sortie. Les encodeurs et les décodeurs sont des exemples de filtres de transformation.
  • Les filtres du convertisseur se trouvent à la fin de la chaîne. Ils reçoivent des données et les présentent à l’utilisateur. Par exemple, un convertisseur vidéo dessine des trames vidéo sur l’écran ; un convertisseur audio envoie des données audio à l’carte audio et un filtre de writer de fichiers écrit des données dans un fichier.
  • Un filtre de fractionnement fractionne un flux d’entrée en deux sorties ou plus, en analysant généralement le flux d’entrée en cours de route. Par exemple, le séparateur AVI analyse un flux d’octets dans des flux vidéo et audio distincts.
  • Un filtre mux prend plusieurs entrées et les combine en un seul flux. Par exemple, avi Mux effectue l’opération inverse du séparateur AVI. Il prend des flux audio et vidéo et produit un flux d’octets au format AVI.

Les distinctions entre ces catégories ne sont pas absolues. Par exemple, le filtre Lecteur ASF agit à la fois comme filtre source et filtre de fractionnement.

Tous les filtres DirectShow exposent l’interface IBaseFilter , et tous les broches exposent l’interface IPin . DirectShow définit également de nombreuses autres interfaces qui prennent en charge des fonctionnalités plus spécifiques.

À propos du Gestionnaire de graphe de filtres

Data Flow dans le graphe de filtres

Filtres DirectShow