Configuration de profils et autres propriétés de fichier ASF
[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.]
Les éléments suivants décrivent comment effectuer diverses tâches liées à la création de fichiers ASF. Certaines des interfaces mentionnées dans cette rubrique sont documentées dans la documentation du Kit de développement logiciel (SDK) au format Windows Media.
Création d’un profil
Les profils ASF sont décrits en détail dans le Kit de développement logiciel (SDK) au format Windows Media ; Essentiellement, ils décrivent les attributs d’un fichier de format Windows Media, tels que la vitesse de transmission, le nombre et le type de flux, ainsi que la qualité de la compression. Le filtre utilise le profil pour déterminer le type de fichier de format Windows Media à écrire, le nombre de broches d’entrée qu’il doit configurer et les types de médias qu’il peut accepter.
Pour créer un profil personnalisé, utilisez directement le Kit de développement logiciel (SDK) Windows Media Format pour créer un objet de gestionnaire de profils à l’aide de la fonction WMCreateProfileManager . Ensuite, créez le profil et passez-le à l’enregistreur ASF WM à l’aide de la méthode IConfigASFWriter::ConfigureFilterUsingProfile . Il s’agit de la seule façon de configurer le filtre avec un profil qui utilise les codecs Windows Media Audio et Video 9 Series. Les profils système des versions antérieures de ces codecs peuvent être ajoutés à l’aide de la méthode IConfigASFWriter::ConfigureFilterUsingProfileGuid .
Vous pouvez réinitialiser le profil pendant que les broches d’entrée du filtre sont connectées, tant que le nouveau profil ne nécessite pas de broches d’entrée supplémentaires. Par exemple, si vous modifiez le profil d’un profil audio à une entrée uniquement par un profil audio et vidéo à deux entrées, seule la broche audio est reconnectée et aucune nouvelle broche n’est créée pour le flux vidéo.
Ajout de métadonnées
Pour ajouter des métadonnées à un fichier, interrogez le filtre WM ASF Writer pour l’interface IWMHeaderInfo . Une fois qu’un profil a été attribué au filtre, utilisez les méthodes d’interface IWMHeaderInfo pour écrire les métadonnées.
Indexation d’un fichier
L’enregistreur ASF WM crée des fichiers indexés temporellement par défaut. Pour créer un fichier indexé par frame, utilisez la méthode IConfigAsfWriter::SetIndexMode pour désactiver toute l’indexation, puis créez le fichier. Une fois l’opération terminée, utilisez directement le Kit de développement logiciel (SDK) Windows Media Format pour créer un index basé sur une trame pour le fichier.
encodage Two-Pass
L’encodage à deux passes est pris en charge uniquement sur les codecs Windows Media de la version 8 et ultérieure. Placez l’enregistreur ASF WM en mode de prétraitement en appelant IConfigAsfWriter2::SetParam et en spécifiant AM_CONFIGASFWRITER_PARAM_MULTIPASS dans le paramètre dwParam et TRUE dans le paramètre dwParam1 .
Ensuite, exécutez le graphique de filtre. Lorsque tous les passes de prétraitement sont terminées (en général, une seule passe de prétraitement est effectuée), l’application reçoit un événement EC_PREPROCESS_COMPLETE du filtre. Lorsque cet événement est reçu, utilisez IMediaSeeking::SetPositions pour réinitialiser le pointeur de flux au début, puis réexécutez le graphique de filtre. Après la dernière passe (généralement la deuxième passe), l’application reçoit un événement EC_COMPLETE pour indiquer que le processus d’encodage est terminé. Si un passage de prétraitement est annulé avant la réception de l’événement EC_PREPROCESS_COMPLETE , appelez IConfigAsfWriter2::ResetMultiPassState pour réinitialiser le filtre avant de tenter une autre exécution de prétraitement.
Il est uniquement nécessaire de définir le paramètre AM_CONFIGASFWRITER_PARAM_MULTIPASS sur FALSE si vous souhaitez sortir complètement le filtre du mode de prétraitement.
Important
Il incombe à l’application d’activer le mode de prétraitement en fonction du profil qui sera utilisé pour l’encodage. Certains profils nécessitent un encodage à deux passes ; si vous tentez d’encoder un fichier avec un tel profil et que vous ne définissez pas AM_CONFIGASFWRITER_PARAM_MULTIPASS sur TRUE, une erreur de EC_USERABORT se produit. Pour plus d’informations, consultez la documentation du Kit de développement logiciel (SDK) au format Windows Media.
Obtention et définition des propriétés de la mémoire tampon au moment de l’exécution
Dans certains scénarios, par exemple si vous souhaitez forcer l’insertion d’images clés lors de l’écriture d’un fichier, une application peut avoir besoin d’obtenir ou de définir des informations sur une mémoire tampon Windows Media au moment de l’exécution. Les filtres WM ASF Reader et WM ASF Writer prennent tous deux en charge un mécanisme de rappel qui permet à une application d’accéder à l’interface INSSBuffer3 sur chaque mémoire tampon de média individuelle lors de la lecture ou de l’écriture de fichiers. Les applications peuvent utiliser cette interface pour désigner des exemples spécifiques en tant que trames clés, définir des codes de temps SMPTE, spécifier des paramètres d’entrelacement ou ajouter n’importe quel type de données privées à un flux.
Utilisez l’interface IAMWMBufferPass pour vous inscrire aux rappels à partir de l’épingle qui gère le flux vidéo. L’épingle appelle votre méthode IAMWMBufferPassCallback::Notify pour chaque mémoire tampon.
Pixels non carrés
L’enregistreur ASF WM se connecte à un filtre amont, tel que le décodeur DV, qui génère des informations sur les proportions des pixels. L’enregistreur ASF WM écrit ces informations en tant qu’extensions d’unités de données pour chaque exemple du fichier.
Lorsque le lecteur WM ASF rencontre des informations sur les proportions de pixels dans l’en-tête de fichier ou dans les extensions d’unités de données pour les exemples, il propose un format VIDEOINFOHEADER2 comme premier choix sur son broche de sortie. Les membres dwPictAspectRatioX et dwPictAspectRatioY de la structure, qui décrivent les proportions du rectangle vidéo, seront correctement ajustés pour prendre en compte les proportions de pixels.
Maintenance du format entrelacé
Si vous capturez une vidéo entrelacée à partir d’un téléviseur ou d’une caméra DV, vous pouvez conserver la vidéo d’origine en tant que champs indépendants si vous vous attendez à ce que le fichier codé soit lu sur un téléviseur ou un autre appareil d’affichage entrelacé. (Les moniteurs d’ordinateur sont des appareils d’analyse progressive.) Si vous désinterlacez une vidéo, puis la réinterlacez pour la lire sur un téléviseur, une perte de données sera occasionnée. Dans un fichier ASF, les informations d’entrelacement sont stockées en tant qu’extensions d’unités de données que l’application applique à chaque exemple à l’aide de la méthode IAMWMBufferPassCallback décrite précédemment. Pour encoder un fichier qui conserve les paramètres d’interlacement d’origine, procédez comme suit :
Implémentez une classe qui prend en charge IAMWMBufferPassCallback et écrivez une fonction Notify qui définit les indicateurs d’entrelacement pour chaque exemple. Cette fonction sera appelée par l’enregistreur ASF WM avant qu’il traite chaque exemple.
// Set to WM_CT_TOP_FIELD_FIRST if that is your format. BYTE flag = WM_CT_INTERLACED | WM_CT_BOTTOM_FIELD_FIRST; HRESULT hr = S_OK; hr = pNSSBuffer3->SetProperty( WM_SampleExtensionGUID_ContentType, (void*) &flag, WM_SampleExtension_ContentType_Size );
Définissez les extensions d’unité de données sur le profil avant de passer le profil au filtre.
hr = pWMStreamConfig2->AddDataUnitExtension( WM_SampleExtensionGUID_ContentType, WM_SampleExtension_ContentType_Size, NULL, 0 );
Après avoir configuré le filtre avec le profil, obtenez l’interface IWMWriterAdvanced2 à partir de l’enregistreur WM ASF et appelez la méthode SetInputSettings .
``
``
// Must do this first. hr = pConfigAsfWriter2->ConfigureFilterUsingProfile(pProfile); CComPtr<IServiceProvider> pProvider; CComPtr<IWMWriterAdvanced2> pWMWA2; hr = pConfigAsfWriter2->QueryInterface( __uuidof(IServiceProvider), (void**)&pProvider); if (SUCCEEDED(hr)) { hr = pProvider->QueryService(IID_IWMWriterAdvanced2, IID_IWMWriterAdvanced2, (void**)&pWMWA2); } BOOL pValue = TRUE; // Set the first parameter to your actual input number. hr = pWMWA2->SetInputSetting(0, g_wszInterlacedCoding, WMT_TYPE_BOOL, (BYTE*) &pValue, sizeof(WMT_TYPE_BOOL));
Rubriques connexes