Provedores de metadados do Shell
A partir do Windows 7, o Microsoft Media Foundation expõe metadados por meio da interface IPropertyStore .
Os metadados obtidos usando o processo definido neste tópico só devem ser usados para acesso somente leitura. Não há suporte para a gravação de dados usando esse processo. Você pode criar um objeto IPropertyStore para fins de escrita usando um CLSID (identificador de classe) obtido de PSLookupPropertyHandlerCLSID.
Lendo metadados
Para ler metadados de uma fonte de mídia, execute as seguintes etapas:
- Obtenha um ponteiro para a interface IMFMediaSource da fonte de mídia. Você pode usar a interface IMFSourceResolver para obter um ponteiro IMFMediaSource .
- Chame MFGetService na fonte de mídia para obter um ponteiro para a interface IPropertyStore . No parâmetro guidService de MFGetService, especifique o valor MF_PROPERTY_HANDLER_SERVICE. Se a origem não der suporte à interface IPropertyStore , MFGetService retornará MF_E_UNSUPPORTED_SERVICE.
- Chame métodos IPropertyStore para enumerar as propriedades de metadados.
O código a seguir mostra essas etapas. Suponha que DisplayProperty
seja uma função que exibe um valor 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;
}
Para obter uma lista de chaves de propriedade de metadados, consulte Propriedades de metadados para arquivos de mídia.
Tópicos relacionados