атрибут 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 |
Заголовок |
|
См. также