我正在尝试开发基于ViVi项目示例的“虚拟”视频驱动程序。它是虚拟的,因为它不与任何相机交互。它从用户程序(C ++)获取视频流,并且还充当显示视频流的另一个用户程序(Flash)的视频驱动程序。
所以,如果我有/ dev / video0。一个程序需要写入帧,另一个程序从中读取一个。这可能吗?
我需要这个,因为Flash无法识别这个摄像头,因此我使用虚拟驱动程序作为我的抓取器(使用真实驱动程序)和Flash的桥接器。
答案 0 :(得分:3)
是
更一般地说,设备驱动程序可以允许任意数量的同时打开。有关详细信息,请查看Linux Device Drivers。您可以使用filp->private_data
存储与特定开放实例相关的数据。
为了获得更大的灵活性,设备驱动程序甚至不限于在/dev
中拥有单个设备节点。
答案 1 :(得分:2)
使用了vloopback驱动程序,它完全符合您的要求。但是,它不是标准内核的一部分。前段时间,我写了一个库(dv4linux拦截libc读取/写入/ dev / video以实现类似的功能。当前版本对于较新的firefox的malloc处理存在严重问题.berlios.de可能会出现问题。服务很快。
答案 2 :(得分:1)
两个程序可以使用驱动程序:
它通常可以,但它依赖于驱动程序。在数据捕获方面,您通常只有一个进程可以获取所有数据,而其他进程只能有限地访问驱动程序的功能。所以最后,API可以通过多个进程打开驱动程序,但最终都取决于驱动程序。
VIVI驱动程序可以用作桥接驱动程序:
没有。它是一个视频捕获仿真驱动程序,但此驱动程序中没有“视频输出”或“视频接收器”功能。您将不得不理解为什么flash不能与您的真实驱动程序一起使用,但可以使用虚拟驱动程序。 strace是你的朋友。