Combinaison de la capture vidéo et de la préversion

[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.]

Les sections précédentes décrivent comment capturer des vidéos dans différents formats de fichier. La section Aperçu de la vidéo explique comment créer un graphique en préversion en direct. Toutefois, de nombreuses applications doivent effectuer les deux à la fois. Pour créer un graphique d’aperçu et d’écriture de fichiers combiné, effectuez simplement deux appels à ICaptureGraphBuilder2::RenderStream :

// Render the preview stream to the video renderer.
hr = pBuild->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pCap, 
    NULL, NULL);

// Render the capture stream to the mux.
hr = pBuild->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, pCap, 
    NULL, pMux);

Dans ce code, le Générateur de graphes de capture masque certains détails :

  • Si le filtre de capture a une broche d’aperçu ou de port vidéo, plus une broche de capture, la méthode RenderStream affiche simplement les deux broches, comme illustré dans l’illustration suivante.

    graphique de capture et d’aperçu

  • Si le filtre n’a qu’une broche de capture, le Générateur de graphiques de capture utilise le filtre Smart Tee pour fractionner le flux de capture. L’illustration suivante montre le graphique avec un Smart Tee.

    capture et aperçu du graphique avec filtre de tee intelligent

Le filtre Smart Tee a une broche de capture et une épingle d’aperçu. Il prend un seul flux vidéo à partir du filtre de capture et le fractionne en deux flux, l’un pour la capture et l’autre pour la préversion. Pour maintenir le débit sur la broche de capture, l’épingle d’aperçu supprime les images en fonction des besoins. Il supprime également les horodatages de chaque échantillon avant de le remettre, pour les raisons décrites dans la rubrique Filtres de capture vidéo DirectShow.

Bien que le Smart Tee fractionne le flux, il ne duplique pas physiquement les données vidéo. Au lieu de cela, il utilise des exemples d’objets multimédias personnalisés qui partagent les mémoires tampons. Les exemples sont marqués « lecture seule » pour garantir que les filtres en aval n’écrivent pas sur les données.

Si votre graphe de capture a une fenêtre d’aperçu, plusieurs choses peuvent entraîner l’arrêt du Gestionnaire de graphes de filtres pour arrêter le graphe entier, y compris le flux de capture :

  • Verrouillage de l’ordinateur.
  • Appuyez sur Ctrl+Alt+Suppr sur un ordinateur membre d’un domaine.
  • Exécution d’une application Direct3D en plein écran, telle qu’un jeu ou un économiseur d’écran.
  • Changement de moniteur ou modification de la résolution d’affichage.
  • Exécution d’un programme qui amène Windows à afficher une boîte de dialogue Contrôle de compte d’utilisateur (UAC). (Windows Vista ou version ultérieure.)
  • Exécution d’une fenêtre DOS en plein écran.

L’un de ces événements peut interrompre la session de capture, ce qui peut entraîner une perte de données. (Voici ce qui se passe en interne : le convertisseur vidéo perd les ressources Direct3D ou DirectDraw dont il a besoin. Dans le processus de récupération de ces ressources, le convertisseur vidéo doit se reconnecter avec le filtre amont, ce qui provoque l’arrêt du graphe par le Gestionnaire de graphe de filtres.)

Deux solutions possibles à ce problème sont les suivantes :

Capture de vidéo dans un fichier