Windows下Logitech Brio 4K IR/Depth流访问问题求助
问题分析与解决方案
核心问题总结
Logitech Brio 4K的IR/Depth流不会被枚举为独立的传感器设备,而是作为视频设备的子流存在;调用KSPROPERTY_CAMERACONTROL_EXTENDED_FACEAUTH_MODE时参数错误,是因为使用了错误的属性结构体。
1. 正确枚举Brio的IR/Depth流
Brio不遵循KSCATEGORY_SENSOR_CAMERA枚举逻辑,需从已枚举的视频设备中筛选对应媒体类型:
- 遍历视频设备的所有媒体类型(通过
IMFMediaSource获取IMFMediaTypeHandler,再调用GetMediaTypeByIndex) - 检查媒体类型的以下属性:
- 深度流:
MF_MT_SUBTYPE为MFVideoFormat_D16;或MF_MT_FRAME_SOURCE_TYPE为MF_FRAME_SOURCE_TYPE_DEPTH - 红外流:
MF_MT_SUBTYPE为MFVideoFormat_IR10/MFVideoFormat_IR16;或MF_MT_FRAME_SOURCE_TYPE为MF_FRAME_SOURCE_TYPE_IR
- 深度流:
示例代码片段(筛选深度流):
IMFMediaTypeHandler* pHandler = nullptr; pMediaSource->GetMediaTypeHandler(&pHandler); DWORD count = 0; pHandler->GetMediaTypeCount(&count); for (DWORD i = 0; i < count; i++) { IMFMediaType* pType = nullptr; pHandler->GetMediaTypeByIndex(i, &pType); GUID subtype = GUID_NULL; pType->GetGUID(MF_MT_SUBTYPE, &subtype); if (subtype == MFVideoFormat_D16) { // 找到深度流媒体类型 } GUID frameType = GUID_NULL; if (SUCCEEDED(pType->GetGUID(MF_MT_FRAME_SOURCE_TYPE, &frameType))) { if (frameType == MF_FRAME_SOURCE_TYPE_DEPTH) { // 确认是深度流 } } pType->Release(); } pHandler->Release();
2. 修复KSPROPERTY_CAMERACONTROL_EXTENDED_FACEAUTH_MODE的调用错误
KSPROPERTYSETID_ExtendedCameraControl属性集要求使用KSCAMERA_EXTENDEDPROP结构体而非基础KSPROPERTY,这是你出现参数错误的核心原因。正确调用步骤如下:
// 初始化扩展属性结构体 KSCAMERA_EXTENDEDPROP prop = {0}; prop.Header.Size = sizeof(KSCAMERA_EXTENDEDPROP); prop.Header.Version = KSCAMERA_EXTENDEDPROP_VERSION; prop.Header.Id = KSPROPERTY_CAMERACONTROL_EXTENDED_FACEAUTH_MODE; prop.Header.Flags = KSPROPERTY_TYPE_GET; ULONG bytesReturned = 0; HRESULT hr = pKsControl->KsProperty( reinterpret_cast<PKSPROPERTY>(&prop), sizeof(prop), nullptr, 0, &bytesReturned ); if (hr == HRESULT_FROM_WIN32(ERROR_MORE_DATA)) { // 分配足够的缓冲区 std::vector<BYTE> buffer(bytesReturned); auto pProp = reinterpret_cast<KSCAMERA_EXTENDEDPROP*>(buffer.data()); pProp->Header = prop.Header; // 复制头部信息 // 再次调用获取属性值 hr = pKsControl->KsProperty( reinterpret_cast<PKSPROPERTY>(pProp), sizeof(prop), buffer.data(), bytesReturned, &bytesReturned ); if (SUCCEEDED(hr)) { // 读取当前Face Auth模式:pProp->Value.ULong // 设置模式时,将Flags改为KSPROPERTY_TYPE_SET,Value.ULong设为KSCAMERA_EXTENDEDPROP_FACEAUTH_MODE_ON } }
3. Windows Hello激活深度流的逻辑
Windows Hello通过以下流程激活Brio的IR/Depth流:
- 调用
KSPROPERTY_CAMERACONTROL_EXTENDED_FACEAUTH_MODE,将模式设为KSCAMERA_EXTENDEDPROP_FACEAUTH_MODE_ON - 摄像头驱动自动切换到IR+Depth复合流模式
- 通过视频设备读取对应的IR和深度媒体流数据
内容的提问来源于stack exchange,提问作者Ralph L
相关产品推荐
相关产品推荐

