Fournisseurs de métadonnées personnalisés pour les fichiers multimédias
Cette rubrique explique comment écrire un gestionnaire de propriétés de shell personnalisé pour une source de média Microsoft Media Foundation.
Notes
Pour obtenir des informations générales sur les fournisseurs de métadonnées dans Media Foundation, consultez Metadata Media. Cette rubrique décrit les gestionnaires de propriétés de Shell. elle ne décrit pas l’interface de métadonnées de la version 1, IMFMetadata.
Les métadonnées sont étroitement liées au format du fichier. Dans Media Foundation, les formats de fichier sont représentés par des sources multimédias. Si vous souhaitez prendre en charge les métadonnées pour un format qui n’est pas pris en charge en mode natif dans Media Foundation, vous devez implémenter une source de média personnalisée avec un gestionnaire de propriétés. Le gestionnaire de propriétés permet au système de propriétés de Shell de lire et d’écrire des métadonnées efficacement.
Un gestionnaire de propriétés est un objet COM qui implémente les interfaces suivantes :
Le cas échéant, elle peut également exposer l’interface suivante :
Si le système de propriétés de l’interpréteur de commandes doit obtenir les métadonnées d’un fichier, il appelle CoCreateInstance pour créer le gestionnaire de propriétés, puis appelle les méthodes de lecture et d’écriture appropriées sur l’interface IPropertyStore .
Le pipeline Media Foundation utilise un mécanisme légèrement différent, car le pipeline obtient le gestionnaire de propriétés directement à partir de la source du média. Au lieu d’appeler CoCreateInstance pour créer le gestionnaire de propriétés, le pipeline appelle IMFGetService :: GetService sur la source du média, comme décrit dans la rubrique fournisseurs de métadonnées de l’interpréteurde commandes.
Pour créer un gestionnaire de propriétés personnalisées, procédez comme suit :
- Implémentez l’interface IMFGetService pour exposer IPropertyStore. Le GUID du service est le _ service de _ gestionnaire _ de propriétés MF.
- Si la source du média est utilisée à distance, elle doit également exposer l’interface IPropertyStore par le biais de la méthode QueryInterface de la source du média, en plus de IMFGetService.
- Pour mettre le gestionnaire de propriétés à la disposition du système de propriétés de l’interpréteur de commandes, inscrivez la DLL du gestionnaire de propriétés comme décrit dans la rubrique inscription et distribution de gestionnaires de propriétés.
- La source du média est inscrite séparément, comme décrit dans gestionnaires de modèles et gestionnaires de Byte-Stream.
Astuces d’implémentation
Pour obtenir la liste des clés de propriété de métadonnées, consultez Propriétés de métadonnées pour les fichiers multimédias.
Les gestionnaires de propriétés doivent être rapides ; ils doivent fournir un accès efficace en lecture et en écriture aux métadonnées. (Considérez que l’interpréteur de commandes peut récupérer des métadonnées de centaines de fichiers.) Par conséquent, n’appelez pas MFStartup à partir de votre gestionnaire de propriétés. La fonction MFStartup introduit la latence de démarrage, car elle crée plusieurs threads de file d’attente de travail et alloue de la mémoire globale.
Dans une implémentation classique, le gestionnaire de propriétés et la source du média partagent une partie du même code d’analyse. Toutefois, une source de média utilise des appels IMFByteStream asynchrones pour les e/s, tandis que le gestionnaire de propriétés utilise l’interface IStream . Media Foundation fournit un objet d’assistance qui encapsule un flux basé sur IStream et l’expose en tant que flux IMFByteStream . Pour créer le wrapper, appelez MFCreateMFByteStreamOnStream.
Lors de la mise à jour des métadonnées, il est recommandé d’écrire les données directement dans le flux d’origine. Cette recommandation diffère du comportement de copie sur écriture de la plupart des gestionnaires de propriétés, dans lesquels une copie des données est modifiée. Les fichiers multimédias peuvent être très volumineux. par conséquent, la copie sur écriture est généralement trop lente pour une implémentation efficace. Pour désactiver la copie en écriture, définissez le paramètre de Registre ManualSafeSave , comme décrit dans la rubrique inscription et distribution de gestionnaires de propriétés.