Notes
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.
[Le composant décrit dans cette page, de renderer vidéo amélioré, est une fonctionnalité héritée. Il a été remplacé par le Simple Video Renderer (SVR) exposé via les composants MediaPlayer et IMFMediaEngine. Pour lire du contenu vidéo, vous devez envoyer des données dans l’un de ces composants et les autoriser à instancier le nouveau convertisseur vidéo. Ces composants ont été optimisés pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer ou le niveau inférieur IMFMediaEngine API pour lire des médias vidéo dans Windows au lieu de l’EVR, 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.]
Cette rubrique explique comment écrire un mélangeur personnalisé pour le convertisseur vidéo amélioré (EVR). Vous pouvez utiliser un mélangeur personnalisé avec le récepteur multimédia MEDIA Foundation EVR ou le filtre EVR DirectShow. Pour plus d’informations sur les mélangeurs et les présentateurs, consultez de renderer vidéo amélioré.
Le mélangeur est une transformation Media Foundation (MFT) avec une ou plusieurs entrées (le flux de référence plus les sous-flux) et une sortie. Le flux d’entrée reçoit des exemples en amont. Le flux de sortie fournit des exemples au présentateur. L’EVR est responsable de l’appel IMFTransform ::P rocessInput sur le mélangeur, et le présentateur est responsable de l’appel IMFTransform ::P rocessOutput.
Au minimum, un mélangeur EVR doit implémenter les interfaces suivantes :
Interface | Description |
---|---|
IMFTransform | Fournit des fonctionnalités MFT de base. |
IMFTopologyServiceLookupClient | Permet au mélangeur d’obtenir des interfaces à partir de l’EVR. |
IMFVideoDeviceID | Permet au mélangeur d’obtenir des interfaces à partir de l’EVR. |
IMFAttributes | Utilisé pour exposer l’attribut MF_SA_D3D_AWARE à l’EVR. |
Si vous le souhaitez, un MFT peut implémenter l’une des interfaces suivantes :
Interface | Description |
---|---|
IEVRTrustedVideoPlugin | Obligatoire pour lire du contenu protégé. |
IMFGetService | Expose des interfaces telles que IMFVideoMixerBitmap et IMFVideoProcessor à l’application. |
IMFQualityAdvise | Permet au responsable de la qualité d’ajuster la qualité de la vidéo. |
IMFVideoMixerBitmap | Permet à l’application de combiner une bitmap statique sur la vidéo. |
IMFVideoPositionMapper | Mappe les coordonnées sur l’image vidéo de sortie pour les coordonnées sur l’image vidéo d’entrée. |
IMFVideoProcessor | Expose certaines fonctionnalités de traitement vidéo DXVA à l’application. |
La négociation de format avec le mélangeur fonctionne comme suit :
L’EVR définit le type de média sur le flux de référence.
L’EVR appelle IMFVideoPresenter ::P rocessMessage sur le présentateur avec le message MFVP_MESSAGE_INVALIDATEMEDIATYPE.
Le présentateur définit le type de média sur le flux de sortie du mélangeur.
L’EVR définit le type de média sur les sous-flux.
Si le type de média sur le flux de référence change, les autres types de supports du mélangeur ne sont plus valides. La méthode IMFTransform ::P rocessOutput du mélangeur échoue et retourne MF_E_TRANSFORM_STREAM_CHANGE. Le présentateur ne doit rien faire à ce stade. L’EVR lance à nouveau le processus de négociation de format.
Lorsqu’un flux d’entrée atteint la fin du flux, l’EVR appelle IMFTransform ::P rocessMessage sur le mélangeur avec MFT_MESSAGE_NOTIFY_END_OF_STREAM.
Le mélangeur envoie les événements suivants à l’EVR, à l’aide de l’interface IMediaEventSink d’EVR. Cette interface est documentée dans la documentation du Kit de développement logiciel (SDK) DirectShow.
Événement | Description |
---|---|
EC_SAMPLE_NEEDED | Le mélangeur nécessite un nouvel exemple d’entrée. |
L’EVR peut appeler ProcessOutput sur le mélangeur avant le démarrage du streaming. Le mélangeur ne doit pas échouer ces appels. Au lieu de cela, il doit remplir la surface de sortie avec des pixels noirs. Le mélangeur doit continuer à remplir des échantillons de sortie de remplissage de couleur jusqu’à ce qu’il reçoive un message MFT_MESSAGE_NOTIFY_BEGIN_STREAMING ou que la méthode ProcessInput soit appelée. Si le mélangeur reçoit un message MFT_MESSAGE_NOTIFY_END_STREAMING, il doit revenir en mode remplissage de couleur.
Implémentation de IMFVideoDeviceID
L’interface IMFVideoDeviceID contient une méthode, GetDeviceID, qui retourne un GUID d’appareil. Le GUID de l’appareil garantit que le présentateur et le mélangeur utilisent des technologies compatibles. Si les GUID de l’appareil ne correspondent pas, l’EVR ne parvient pas à initialiser.
Le mélangeur standard et le présentateur utilisent Direct3D 9, avec le GUID de l’appareil égal à IID_IDirect3DDevice9. Si vous envisagez d’utiliser votre présentateur personnalisé avec le mélangeur standard, le GUID de l’appareil du présentateur doit être IID_IDirect3DDevice9. Si vous remplacez les deux composants, vous pouvez définir un nouveau GUID d’appareil.
Implémentation de IMFTopologyServiceLookupClient
Le mélangeur doit implémenter l’interface IMFTopologyServiceLookupClient. Avant le début de la diffusion en continu, l’EVR appelle IMFTopologyServiceLookupClient ::InitServicePointers et passe un pointeur vers l’interface IMFTopologyServiceLookup. Le mélangeur utilise ce pointeur pour obtenir des pointeurs d’interface à partir de l’EVR.
Au minimum, le mélangeur doit rechercher l’interface suivante :
Lorsque l’EVR appelle IMFTopologyServiceLookupClient ::ReleaseServicePointers, le mélangeur doit libérer tous les pointeurs obtenus à partir de l’appel vers InitServicePointers.
Attributs de mixage
Un mélangeur doit prendre en charge les attributs suivants.
Attribut | Description |
---|---|
MF_SA_D3D_AWARE | Spécifie si le mélangeur prend en charge l’accélération vidéo DirectX (DXVA). |
MF_SA_REQUIRED_SAMPLE_COUNT | Nombre d’échantillons vidéo que l’EVR doit allouer pour chaque flux de mélangeur. Cet attribut s’applique aux flux individuels ; utilisez le magasin d’attributs retourné par IMFTransform ::GetInputStreamAttributes. |
Définition du mélangeur sur l’EVR
Pour définir un mélangeur personnalisé sur l’EVR, appelez IMFVideoRenderer ::InitializeRenderer. Le filtre DirectShow EVR et le récepteur multimédia EVR implémentent cette méthode.
objet d’activation EVR. Si vous utilisez l’objet d’activation EVR, vous pouvez fournir un mélangeur personnalisé en définissant l’un des attributs suivants sur l’objet d’activation EVR :
Attribut | Description |
---|---|
MF_ACTIVATE_CUSTOM_VIDEO_MIXER_ACTIVATE | Pointeur vers un objet d’activation pour le mélangeur. L’objet d’activation doit implémenter l’interface IMFActivate. |
MF_ACTIVATE_CUSTOM_VIDEO_MIXER_CLSID | CLSID du mélangeur. |
Rubriques connexes