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

如何为使用IMFVirtualCamera的C++/WinRT应用获取所需提升权限?

解决IMFVirtualCamera::Start() "Access is denied" 错误的排查方案
  • 检查系统摄像头权限
    Windows系统的摄像头权限独立于管理员权限,需手动确认应用权限:

    1. 打开「设置 > 隐私和安全性 > 相机」
    2. 确保“允许应用访问相机”开关开启,且你的应用在列表中处于允许状态
    3. 桌面应用需在Package.appxmanifest中添加权限声明:
      <Capabilities>
          <DeviceCapability Name="webcam" />
      </Capabilities>
      
  • 调整虚拟摄像头访问范围
    当前使用的MFVirtualCameraAccess_AllUsers需要系统级权限,尝试缩小范围为当前用户:

    winrt::check_hresult(MFCreateVirtualCamera(
        MFVirtualCameraType_SoftwareCameraSource,
        MFVirtualCameraLifetime_Session,
        MFVirtualCameraAccess_CurrentUser, // 修改此参数
        cameraName,
        L"{7B89B92E-FE71-42D0-8A41-E137D06EA184}",
        nullptr,
        0,
        pVirtualCamera.put()
    ));
    
  • 替换重复的虚拟摄像头GUID
    你指定的GUID可能已被其他虚拟摄像头占用,生成新的唯一GUID(可通过Visual Studio「工具 > 创建GUID」生成)替换现有值,避免设备冲突。

  • 检查Media Foundation相关服务状态
    打开「服务」控制台(services.msc),确保以下服务正常运行:

    • Windows Audio
    • Windows Audio Endpoint Builder
    • Media Foundation
      若服务未启动,手动启动后重试。
  • 关闭占用摄像头的其他进程
    打开任务管理器,终止正在调用摄像头的进程(如视频会议软件、浏览器摄像头页面),释放资源后重新启动虚拟摄像头。

  • 在工作线程中启动摄像头
    GUI线程可能存在消息循环或权限限制,将Start()调用移至独立线程执行:

    std::thread cameraWorker([this]() {
        try {
            winrt::check_hresult(pVirtualCamera->Start(nullptr));
        }
        catch (winrt::hresult_error const& ex) {
            std::stringstream ss;
            ss << winrt::to_string(ex.message()) << " - " << ex.code();
            LOG(LogLevel::ERR, ss.str());
        }
    });
    cameraWorker.detach();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:43:09