很快,我们将开发一个开源软件项目,该项目可以执行许多操作,其中一个模块涉及从基于usb的摄像头捕获实时源,最多48小时,并在不间断循环中覆盖它。这将与应用程序中的其他操作并行进行。我们还必须向用户显示至少48小时的捕获的Feed作为菜单选项。
我希望大家建议一个合适的开源技术堆栈,考虑到模块的音频/视频部分,没有这个功能我绝对可以使用Qt来做我的东西,但这个功能成为一个困难的主张。我已经在Linux平台上使用Qt开发了GUI应用程序,但是无法想出能够在应用程序中记录和显示视频的东西。 Qt有声子,但设置它是一场噩梦。早些时候你们有些人建议使用v4linux。我试图在RHEL 4机器上编译示例程序capture.c,它给出了以下错误。
usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:436: warning: no semicolon at end of struct or union
/usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:436: error: syntax error before '*' token
/usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:438: error: syntax error before '*' token
/usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:438: warning: data definition has no type or storage class
/usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:439: error: syntax error before '}' token
/usr/src/kernels/2.6.9-5.EL-i686/include/linux/videodev2.h:810: error: field `win' has incomplete type
因此,我没有想出具体可行的例子。此外,website并未经常更新,这表明开发过程停滞不前。
由于应用程序将是基于菜单的用户交互的图形,因此需要为图形部分使用Qt或类似的东西。令人头疼的是我无法弄明白,我如何在虚拟应用程序中实现/集成视频捕获/显示功能(我尝试使用Qt可能有些人已经使用其他一些库或语言完成了它) 。
编辑: 能够通过导入videodev2.h的本地副本并添加define语句来编译程序以包含__user宏。但现在它不会运行,因为它无法找到/ dev / video设备。所以再次陷入video4linux的死胡同
答案 0 :(得分:0)
您可以尝试FFmpeg系列库。至于最近(我认为),它还附带了支持V4L和V4L2用于视频捕获的libavdevice库,构建一个FFmpeg管道以从avdevice源读取视频并使用avcodec写入它应该不是很困难。并将其格式化为文件...
答案 1 :(得分:0)
gstreamer是一个非常强大的多媒体堆栈,用于捕获,pygst和PyQt4绑定存在于Python中。
答案 2 :(得分:0)
如果说“找不到/ dev / video”,那是因为Linux为设备编号。
如果您查看了.c
文件,您会看到有几个arg_opts
as -d ...(其中......将成为/ dev / video0)或者您可以进入.c
文件并将0添加到/ dev / video,您将在其中找到关于第590行的内容int main
的开头。