Shell 中繼資料提供者

從 Windows 7 開始,Microsoft Media Foundation 會透過 IPropertyStore 介面公開中繼資料。

使用本主題中定義之程式取得的中繼資料應該只用于唯讀存取。 不支援使用此程式寫入資料。 您可以使用從PSLookupPropertyHandlerCLSID取得的類別識別碼 (CLSID) ,建立IPropertyStore物件以供撰寫之用。

讀取中繼資料

若要從媒體來源讀取中繼資料,請執行下列步驟:

  1. 取得媒體來源之 IMFMediaSource 介面的指標。 您可以使用 IMFSourceResolver 介面來取得 IMFMediaSource 指標。
  2. 在媒體來源上呼叫 MFGetService ,以取得 IPropertyStore 介面的指標。 在MFGetServiceguidService參數中,指定值MF_PROPERTY_HANDLER_SERVICE。 如果來源不支援 IPropertyStore 介面, MFGetService傳回MF_E_UNSUPPORTED_SERVICE
  3. 呼叫 IPropertyStore 方法以列舉中繼資料屬性。

下列程式碼顯示這些步驟。 DisplayProperty假設 是顯示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;
}

如需中繼資料屬性索引鍵的清單,請參閱 媒體檔案的中繼資料屬性

媒體中繼資料