基于motion的视频压缩的实时监控系统

项目说明:监控报警系统

 

涉及到的技术:

1.OSS/ALSA 声卡驱动的配置

2.Madplay嵌入式播放器移植

3.实现V4L2图像采集程序

4.移动监控主系统motion的移植

5.移植嵌入式web服务器boa

 

遇到的问题:

在移植madplay的时候,提示找不到madplay。

解决的办法:

通过arm-linux-readelf -d madplay 命令查看madplay需要的动态库,然后在/lib里找是否有这几个动态库。将缺少的动态库拷贝到linux系统的/lib下。

(madplay 播放器程序依赖于  zlib  libid3tag  libmad  这三个库,编译、安装三个库之后要将生成的动态库拷贝到linux系统中的/lib下。)

 

 

V4L2工作流程:打开设备->检查和设置设备属性->设置帧格式->设置一种输入输出方法(缓冲区管理)->循环获取数据->关闭设备。

 

应用程序通过V4L2接口采集视频数据分为5个步骤:

1.打开视频设备文件,进行视频采集的参数初始化,通过V4L2接口设置视频图像的采集窗口、采集的点阵大小和格式。

2.申请若干视频采集的帧缓冲区,并将这些帧缓冲区从内核空间映射到用户空间(使用mmap函数将申请的缓冲帧映射到应用程序),便于应用程序读取/处理视频数据。

3.将申请到的帧缓冲区在视频采集输入队列排队、并启动视频采集。

4.驱动开始视频数据的采集,应用程序从视频采集输出队列取出帧缓冲区,处理完后,将帧缓冲区重新放入视频采集输入队列,循环往复采集连续的视频数据。

5.停止视频采集

enum v4l2_buf_tpye *type

检查和设置设备属性:ioctl(intfd,VIDIOC_QUERYCAP,struct v4l2_capability *argp)

设置帧格式:ioctl(intfd,VIDIOC_S_FMT,struct v4l2_format *argp)

申请缓冲区:ioctl(intfd,VIDIOC_REQBUFS,struct v4l2_requestbuffers *argp)

将帧缓冲全部放入到输出队列中:ioctl(intfd,VIDIOC_QBUF,&buf)

从缓冲区中取出一个帧:ioctl(intfd,VIDIOC_DQBUF,&buf)

开始视频流数据的采集:ioctl(intfd,VIDIOC_STREAMON,&enum v4l2_buf_tpye *type)

停止视频的采集;ioctl(intfd,VIDIOC_STREAMOFF,enum v4l2_buf_tpye *type)

 

posted @ 2016-11-28 16:15  china_sdd  阅读(399)  评论(0编辑  收藏  举报