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;
}
有关元数据属性键的列表,请参阅 媒体文件的元数据属性。
相关主题