这不是一个简单的练习,但可以做到。我知道,因为我以前做过。:)
我在 C++ 中实现了这个。
您需要做的是创建所谓的共享内存服务器。共享内存服务器是一个内存区域,多个进程可以访问。以下是如何在 Windows 下使用命名共享内存创建一个:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551(v=vs.85).aspx
在混合来自两个摄像头的视频的应用程序中,您需要创建一个 DirectShow 渲染过滤器 (CBaseRenderer),将混合的视频帧写入此共享内存。
另一方面,您需要创建一个单独的 Visual Studio DLL 项目,该项目将实现 DirectShow 捕获过滤器(CSource 和 CSourceStream),该过滤器将读取您的主应用程序写入此缓冲区的视频位图。这个 VS 项目需要是一个可注册的 DLL,可以调用它来将其注册为 Windows 的 DirectShow 捕获设备。
您的主应用程序将在运行时创建并维护此共享内存缓冲区。如果另一个应用程序(如视频会议程序)访问捕获设备,则来自该设备的所有内容都将是一个空白缓冲区,直到您的主应用程序将真实的视频帧输入其中。
提示 #1:由于这是一个多线程操作,您将需要一个事件句柄来向捕获过滤器发出帧准备就绪的信号。您还需要一个互斥锁来控制应用程序中的“渲染”线程和捕获设备中的“捕获”线程对缓冲区的访问。
提示 #2:在处理渲染或捕获过滤器之前,您不需要在内存指针上调用 UnmapViewOfFile 或 CloseHandle。
您需要编写大量代码,因此任何有用的示例都超出了本次讨论的范围。这应该让你朝着正确的方向前进。祝你好运!