다음을 통해 공유


셸 메타데이터 공급자

Windows 7부터 Microsoft Media Foundation은 IPropertyStore 인터페이스를 통해 메타데이터를 노출합니다.

이 항목에 정의된 프로세스를 사용하여 얻은 메타데이터는 읽기 전용 액세스에만 사용해야 합니다. 이 프로세스를 사용하여 데이터를 쓰는 것은 지원되지 않습니다. PSLookupPropertyHandlerCLSID에서 가져온 CLSID(클래스 식별자)를 사용하여 쓰기 목적으로 IPropertyStore 개체를 만들 수 있습니다.

메타데이터 읽기

미디어 원본에서 메타데이터를 읽으려면 다음 단계를 수행합니다.

  1. 미디어 원본의 IMFMediaSource 인터페이스에 대한 포인터를 가져옵니다. IMFSourceResolver 인터페이스를 사용하여 IMFMediaSource 포인터를 가져올 수 있습니다.
  2. 미디어 원본에서 MFGetService 를 호출하여 IPropertyStore 인터페이스에 대한 포인터를 가져옵니다. MFGetServiceguidService 매개 변수에서 MF_PROPERTY_HANDLER_SERVICE 값을 지정합니다. 원본이 IPropertyStore 인터페이스를 지원하지 않는 경우 MFGetServiceMF_E_UNSUPPORTED_SERVICE 반환합니다.
  3. IPropertyStore 메서드를 호출하여 메타데이터 속성을 열거합니다.

다음 코드는 이러한 단계를 보여줍니다. 이 DisplayPropertyPROPVARIANT 값을 표시하는 함수라고 가정합니다.

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;
}

메타데이터 속성 키 목록은 미디어 파일의 메타데이터 속성을 참조하세요.

미디어 메타데이터