Freigeben über


Benutzerdefinierte Metadatenanbieter für Mediendateien

In diesem Thema wird beschrieben, wie Sie einen benutzerdefinierten Shell-Eigenschaftenhandler für eine Microsoft Media Foundation-Medienquelle schreiben.

Anmerkung

Hintergrundinformationen zu Metadatenanbietern in Media Foundation finden Sie unter Medienmetadaten. In diesem Thema werden Shell-Eigenschaftshandler erläutert; es beschreibt nicht die Metadatenschnittstelle der Version 1, IMFMetadata-.

 

Metadaten sind eng mit dem Format der Datei verknüpft. In Media Foundation werden Dateiformate durch Medienquellen dargestellt. Wenn Sie Metadaten für ein Format unterstützen möchten, das in Media Foundation nicht nativ unterstützt wird, müssen Sie eine benutzerdefinierte Medienquelle mit einem Eigenschaftenhandler implementieren. Der Eigenschaftenhandler ermöglicht es dem Shell-Eigenschaftensystem, Metadaten effizient zu lesen und zu schreiben.

Ein Eigenschaftenhandler ist ein COM-Objekt, das die folgenden Schnittstellen implementiert:

Optional kann sie auch die folgende Schnittstelle verfügbar machen:

Wenn das Shell-Eigenschaftensystem Metadaten für eine Datei abrufen muss, ruft es CoCreateInstance- auf, um den Eigenschaftenhandler zu erstellen, und ruft dann die entsprechenden Lese- und Schreibmethoden für die IPropertyStore- Schnittstelle auf.

Die Media Foundation-Pipeline verwendet einen etwas anderen Mechanismus, da die Pipeline den Eigenschaftenhandler direkt aus der Medienquelle abruft. Anstatt CoCreateInstance- zum Erstellen des Eigenschaftenhandlers aufzurufen, ruft die Pipeline IMFGetService::GetService für die Medienquelle auf, wie im Thema Shell-Metadatenanbieterbeschrieben.

Gehen Sie wie folgt vor, um einen benutzerdefinierten Eigenschaftenhandler zu erstellen:

Implementierungstipps

Eine Liste der Metadateneigenschaftenschlüssel finden Sie unter Metadateneigenschaften für Mediendateien.

Eigenschaftenhandler müssen schnell sein; sie müssen effizienten Lese- und Schreibzugriff auf die Metadaten bieten. (Beachten Sie, dass die Shell Möglicherweise Metadaten aus Hunderten von Dateien abruft.) Rufen Sie daher nicht MFStartup- aus dem Eigenschaftenhandler auf. Die MFStartup--Funktion führt zur Startlatenz, da sie mehrere Arbeitswarteschlangenthreads erstellt und den globalen Speicher zuweist.

In einer typischen Implementierung verwendet der Eigenschaftenhandler und die Medienquelle einen Teil des gleichen Analysecodes. Eine Medienquelle verwendet jedoch asynchrone IMFByteStream- Aufrufe für E/A, während der Eigenschaftenhandler die IStream--Schnittstelle verwendet. Media Foundation stellt ein Hilfsobjekt bereit, das einen IStream--basierten Datenstrom umschließt und als IMFByteStream- Datenstrom verfügbar macht. Rufen Sie zum Erstellen des Wrappers MFCreateMFByteStreamOnStreamOnStreamauf.

Beim Aktualisieren von Metadaten wird empfohlen, die Daten direkt in den ursprünglichen Datenstrom zu schreiben. Diese Empfehlung unterscheidet sich von der Verhalten der meisten Eigenschaftenhandler, in denen eine Kopie der Daten geändert wird. Mediendateien können sehr groß sein, sodass das Kopieren beim Schreiben in der Regel zu langsam für eine effiziente Implementierung ist. Zum Deaktivieren des Kopierens beim Schreiben legen Sie die ManualSafeSave Registrierungseinstellung fest, wie in Registrieren und Verteilen von Eigenschaftshandlernbeschrieben.

Medienmetadaten

Medienquellen

Schreiben einer benutzerdefinierten Medienquelle