Поделиться через


атрибут MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODES

Настраивает источник устройства камеры, представленный экземпляром IMFMEdiaSource в режиме управления или режиме общего доступа.

Тип данных

UINT32

Get/set

Чтобы получить этот атрибут, вызовите МВФAttributes::GetUINT32.

Чтобы задать этот атрибут, вызовите МВФAttributes::SetUINT32.

Замечания

Если этот атрибут не задан или имеет значение 0, источник устройства камеры настраивается в режиме управления. Это режим по умолчанию для источников камеры. При управлении всеми операциями камеры доступны все операции с камерой, а приложение может изменять типы носителей и /или расширенные элементы управления камерой.

В любое время в активном состоянии может находиться только один управляемый экземпляр МВФMediaSource. МВФMediaSource не считается активным после создания инициализированного. Источник мультимедиа становится активным только после запуска потока, при вызове IMFMediaSource::Startили после установки значения элемента управления камерой путем вызова IKsControl::KsProperty с набором свойств KSPROPERTYSETID_ExtendedCameraControl или с помощью интерфейса IMFExtendedCameraControl. Сведения о получении экземпляра МВФExtendedCameraControlсм. в МВФExtendedCameraController

Попытка отрисовки активного экземпляра IMFMediaSource, когда другой экземпляр режима управления уже активен, приведет к нарушению общего доступа.

В любой момент может быть произвольное количество экземпляров активного режима общего доступа МВФMediaSource и новые экземпляры режима общего доступа можно активировать, пока экземпляр режима управления активен. Экземпляры режима общего доступа не могут изменять типы носителей и должны использовать текущий тип носителя. Экземпляры режима общего доступа не могут изменять элементы управления 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

В следующем примере показано создание экземпляра IMFMediaSource с помощью IMFActivate. Обратите внимание, что объект IMFActivate будет кэшировать только что созданный объект IMFMediaSource из вызова ActivateObject. Поэтому, если ActivateObject вызывается еще раз перед вызовом DetachObject, кэшированный экземпляр будет возвращен, и все изменения атрибутов будут игнорироваться.

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

Чтобы активировать IMFMediaSource в режиме общего доступа с помощью МВФCaptureEngine, IMFActivate, переданных для источника камеры, должны иметь атрибут MF_DEVSOURCE_ATTRIBUTE_FRAMESERVER_SHARE_MODE. Как указано выше, после вызова IMFActivate::ActivateObject необходимо вызвать DetachObject, чтобы все изменения атрибутов отображались в активированном объекте.

Настройка режима общего доступа с помощью MediaCapture

При доступе к камере с помощью класса mediaCapture задайте режим общего доступа с помощью свойства MediaCaptureInitializationSettings.SharingMode.

Требования

Требование Ценность
Минимальный поддерживаемый клиент
Windows 11, сборка 26100
Минимальный поддерживаемый сервер
Windows Server
Заголовок
Mfidl.h

См. также

алфавитный список атрибутов Media Foundation

аудио-видеозахвата

атрибуты устройства записи