You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C++/WinRT修改Windows Hello红外相机InfraredTorchControl模式

Windows Hello红外相机红外Torch控制问题

测试环境

  • 操作系统:Windows 11 Home 22H2
  • 红外相机:NexiGo HelloCam N930W Camera
  • 开发环境:Visual Studio 2022
  • 编程语言:C++ 20
  • 应用类型:Windows桌面应用(C++/Winrt)[非通用Windows应用][Xaml UI]
  • 源码地址:https://github.com/andresbeltranc/ir_camera_sample_win32

背景

Windows Hello相机结合红外摄像头与红外发射器实现帧深度感知,原理类似苹果FaceID或Xbox Kinect,这种深度感知能力对开发者和研究者极具价值。我已开发出可访问Windows Hello红外相机的应用,但红外发射器行为不稳定。

问题

我能获取红外相机的每一帧,但无法开启红外发射LED(Infrared Torch),而Windows Hello人脸识别时该功能可正常工作。

Windows红外相机驱动层面的红外Torch模式包括:

Torch模式描述
KSCAMERA_EXTENDEDPROP_IRTORCHMODE_OFF关闭
KSCAMERA_EXTENDEDPROP_IRTORCHMODE_ALWAYS_ON常亮
KSCAMERA_EXTENDEDPROP_IRTORCHMODE_ALTERNATING_FRAME_ILLUMINATION隔帧开启

注:红外Torch行为因相机而异,部分相机默认模式为「隔帧开启」,但NexiGo HelloCam N930W默认关闭,需手动开启。

理论上可通过Media Foundation API的InfraredTorchControl类修改模式,代码如下:

auto infraredTorchControl = m_mediaCapture.VideoDeviceController().InfraredTorchControl();
if(infraredTorchControl.IsSupported()){
    infraredTorchControl.CurrentMode(winrt::Windows::Media::Devices::InfraredTorchMode::On);
}

但调用API时提示InfraredTorchControl不支持。查阅VideoDeviceController文档得知,部分驱动要求相机处于预览状态才能识别支持的控件,因此尝试三种解决方案均失败:

  1. Windows桌面应用(C++/WinRT):尝试通过CaptureElement绑定MediaCapture并启动预览,抛出错误WinRT originate error: 'Input format unsupported'.和WinRT originate error: 'No suitable transform was found to encode or decode the content.',推测原因是CaptureElement不支持红外相机的L8格式。
  2. 通用Windows应用(C++/WinRT):使用XAML的CaptureElement绑定MediaCapture,仍出现相同错误。
  3. 自定义Media Sink:尝试通过MediaCapture的StartPreviewToCustomSinkAsync方法绑定自定义媒体接收器,但缺乏C++/WinRT相关文档,无法成功转换C++/CX示例代码。

问询

现寻求有效修改Windows Hello红外相机InfraredTorchControl模式的方案,同时希望解答以下问题:

  • 为何修改参数需要启动预览?
  • Media Foundation是否支持红外相机预览?
  • 如何实现C++/WinRT版自定义Media Sink?
  • 是否可通过DeviceMFT直接访问驱动?

内容的提问来源于stack exchange,提问作者Andres Beltran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:34:58