|
Video4Linux是Linux下用于获取视频和音频数据的API接口,在这篇文章中,着重阐述如何利用Video4Linux获取摄像头数据,以实现连续影像的播放。 1. 摄像头的安装 在Linux下常用的摄像头驱动是spca5xx, 这是一个通用驱动,读者可以在以下网站下到这个驱动 http://mxhaard.free.fr/download.html。这个网站还给出了这款驱动支持的摄像头的种类。另外,ov511芯片直接就支持Linux,使用者款芯片的摄像头有网眼V2000。我使用的是网眼V2000的摄像头,和Z-Star 301p+现代7131R芯片的摄像头。后一种需要spca5xx的驱动。关于spca5xx的安装方法,网上有很多介绍,这里就不说了。 2. 摄像头的调试 安装好摄像头后,为了测试摄像头能否正常工作,可以用一下软件。比较著名的是xawtv,在网上搜以下可以下载到。安装好后,打开xawtv则可以调试摄像头。 3. Video4Linux 编程获取数据 现有的video4linux有两个版本,v4l和v4l2。本文主要是关于v4l的编程。利用v4l API获取视频图像一般有以下几步: a> 打开设备 b> 设置设备的属性,比如图像的亮度,对比度等等 c> 设定传输格式和传输方式 d> 开始传输数据,一般是一个循环,用以连续的传输数据 e> 关闭设备 下面具体介绍v4l编程的过程。首先指出,在video4linux编程时要包含头文件,其中包含了video4linux的数据结构和函数定义。 1)v4l的数据结构 在video4linux API中定义了如下数据结构,详细的数据结构定义可以参考v4l API的文档,这里就编程中经常使用的数据结构作出说明。 首先我们定义一个描述设备的数据结构,它包含了v4l中定义的所有数据结构: typedef struct _v4ldevice {int fd;//设备号 struct video_capability capability; struct video_channel channel[10]; struct video_picture picture; struct video_clip clip; struct video_window window; struct video_capture capture; struct video_buffer buffer; struct video_mmap mmap; struct video_mbuf mbuf; struct video_unit unit; unsigned char *map;//mmap方式获取数据时,数据的首地址 pthread_mutex_t mutex; int frame; int framestat[2]; int overlay; }v4ldevice; 下面解释上面这个数据结构中包含的数据结构,这些结构的定义都在中。
|