다음을 통해 공유


MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODES 특성

IMFMEdiaSource 인스턴스가 나타내는 카메라 디바이스 원본을 제어 모드 또는 공유 모드로 구성합니다.

데이터 형식

UINT32

가져오기/설정

이 특성을 얻으려면 IMFAttributes::GetUINT32호출합니다.

이 특성을 설정하려면 IMFAttributes::SetUINT32호출합니다.

발언

이 특성이 설정되지 않거나 0 값으로 설정되면 카메라 디바이스 원본이 제어 모드로 구성됩니다. 카메라 원본의 기본 모드입니다. 제어 모드에서는 모든 카메라 작업을 사용할 수 있으며 애플리케이션은 미디어 유형 및/또는 확장된 카메라 컨트롤을 변경할 수 있습니다.

IMFMediaSource 제어 모드 인스턴스는 언제든지 활성 상태일 수 있습니다. IMFMediaSource 초기화된 후 활성으로 간주되지 않습니다. 미디어 원본은 스트림이 시작된 후에만 활성화됩니다. IMFMediaSource::Start호출하거나, 속성 집합이 KSPROPERTYSETID_ExtendedCameraControlIKsControl::KsProperty 호출하거나 IMFExtendedCameraControl 인터페이스를 사용하여 카메라 컨트롤을 실행하여 카메라 컨트롤 값을 설정한 후에만 활성화됩니다. IMFExtendedCameraControl인스턴스를 가져오는 방법에 대한 자세한 내용은 IMFExtendedCameraController 참조하세요.

다른 제어 모드 인스턴스가 이미 활성 상태일 때 IMFMediaSource 인스턴스를 활성으로 렌더링하려고 하면 공유 위반이 발생합니다.

언제든지 IMFMediaSource 임의의 수의 활성 공유 모드 인스턴스가 있을 수 있으며 제어 모드 인스턴스가 활성 상태인 동안 새로 만든 공유 모드 인스턴스를 활성화할 수 있습니다. 공유 모드 인스턴스는 미디어 형식을 변경할 수 없으며 현재 미디어 형식을 사용해야 합니다. 공유 모드 인스턴스는 KSPROPERTYSETID_ExtendedCameraControl 컨트롤을 변경할 수 없습니다. PROPSETID_VIDCAP_CAMERACONTROL, PROPSETID_VIDCAP_VIDEOPROCAMP, OEM/IHV 관련 컨트롤과 같은 레거시 카메라 컨트롤은 공유 모드 인스턴스를 통해 변경할 수 있습니다.

카메라 원본을 공유 모드로 구성하려면 IMFMediaSource를 만들 때 특성을 설정해야.

MFCreateDeviceSource를 사용하여 공유 모드 구성

다음 코드 예제에서는 MFCreateDeviceSource사용하여 공유 모드에서 인스턴스를 만드는 방법을 보여 줍니다.

HRESULT
SampleCreateSharedModeCamera(
    _In_z_ LPCWSTR cameraSymbolicName,
    _COM_Outptr_ IMFMediaSource** cameraSource
    )
{
    wil::com_ptr_nothrow<IMFAttributes>     initAttributes;

    RETURN_HR_IF_NULL (E_INVALIDARG, cameraSymbolicName);
    RETURN_HR_IF_NULL (E_POINTER, cameraSource);
    *cameraSource = nullptr;

    RETURN_IF_FAILED (MFCreateAttributes(&initAttributes, 3));
    RETURN_IF_FAILED (initAttributes->SetGUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE, MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID));
    RETURN_IF_FAILED (initAttributes->SetString(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK, cameraSymbolicName));
    RETURN_IF_FAILED (initAttributes->SetUINT32(MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODE, 1));
    RETURN_IF_FAILED (MFCreateDeviceSource(initAttributes.get(), cameraSource));

    return S_OK;
}

IMFActivate를 사용하여 공유 모드 구성

다음 예제에서는 IMFActivate사용하여 IMFMediaSource 인스턴스를 만드는 방법을 보여 줍니다. IMFActivate 개체는 ActivateObject호출에서 새로 만든 IMFMediaSource 내부적으로 캐시합니다. 따라서 DetachObject 호출하기 전에 ActivateObject 다시 호출되면 캐시된 인스턴스가 반환되고 특성에 대한 변경 내용은 무시됩니다.

HRESULT
SampleCreateSharedModeCameraFromActivate(
    _In_ IMFActivate* activate,
    _COM_Outptr_ IMFMediaSource** cameraSource
    )
{
    RETURN_HR_IF_NULL (E_INVALIDARG, activate);
    RETURN_HR_IF_NULL (E_POINTER, cameraSource);
    *cameraSource = nullptr;

    RETURN_IF_FAILED (activate->SetUINT32(MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODE, 1));
    RETURN_IF_FAILED (activate->ActivateObject(IID_PPV_ARGS(cameraSource)));

    return S_OK;
}

IMFCaptureEngine을 사용하여 공유 모드 구성

IMFCaptureEngine사용하여 공유 모드에서 IMFMediaSource 활성화하려면 카메라 원본에 전달된 IMFActivateMF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODE 특성이 있어야 합니다. 위에서 설명한 대로 IMFActivate::ActivateObject 호출된 후에는 활성화된 개체에 특성 변경 내용을 반영하려면 DetachObject 호출해야 합니다.

MediaCapture를 사용하여 공유 모드 구성

MediaCapture 클래스를 사용하여 카메라에 액세스하는 경우 MediaCaptureInitializationSettings.SharingMode 속성을 사용하여 공유 모드를 설정합니다.

요구 사항

요구
지원되는 최소 클라이언트
Windows 11, 빌드 26100
지원되는 최소 서버
Windows Server
머리글
Mfidl.h

참고 항목

Media Foundation 특성 사전순 목록

오디오/비디오 캡처

캡처 디바이스 특성