Dostawcy metadanych powłoki
Począwszy od systemu Windows 7, program Microsoft Media Foundation uwidacznia metadane za pośrednictwem interfejsu IPropertyStore.
Metadane uzyskane przy użyciu procesu zdefiniowanego w tym temacie powinny być używane tylko do dostępu tylko do odczytu. Zapisywanie danych przy użyciu tego procesu nie jest obsługiwane. Można utworzyć obiekt IPropertyStore na potrzeby pisania przy użyciu identyfikatora klasy (CLSID) uzyskanego z PSLookupPropertyHandlerCLSID.
Odczytywanie metadanych
Aby odczytać metadane ze źródła multimediów, wykonaj następujące kroki:
- Pobierz wskaźnik do interfejsu IMFMediaSource źródła multimediów. Możesz użyć interfejsu IMFSourceResolver, aby uzyskać wskaźnik IMFMediaSource.
- Wywołaj MFGetService w źródle multimediów, aby uzyskać wskaźnik do interfejsu IPropertyStore. W parametrze guidServiceMFGetServiceokreśl wartość MF_PROPERTY_HANDLER_SERVICE. Jeśli źródło nie obsługuje interfejsu IPropertyStore, MFGetService zwraca wartość MF_E_UNSUPPORTED_SERVICE.
- Wywołaj metody IPropertyStore, aby wyliczyć właściwości metadanych.
Poniższy kod przedstawia te kroki. Załóżmy, że DisplayProperty
jest funkcją, która wyświetla wartość 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;
}
Aby uzyskać listę kluczy właściwości metadanych, zobacz Metadata Properties for Media Files.
Tematy pokrewne