2012-02-28 103 views
1

我正在尝试开发基于ViVi项目示例的“虚拟”视频驱动程序。这是虚拟的,因为它不与任何相机交互。它从用户程序(C++)获取视频流,并且还用作显示视频流的其他用户程序(Flash)的视频驱动程序。Linux /内核模块:两个用户程序可以使用驱动程序吗?

所以,如果我有一个/ dev/video0。一个程序需要写入帧,另一个程序需要读取一个。那可能吗?

我需要这个,因为Flash无法识别此相机,所以我使用虚拟驱动程序作为我的抓取器(使用真实驱动程序)和Flash的桥梁。

回答

2

使用了vloopback驱动程序,它完全符合你想要做的。但是,它不是标准内核的一部分。前段时间,我编写了一个库(dv4linux),它拦截libc读/写到/ dev/video来实现类似的功能。当前版本对于更新的firefox的malloc处理存在严重的问题,但是berlios.de可能很快就会失效。

+0

有趣,因为有一个叉更新到内核3.0:https://github.com/umlaeute/v4l2loopback。我需要通过这个例子来看看。谢谢。 – Manel 2012-02-28 17:09:09

+0

我构建并加载了v4l2loopback作为内核模块,并且我无法从闪存中看到作为相机(视频设备)的v4l2loopback驱动器。我只是看到它与“lsmode”。否则,Flash确实会识别VIVI驱动程序......。 – Manel 2012-02-28 20:41:06

+0

它的工作原理!尽管1280x1024帧的显示速度很慢。 640x480没关系。 – Manel 2012-02-29 18:32:22

3

是的。

更一般地说,设备驱动程序可以允许尽可能多的同时打开它想要的。请参阅Linux Device Drivers了解更多信息。您可以使用filp->private_data来存储与特定打开实例相关的数据。

为了更加灵活,设备驱动程序甚至不限于/dev中的单个设备节点。

1

可以驱动两个程序使用:

它通常可以,但它是取决于驱动程序当涉及到数据采集,你往往有一个过程,得到所有的数据,和其他进程只能有。对驱动程序功能有限的访问,所以最终,API可以在多个进程中打开驱动程序,但最终全部取决于驱动程序。河被用作桥梁驱动程序:

不是。这是一个视频捕获仿真驱动程序,但此驱动程序中没有“视频输出”或“视频接收器”功能。您将不得不了解为什么闪光灯不适用于您的真实驱动程序,但可以使用虚拟驱动程序。 strace是你的朋友。

+0

据我所知,VIVI是通过使用Video4Linux2 API构建的,该API是Linux上大多数摄像头驱动程序的基础。所以我认为如果我实现了为Video4Linux2实体提供内容,我将能够从Flash中显示其图像。 – Manel 2012-02-28 17:07:44

+0

@Manel:Vivi生成通过V4L2捕获API提供的数据。驱动程序中没有允许馈送数据的内容 – shodanex 2012-02-29 15:05:57

相关问题