Shell 元數據提供者
從 Windows 7 開始,Microsoft Media Foundation 會透過 IPropertyStore 介面公開元數據。
使用本主題中所定義之進程取得的元數據,只能用於唯讀存取。 不支援使用此程式寫入數據。 您可以使用從 PSLookupPropertyHandlerCLSID取得的類別標識碼 (CLSID) 來建立 IPropertyStore 物件。
若要從媒體來源讀取元數據,請執行下列步驟:
- 取得媒體來源 IMFMediaSource 介面的指標。 您可以使用 IMFSourceResolver 介面來取得 IMFMediaSource 指標。
- 在媒體來源上呼叫 MFGetService,以取得 IPropertyStore 介面的指標。 在 MFGetService的 guidService 參數中,指定值 MF_PROPERTY_HANDLER_SERVICE。 如果來源不支援 IPropertyStore 介面,MFGetService 會傳回 MF_E_UNSUPPORTED_SERVICE。
- 呼叫 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;
}
如需元資料屬性索引鍵的清單,請參閱 媒體檔案的元資料屬性。