【问题标题】:Virtual Webcam in C++C++ 中的虚拟网络摄像头
【发布时间】:2009-10-20 18:19:39
【问题描述】:

我想编写一个新的虚拟网络摄像头驱动程序,例如将 AVI 或直播流用于屏幕并将其作为网络摄像头源进行流式传输。

我真的没有网络摄像头,我想添加一个虚拟网络摄像头来传输桌面屏幕。

我应该在内核模式下编写一个网络摄像头来这样做吗?如果是这样,您能否指导我使用示例网络摄像头驱动程序?

如果我应该在 DirectShow 中执行此操作,如何将网络摄像头设备添加到控制面板的网络摄像头列表中,例如在 Yahoo Messenger 中,我可以选择该设备作为网络摄像头并将我的桌面作为网络摄像头图像流式传输。

我该如何开始?

【问题讨论】:

标签: c++ visual-c++ kernel


【解决方案1】:

您需要编写一个 DirectShow 源过滤器。 Windows SDK 包含一个名为 baseclasses 的库,可帮助您开发此类过滤器。请参阅CSourceStream 以获得良好的起点。

要让设备显示在其他视频流设备下,您必须使用 CLSID_VideoInputCategory 下的 DirectShow API 注册您的过滤器。您不需要/不应该编写内核驱动程序。

【讨论】:

  • 如果我不编写查找相机并从中读取的代码,这是否有效。假设我实现了这个,Skype 或 chrome 或任何其他应用程序在系统中寻找相机时会找到这个来源吗?我知道我可以注册它,然后我可以在 Media Foundation 或 DirectShow 中找到它。但是其他应用程序会从系统中找到它。它会显示在设备列表中吗?
【解决方案2】:

您可以从 DirectShow 包下的示例“amcap”开始,它是一个非常适合初学者的示例。如果要列出网络摄像头设备,请转到 ChooseDevices() 方法。

【讨论】:

    【解决方案3】:

    您需要开发 DirectShow Source Filter 来创建虚拟相机,请先阅读此内容
    https://docs.microsoft.com/en-us/windows/win32/directshow/writing-source-filters

    那你可以采纳
    https://github.com/roman380/tmhare.mvps.org-vcam

    您可以在此示例虚拟相机上工作。

    这实现了IAMStreamConfigIKsPropertySet 接口
    这是使用实现IPinIBaseFilterCSourceStreamCSource 类构建的

    【讨论】:

      猜你喜欢
      • 2019-09-01
      • 2011-09-08
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 2016-02-15
      • 2011-02-02
      相关资源
      最近更新 更多