Provider di metadati della shell

A partire da Windows 7, Microsoft Media Foundation espone i metadati tramite l'interfaccia IPropertyStore .

I metadati ottenuti usando il processo definito in questo argomento devono essere usati solo per l'accesso in sola lettura. La scrittura di dati con questo processo non è supportata. È possibile creare un oggetto IPropertyStore a scopo di scrittura usando un identificatore di classe (CLSID) ottenuto da PSLookupPropertyHandlerCLSID.

Lettura dei metadati

Per leggere i metadati da un'origine multimediale, seguire questa procedura:

  1. Ottenere un puntatore all'interfaccia IMFMediaSource dell'origine multimediale. È possibile usare l'interfaccia IMFSourceResolver per ottenere un puntatore IMFMediaSource .
  2. Chiamare MFGetService nell'origine multimediale per ottenere un puntatore all'interfaccia IPropertyStore . Nel parametro guidService di MFGetService specificare il valore MF_PROPERTY_HANDLER_SERVICE. Se l'origine non supporta l'interfaccia IPropertyStore , MFGetService restituisce MF_E_UNSUPPORTED_SERVICE.
  3. Chiamare i metodi IPropertyStore per enumerare le proprietà dei metadati.

Il codice seguente illustra questi passaggi. Si supponga che DisplayProperty sia una funzione che visualizza un valore PROPVARIANT .

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;
}

Per un elenco delle chiavi delle proprietà dei metadati, vedere Proprietà dei metadati per file multimediali.

Metadati multimediali