网络视频监控系统
1、 项目简介:
网络视频监控系统主要基于C/S架构,包括前端的视频采集压缩、视频传输、监控客户端和管理服务器。
该系统的简单架构如下图所示:
编码器外部硬盘客户端IP网络 编码器服务器 外部硬盘客户端外部硬盘客户端编码器 视频采集压缩:视频采集编码器支持4路视频输入,具有视频的实时采集,视频压缩和网络传输等功能。每个视频采集设备都有自己的IP地址和网络接口,可独立工作,直接接入网络。
视频传输:视频传输部分采用基于UDP的RTP/RTCP协议来传输实时的视频数据和控制信息。管理服务器根据客户端用户的请求,进行相应的处理,并向对应前端发送相应的控制信息,各前端根据该控制信息进行响应。
监控客户端:监控客户端主要的功能有:
1、 对接收到的视频数据进行校验、排序、控制。由于视频传输采用的是RTP/UDP
协议,所以视频数据包路由到客户端时数据不能进行实时播放,必须对数据包进行排序组帧及控制丢包率。
2、 将数据包排序组帧后必须进行解码才可以实时播放,所以在监控客户端需要
视频播放器。播放器采用ffmpeg架构。
3、 监控客户端可以调整视频的传输和存储帧率;对视频的播放方式有:网络播
放、播放文件同时具有录制视频功能。
管理服务器:管理服务器将所有前端的视频设备集中起来管理,并维护客户端同他们的网络连接。
2、我的工作:
在网络视频监控这个项目中,主要负责的是监控客户端中对数据包进行校验和排序组帧这一块。在整个项目中,界面部分我主要负责的如下所示:
1、
数据校验:在整个项目中,数据校验采用CRC32循环冗余校验法。
算法的实现:①、读取数据包有效数据并获取数据包有效数据的长度。
②、采用查表方法得出CRC32校验的参数表crcTable[256]。大小为256的数组。
③、将①中得到的数据包和数据包的长度作为参数带入校验函数getcrc(char *pkg, int len)中进行校验。
④、最后返回的crc= = ((crc >> 8) & 0x00FFFFFF) ^ crcTable[ (crc^ *c) & 0xFF ];与原来数据包包头的CRC进行比较,判断两者是否相等,相等则校验通过。
2、 示:
排序组帧:排序组帧主要用到了对链表的处理。数据包包头的数据结构如下所
typedef struct _PKGHEADER{
int crc;
int seq;
struct timeval tv;
int frame_len;
}PKGHEADER;
利用链表需要设计一个结构体类型,其结构如下图所示:
typedef struct msger{
int frame;//帧号
int package;//包号
int lenth;//包的有效长度
char data[1024];//包中有效数据
struct msger *next;
}MESSAGE,* NODE;
通过读取数据包包头seq,根据seq进行排序。首先将收到的数据包包头seq与链表的表尾的pakage进行比较,进行相应的添加节点。同时在此进行超时重传控制。
因篇幅问题不能全部显示,请点此查看更多更全内容