Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngineet audio/vidéo capture dans 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 capture audio/vidéo dans Media Foundation au lieu de directShow, lorsque cela est 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.]
L’horodatage définit les heures de début et de fin d’un échantillon multimédia, mesurées en temps de flux. L’horodatage est parfois appelé temps de présentation. Lors de la lecture du reste de cet article, il est important de se rappeler que tous les formats n’utilisent pas les horodatages de la même façon. Par exemple, tous les exemples MPEG ne sont pas horodatés. Dans les graphiques de filtre MPEG, l’horodatage n’est pas appliqué à chaque image tant qu’ils ne sont pas générés par le décodeur.
Lorsqu’un filtre de convertisseur reçoit un exemple, il planifie le rendu en fonction de l’horodatage. Si l’exemple arrive en retard ou n’a pas d’horodatage, le filtre affiche immédiatement l’exemple. Sinon, le filtre attend jusqu’à l’heure de début de l’exemple avant qu’il ne restitue l’exemple. (Il attend l’heure de début en appelant la méthode IReferenceClock ::AdviseTime.)
Les filtres sources et les filtres d’analyseur sont responsables de la définition des horodatages corrects sur les exemples qu’ils traitent. Utilisez les instructions suivantes.
- Lecture de fichier : le premier exemple est horodaté avec une heure de début de zéro. Les horodatages suivants sont déterminés par la longueur de l’échantillon et le taux de lecture, qui lui-même est déterminé par le format de fichier. Le filtre qui analyse le fichier est chargé de calculer les horodatages corrects (par exemple, le AVI Splitter).
- Capture vidéo et audio : chaque échantillon est horodaté avec une heure de début égale à l’heure de diffusion lors de sa capture, avec les avertissements suivants :
- Les images vidéo d’une broche d’aperçu (par opposition à une broche de capture) ne sont pas horodatées. En raison de la latence du graphique, une image vidéo marquée avec le temps de capture arrive toujours en retard au convertisseur vidéo. Cela peut entraîner la suppression des images par le renderer, dans une tentative de contrôle de qualité. Pour plus d’informations sur le contrôle de qualité, consultez Quality-Control Management.
- Capture audio : le filtre de capture audio utilise son propre ensemble de mémoires tampons, qui sont distinctes de celles utilisées par le pilote audio. Le pilote audio remplit les mémoires tampons du filtre de capture à intervalles fixes. L’intervalle dépend du pilote, mais généralement n’est pas supérieur à 10 millisecondes. Les horodatages sur les exemples audio reflètent l’heure à laquelle le pilote a rempli les mémoires tampons du filtre de capture audio. Ces heures peuvent être légèrement inexactes, en particulier si l’application utilise une très petite taille de mémoire tampon. Toutefois, les temps multimédias reflètent avec précision le nombre d’échantillons audio dans la mémoire tampon.
- Filtres mux : selon le format de sortie, un filtre mux peut avoir besoin de générer des horodatages ou non. Par exemple, le format de fichier AVI utilise une fréquence d’images fixe sans horodatage, de sorte que le filtre AVI Mux suppose que les échantillons arrivent à peu près au bon moment. Si les horodatages entrants affichent un écart supérieur à une image, toutefois, l’interface AVI Mux écrit une entrée d’index avec la taille zéro, pour indiquer une trame supprimée. Lors de la lecture de fichiers, de nouveaux horodatages sont générés au moment de l’exécution, comme décrit précédemment.
Pour définir l’horodatage sur un exemple, appelez la méthode IMediaSample ::SetTime.
Media Times
Si vous le souhaitez, le filtre peut également spécifier un temps multimédia pour l’exemple. Dans un flux vidéo, le temps multimédia représente le numéro d’image. Dans un flux audio, le temps multimédia représente l’exemple de numéro dans le paquet. Par exemple, si chaque paquet contient une seconde de 44,1 kilohertz (kHz), le premier paquet a une heure de début de média de zéro et une heure d’arrêt du média de 44100. Dans un flux pouvant être recherché, l’heure du média est toujours relative à l’heure de début du flux. Par exemple, supposons que vous cherchiez à 2 secondes à partir du début d’un flux vidéo de 15 fps. Le premier exemple de média après la recherche a un horodatage de zéro, mais une heure multimédia de 30.
Les filtres de renderer et de mux peuvent utiliser le temps multimédia pour déterminer si des images ou des échantillons ont été supprimés, en vérifiant les lacunes. Toutefois, les filtres ne sont pas nécessaires pour définir l’heure du média. Pour définir l’heure du média sur un exemple, appelez la méthode IMediaSample ::SetMediaTime.
Rubriques connexes