如何调试 DirectShow 推送源过滤器?

问题描述

我尝试了 https://github.com/roman380/tmhare.mvps.org-vcam
提供的基于 DirectShow 的示例虚拟相机之一 我能够在浏览器(Chrome 和 Edge)中进行编译和构建,并且可以正常工作。

但在桌面应用程序(如 Zoom 和 Team 虚拟相机)被识别但不显示任何帧的情况下。选择此虚拟摄像机时,只能看到黑屏,而不是预期的输出

enter image description here

我在阅读 Debugging DirectShow FiltersHow to debug c++ DirectShow filter 后尝试调试 我在 DbgLog() 类的构造函数添加output pin,例如

DbgLog((LOG_TRACE,3,TEXT("test string")));

并在 LogToFileComputer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectShow\Debug\Filters.dll 字段中设置文件路径

enter image description here

但我在 vcam-log.txt 中没有看到任何日志字符串。 我缺少什么或如何在该文件获取日志字符串?

解决方法

调试基于 PushSource/VCam 的过滤器是 Zoom,与调试在外部应用程序上下文中运行的 DLL 项目相同。即程序是这样的:

  1. 停止目标应用程序(Zoom)
  2. 构建您的项目,根据需要使用 COM (regsvr32) 注册 DLL
  3. 启动目标应用程序
  4. 将您的 Visual Studio 附加到正在运行的应用程序(Ctrl+Alt+P、本机代码调试器、缩放进程)
  5. 在您的项目中放置断点,启用异常中断
  6. 让目标应用程序运行并以交互方式启动与视频捕获相关的活动

步骤 3-4 可以替换为设置项目设置以启动 Zoom 作为调试目标(项目设置、调试、命令)。

此外,您可能希望在 this line 上放置一个断点,并查看调试输出的确切位置。您可能能够在集成的调试输出窗口中看到它(在使用 OutputDebugString 的情况下),或者您将能够检查究竟是哪个文件用于写入日志。