首页 > 编程知识 正文

视频监控系统由哪几部分组成,视频监控服务器搭建

时间:2023-05-04 03:37:24 阅读:112290 作者:570

转载:来自http://blog.csdn.net/a杨锟QQ:843308498

求职临近了,我想一边复习以前做过的项目,一边给想做这个项目的孩子的鞋做指导。

硬件: MINI2440软件: Linux-2.6.32

一、H.264介绍

H.264是视频压缩编码标准。 该标准能够在低带宽(2M以内)中提供高质量的图像传输。 数据分析显示,在同等质量下,H.264比前一代编码标准MPEG2平均节省64%,比MPEG4平均节省39%的传输码流。

二、H.264视频监控系统架构

体系结构图如下

注意,照相机最好采用名为网格2000的旧照相机。 这个照相机已经停产了,很难找。 我买了最新的照相机,但是最终收集的图像数据包的数据太大,无法通过UDP传输,所以失败了。 UDP一次传输最多2K以内的数据包。 否则会发生丢包,客户端收到的数据显示为绿色。

三、视频数据采集接口V4L2

首先要解决的问题当然是如何收集摄像机的数据。 操作照相机需要和照相机驱动程序打交道。 幸运的是,当前的Linux内核集成了大多数摄像头驱动程序。 所以,这个我们不需要在意。 如果Linux内核没有集成,就只能自己移植了。

V4L2正式称为Video for Linux two,是Linux提供的标准API集,APP应用程序通过API集调用音视频设备,驱动音视频设备操作音视频设备这一系列API屏蔽音视频硬件细节,为APP应用提供通用接口。 V4L2具体作为IOCTL系统调用在Linux上提供给用户,通过向IOTCL写入不同命令来实现对音频-视频设备的不同操作。

具体步骤如下。

首先,打开视频装置以获取装置和图像的信息,例如最大最小分辨率,获取相机存储缓冲器中的信息,执行存储器映射,然后执行相机所需的设置,例如一帧图像的大小、图像的格式(RGB,) 以下是一些常见的V4L2命令。

1 VIDIOC_REQBUFS :分配内存

2 vidioc _ query buf :将vidioc _ req bufs分配的数据缓存转换为物理地址

3 VIDIOC_QUERYCAP :查询驱动功能

4 VIDIOC_ENUM_FMT :获取当前驱动程序支持的视频格式

5 VIDIOC_S_FMT :设置当前正在驱动的频率捕获格式

6 VIDIOC_G_FMT :读取当前正在驱动的频率捕获格式

7 VIDIOC_TRY_FMT :验证当前驱动的显示格式

8 VIDIOC_CROPCAP :查询驱动的修剪能力

9 VIDIOC_S_CROP :设置视频信号的边界

10 VIDIOC_G_CROP :读取视频信号的边框

11 VIDIOC_QBUF :从缓存中读取数据

12 VIDIOC_DQBUF :将数据返回到缓存队列

13 VIDIOC_STREAMON :启动视频显示函数

14 VIDIOC_STREAMOFF :结束视频显示函数

15 vidioc _ query STD :确定当前视频设备支持的标准,如pal和NTSC。

有关具体操作,请参阅本文。 http://blog.csdn.net/seven 407/article/details/6401792 # comments

四、H.264编码库的操作

在V4L2接口上逐帧收集了视频数据。 第二个问题是用H.264标准压缩内存中的帧数据。 H.264是一系列标准,许多组织将其编码实现。 我在使用T264代码库。 这是国内视频编码自由组织合作开发的。 它符合H.264视频编码标准,吸收了JM、X264和Xvid三种源代码的优点。 在Linux上完成压缩编码。 下载并编译T264的源代码时,将在T264/avr文件夹下生成列*.obj文件。 APP应用程序可以直接使用这些目标文件提供的功能函数对YUV格式的视频进行编码。 其流程如下图所示

首先,init_param函数读取配置文件的编码配置文件信息,包括图像帧大小、一帧间隔和参考帧数。 在T264的源代码库中有放置参照文件enconfig.txt,通常要改变的参数只有图像帧大小的放置。 然后,t264_open调用init_param读取的配置信息读取并初始化264编码器。 然后,调用T264_malloc为编码器分配空间以存储编码的帧数据。 最后再调整

用T264_encode开始编码,该函数的参数包括上一部分V4L2操作中为视频数据映射的内存地址,且该函数会返回编码后一帧数据大小。这样视频数据就被压缩放到为T264分配的内存空间中了。当不需要编码的时候调用T264_close关闭编码器。

五、基于UDP方式的视频实时传输

       当我们得到H.264编码标准压缩好的数据的时候我们需要发送到windows客户端,那下面一个问题便是如何与windows通信和传输视频数据。如何接触到网络编程应该都知道如何通过socket方式进行UDP数据传送。注意如果压缩后的数据包过大便无法通过UDP传输了,因为windows应用程序我没时间去写,是采用别人现成的,所以无奈只有用UDP方式了,如果你能写windows应用程序可以考虑采用TCP方式,然后摄像头就不局限于网眼2000了。下面是UDP传输方式流程:

UDP我就不多废话了,学过网络编程的都知道。


六、程序主流程图


七、结语

       之所以去做这个项目是因为听了国嵌的项目视频,听了视频也没理出个思路来,后来查阅了很多资料才知道了大体思路。后来我查到一篇文章是桂林电子科大的硕士论文,将这个项目讲的很详细,也测试很多数据,同时说了windows应用程序的编写。我想这个项目的作者应该是来自此人吧,国嵌给的windows应用程序和文章上贴图的一样,没给源码,且还有BUG也没修复,后来我将此文章往国嵌的交流群一上传便被踢出了。不管这么多了,反正跟我无关。我给大家提供下载:http://download.csdn.net/detail/ayangke/3969255

       此文只给了大体上的实现思路,具体实现还有童鞋们多查阅资料和多写代码啊!有问题可以联系我:qq:843308498

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。