时间:2015-04-08 10:42 文章来源:http://www.lunwenbuluo.com 作者:任黎明 孙玲玲 点击次数:
图4 V4L2工作流程图
其主要流程的程序实现如下:
(1)打开摄像头
fd = open(dev_name, O_RDWR | O_NONBLOCK, 0);
if (-1 == fd){
fprintf(stderr, "Cannot open '%s': %d, %s\n", dev_name, errno, strerror(errno));
return false;
}
在本文中使用基于ZC301芯片组的USB数码摄像头,设置设备名为/dev/video0。为了不出现无法读取的问题,注意要以读写(O_RDWR)的形式打开该摄像头。如果成功将返回该设备的文件描述符,否则返回错误码-1。
(2)读取设备视频参数
struct v4l2_capability cap;
if (-1 == xioctl(fd, VIDIOC_QUERYCAP, &cap)) {
if (EINVAL == errno) {
fprintf(stderr, "%s is no V4L2 device\n", dev_name);
return false;
} else {
return false;
}
}
这里相当关键,因为要使用该摄像头,所以我们必要认真查阅资料,了解该摄像头的功能和特性,否则可能导致摄像头无法正常工作,接下去的工作更是无从谈起。这里将得到摄像头性能参数cap,在后面的设置环节将根据该参数设置相对应的数值。
(3)请求设备缓存区
struct v4l2_requestbuffers req;
req.count = 4;
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
req.memory = V4L2_MEMORY_MMAP;
if (-1 == xioctl(fd, VIDIOC_REQBUFS, &req)) {
if (EINVAL == errno) {
fprintf(stderr, "%s does not support memory mapping\n", dev_name);
return false;
} else {
return false;
}
}
该步骤将在设备中开辟4个缓存区用于采集视频,缓存区在设备中声明,在用户空间开辟,接下来分别为这4个映射地址。
2.3 H.264视频压缩
相对于其它传统压缩标准来讲,H.264对视频数据的压缩率高出不少,并且其自身对信道的适应能力以及多媒体兼容性方面都具有明显优势,因此该种标准在当今视频压缩以及无线传输方面得到了十分广泛的应用。H.264视频编码过程主要分三步实现,分别是H.264编码器的设计、视频数据的压缩程序设计、X264库文件的交叉编译。
2.4 WiFi视频传输
本文中选用WiFi来传输视频图像数据原因如下:其一,传输速度非常快,传输带宽能满足实时视频数据的要求。其二,无线电波的覆盖范围广,室外空旷场所理论上WiFi最远覆盖半径可达900英尺左右,约合300米。其三,方便快捷,无须布线,只要附近设置有“热点”,就可高速连接到因特网接,使远程传输和控制成为可能[4]。
2.5 PC上位机视频显示
在设置好ARM平台IP及端口号以后,可在上位机发送视频采集指令并查看实时视频图像,实时显示图像如图5所示。
图5 视频服务器总体结构图
3 结 语
本文提出了基于Linux的无线视频监控系统,并且实现了基本功能,经测试,本方案具有较高的传输速度,显示图像画面清晰。未来若能加入无线Mesh网络设备,组成更大规模无线视频监控系统,应用前景将会更加广泛。虽然该方案可以成功运行,但实验室的运行环境和实际环境会有不少差别,故有待未来做进一步改进。
参考文献
[1]黄宇.基于H.264的网络视频监控系统设计与实现[D].西安:西安电子科技大学,2011.
[2] Jianmiao Hu,Jianmei Cen.Video surveillance in public space in China[J].Frontiers of Law in China,2009,12(5):12-14.
[3]谢猛.基于ARM和Linux平台的移动视频监控小车研制[D].武汉:华中师范大学,2013.
[4]耿元鸣.几种主流视频编码方式的性能比较和分析[J].电子科技,2007(7):51-54.
联系方式
随机阅读
热门排行