如何调试 DirectShow 推源过滤器?

How to debug DirectShow push source filter?

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

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

看完后尝试调试Debugging DirectShow Filters and How to debug c++ DirectShow filter 我在 output pin class 的构造函数中添加了 DbgLog() like

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

并在 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectShow\Debug\Filters.dll

LogToFile 字段中设置文件路径

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

调试基于 PushSource/VCam 的筛选器是 Zoom 将按照与在外部应用程序上下文中调试 DLL 项目 运行 相同的方式进行。即程序是这样的:

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

步骤 3-4 可以通过设置项目设置来代替 Zoom 作为调试目标(项目设置、调试、命令)。

此外,您可能想在 this line 上放置一个断点,并查看调试输出的确切路由到的位置。您可能能够在集成调试输出 window 中看到它(在 OutputDebugString 使用的情况下)或者您将能够检查正在使用哪个文件来写入日志。