Partager via


Nouveaux segments

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

Un segment est un groupe d’exemples multimédias qui partagent une heure de début, une heure d’arrêt et une vitesse de lecture communes. La méthode IPin::NewSegment signale le début d’un nouveau segment. Il permet à un filtre source d’informer les filtres en aval que les informations de temps et de débit ont changé. Par exemple, si le filtre source recherche un nouveau point dans le flux, il appelle NewSegment avec la nouvelle heure de début.

Certains filtres en aval utilisent les informations de segment lorsqu’ils traitent des exemples. Par exemple, dans un format qui utilise la compression interframe, si l’heure d’arrêt tombe sur une image delta, le filtre source peut avoir besoin d’envoyer des exemples supplémentaires après l’heure d’arrêt. Cela permet au décodeur de décoder le cadre delta final. Pour déterminer l’image finale correcte, le décodeur fait référence à l’heure d’arrêt du segment. Autre exemple, les convertisseurs audio utilisent la vitesse de segment ainsi que le taux d’échantillonnage audio pour générer la sortie audio correcte.

Dans le modèle Push, le filtre source lance l’appel NewSegment . Dans le modèle d’extraction, cette opération est effectuée par le filtre d’analyseur. Dans les deux cas, le filtre appelle NewSegment sur la broche d’entrée en aval, qui propage l’appel au filtre suivant, jusqu’à ce que l’appel atteigne le convertisseur. Les filtres doivent sérialiser les appels NewSegment avec d’autres appels de streaming, tels que IMemInputPin::Receive.

Le temps de flux est réinitialisé à zéro après chaque nouveau segment. Les horodatages sur les échantillons livrés après le segment commencent à partir de zéro.