Écriture d’un fichier Windows Media dans DES
[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La 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.]
[Cette API n’est pas prise en charge et peut être modifiée ou indisponible à l’avenir.]
Cette section explique comment écrire un fichier Windows Media à l’aide de DirectShow Editing Services (DES).
Important
N’utilisez pas le moteur de rendu intelligent pour écrire des fichiers Windows Media. Utilisez toujours le moteur de rendu de base (CLSID_RenderEngine).
Pour écrire un fichier Windows Media, procédez comme suit :
Appelez SetSite sur le moteur de rendu, avec un pointeur vers votre fournisseur de clé.
Générez le front-end du graphe. (Voir Rendu d’un projet.)
Créez le filtre WM ASF Writer et ajoutez-le au graphique.
Utilisez l’interface IFileSinkFilter sur le filtre WM ASF Writer pour définir le nom de fichier.
Configurez l’enregistreur WM ASF pour utiliser un profil Windows Media. Chaque profil a un nombre prédéfini de flux. Vous devez choisir un profil qui correspond aux groupes de votre projet.
L’interface IConfigAsfWriter contient plusieurs méthodes différentes pour définir le profil. Par exemple, la méthode ConfigureFilterUsingProfileGuid spécifie un profil système en tant que GUID. Vous pouvez également utiliser des méthodes Windows Media Format pour obtenir un pointeur IWMProfile , puis appeler IConfigAsfWriter::ConfigureFilterUsingProfile. Pour plus d’informations, consultez Configuration de l’enregistreur ASF.
Connectez le serveur frontal à l’enregistreur ASF. Le front-end du graphique contient une broche de sortie pour chaque groupe. En supposant que vous avez spécifié un profil compatible, l’enregistreur ASF doit avoir un ensemble de broches d’entrée correspondant. Connectez chaque broche de sortie à la broche d’entrée correspondante. La méthode la plus simple consiste à utiliser la méthode ICaptureGraphBuilder2::RenderStream . Tout d’abord, créez un instance du Générateur de graphiques de capture et initialisez-le avec un pointeur vers le Gestionnaire de graphes de filtre :
ICaptureGraphBuilder2 *pBuild = 0; hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, 0, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void**)&pBuild); pBuild->SetFiltergraph(pGraph);
Ensuite, récupérez la broche de sortie pour chaque groupe en appelant la méthode IRenderEngine::GetGroupOutputPin . Appelez RenderStream pour connecter le code pin à l’enregistreur ASF :
long cGroups = 0; hr = pTimeline->GetGroupCount(&cGroups); for (long i = 0; i < cGroups; i++) { IPin *pPin; hr = pRenderEngine->GetGroupOutputPin(i, &pPin); if (SUCCEEDED(hr)) { hr = pBuild->RenderStream(0, 0, pPin, 0, pASF); } pPin->Release(); } pBuild->Release
Rubriques connexes