셸 메타데이터 공급자
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;
}
메타데이터 속성 키 목록은 미디어 파일의 메타데이터 속성을 참조하세요.
관련 항목