Shell-Metadatenanbieter

Ab Windows 7 macht Microsoft Media Foundation Metadaten über die IPropertyStore-Schnittstelle verfügbar.

Metadaten, die mithilfe des in diesem Thema definierten Prozesses abgerufen werden, sollten nur für den schreibgeschützten Zugriff verwendet werden. Das Schreiben von Daten mit diesem Prozess wird nicht unterstützt. Sie können ein IPropertyStore-Objekt zu Schreibzwecken erstellen, indem Sie einen Klassenbezeichner (CLSID) aus PSLookupPropertyHandlerCLSID verwenden.

Lesen von Metadaten

Führen Sie die folgenden Schritte aus, um Metadaten aus einer Medienquelle zu lesen:

  1. Rufen Sie einen Zeiger auf die IMFMediaSource-Schnittstelle der Medienquelle ab. Sie können die IMFSourceResolver-Schnittstelle verwenden, um einen IMFMediaSource-Zeiger abzurufen.
  2. Rufen Sie MFGetService für die Medienquelle auf, um einen Zeiger auf die IPropertyStore-Schnittstelle zu erhalten. Geben Sie im parameter guidService von MFGetService den Wert MF_PROPERTY_HANDLER_SERVICE an. Wenn die Quelle die IPropertyStore-Schnittstelle nicht unterstützt, gibt MFGetServiceMF_E_UNSUPPORTED_SERVICE zurück.
  3. Rufen Sie IPropertyStore-Methoden auf, um die Metadateneigenschaften aufzulisten.

Der folgende Code zeigt diese Schritte. Angenommen, es DisplayProperty handelt sich um eine Funktion, die einen PROPVARIANT-Wert anzeigt.

HRESULT EnumerateMetadata(IMFMediaSource *pSource)
{
    IPropertyStore *pProps = NULL;

    HRESULT hr = MFGetService(
        pSource, MF_PROPERTY_HANDLER_SERVICE, IID_PPV_ARGS(&pProps));

    if (FAILED(hr))
    {
        goto done;
    }

    DWORD cProps;

    hr = pProps->GetCount(&cProps);
    if (FAILED(hr))
    {
        goto done;
    }

    for (DWORD i = 0; i < cProps; i++)
    {
        PROPERTYKEY key;
        hr = pProps->GetAt(i, &key);
        if (FAILED(hr))
        {
            goto done;
        }

        PROPVARIANT pv;

        hr = pProps->GetValue(key, &pv);
        if (FAILED(hr))
        {
            goto done;
        }

        DisplayProperty(key, pv);
        PropVariantClear(&pv);
    }

done:
    SafeRelease(&pProps);
    return hr;
}

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

Medienmetadaten