Partager via


Flux facultatifs

[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 DMO peut désigner certains de ses flux de sortie comme facultatifs. Un flux facultatif produit des données que l’application peut ignorer, soit complètement, soit sur des échantillons occasionnels. Par exemple, un flux facultatif peut contenir des informations supplémentaires sur un flux principal.

Pour savoir si un flux est facultatif, appelez la méthode IMediaObject::GetOutputStreamInfo et case activée le paramètre pdwFlags. Les flux facultatifs retournent l’indicateur DMO_OUTPUT_STREAMF_DISCARDABLE ou l’indicateur DMO_OUTPUT_STREAMF_OPTIONAL. Ces indicateurs signifient presque la même chose; une différence mineure entre elles sera expliquée sous peu.

Si un flux est facultatif, le client peut demander au DMO d’ignorer les données de ce flux lorsqu’il traite la sortie. Pour ce faire, appelez la méthode IMediaObject::P rocessOutput et définissez la mémoire tampon de sortie sur NULL pour chaque flux que vous souhaitez ignorer. (La mémoire tampon de sortie est spécifiée dans le membre pBuffer du DMO_OUTPUT_DATA_BUFFER.) Définissez également l’indicateur DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER dans le paramètre dwFlags .

Pour chaque flux où le pointeur pBuffer a la valeur NULL, le DMO tente d’ignorer les données. Si le flux est facultatif, le DMO a la garantie d’ignorer les données. Si le flux n’est pas facultatif, le DMO ignore les données dans la mesure du possible, mais il n’est pas garanti de le faire. S’il ne peut pas ignorer les données, il définit l’indicateur DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE. Si vous définissez un pointeur pBuffer sur NULL , mais que vous ne définissez pas l’indicateur DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER, le DMO n’ignore pas les données. Dans ce cas, le DMO met en mémoire tampon la sortie en interne ou échoue simplement à l’appel ProcessOutput .

La seule différence fonctionnelle entre l’indicateur DMO_OUTPUT_STREAMF_OPTIONAL et l’indicateur DMO_OUTPUT_STREAMF_DISCARDABLE est la suivante :

  • L’indicateur DMO_OUTPUT_STREAMF_OPTIONAL indique que le client n’a pas besoin de définir un type de média sur ce flux. Toutefois, si le client commence à traiter des données sans définir le type de média pour ce flux, il doit ignorer les données de ce flux pendant toute la durée de la diffusion en continu. Si vous souhaitez ignorer les exemples de manière sélective, vous devez définir le type de média.
  • L’indicateur DMO_OUTPUT_STREAMF_DISCARDABLE indique que, bien que le flux soit facultatif, il nécessite toujours un type de média.

Hébergement direct d’un DMO