Fournisseurs de métadonnées personnalisés pour les fichiers multimédias

Cette rubrique explique comment écrire un gestionnaire de propriétés Shell personnalisé pour une source multimédia Microsoft Media Foundation.

Notes

Pour plus d’informations sur les fournisseurs de métadonnées dans Media Foundation, consultez Métadonnées multimédias. Cette rubrique traite des gestionnaires de propriétés Shell ; elle ne décrit pas l’interface de métadonnées 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 d’un format qui n’est pas pris en charge en mode natif dans Media Foundation, vous devez implémenter une source multimédia personnalisée avec un gestionnaire de propriétés. Le gestionnaire de propriétés permet au système de propriétés Shell de lire et d’écrire efficacement les métadonnées.

Un gestionnaire de propriétés est un objet COM qui implémente les interfaces suivantes :

Si vous le souhaitez, il peut également exposer l’interface suivante :

Si le système de propriétés Shell doit obtenir des métadonnées pour 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 directement le gestionnaire de propriétés à partir de la source multimédia. Au lieu d’appeler CoCreateInstance pour créer le gestionnaire de propriétés, le pipeline appelle IMFGetService::GetService sur la source multimédia, comme décrit dans la rubrique Fournisseurs de métadonnées Shell.

Pour créer un gestionnaire de propriétés personnalisé, procédez comme suit :

Implémentation Astuces

Pour obtenir la liste des clés de propriété de métadonnées, consultez Métadonnées Properties for Media Files.

Les gestionnaires de propriétés doivent être rapides ; ils doivent fournir un accès en lecture et écriture efficaces aux métadonnées. (Considérez que l’interpréteur de commandes peut récupérer des métadonnées à partir 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 multimédia partagent certains du même code d’analyse. Toutefois, une source multimédia utilise des appels FMIByteStream 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, de sorte que la copie en é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 L’inscription et la distribution des gestionnaires de propriétés.

Métadonnées multimédias

Sources multimédias

Écriture d’une source multimédia personnalisée