嵌入式视频监控系统的设计方法_2

文档序号:9330925阅读:来源:国知局
否则,返回步骤101 ;
[0058]步骤104:设置视频采集的参数,将videodev的对象设置为全局变量,作为两个线程的共享资源;
[0059]步骤105:为服务器端创建两个并行的线程,分别为:视频采集线程和服务线程。视频采集线程主要是进行视频采集、视频压缩的过程。网络服务端服务线程主要进行网络数据帧发送和控制命令帧接收的功能。
[0060]视频采集线程创建完成后,判断是否退出视频采集线程,若退出则进入步骤106,否则循环运行视频采集线程;服务线程创建前,先打开socket,将本地IP绑定端口号,实时监听是否有PC客户端需要进行网络传输,若有PC客户端需要进行网络传输,则建立网络连接;服务线程创建完成后,判断是否退出服务线程,若退出则进入步骤106,否则循环运行服务线程;
[0061]如图4所示,视频采集线程的创建步骤如下:
[0062]步骤a)捕获视频帧数据,判断当前网络数据帧是否正在发送,若是,则循环等待,否则将线程互斥锁上锁;
[0063]步骤b)采用XviD编码器对视频帧数据进行压缩,并将压缩后的数据放到网络数据帧中,等待发送。XviD是编码效率最高、功能强大,并且是免费共享的资源,它直接可以在官方网站上下载,在Linux系统中的输入如下命令:“make ;make install”,然后就可得到动态链接库。
[0064]步骤c)将线程互斥锁解锁,变换数据帧序列,准备下一次视频图像的采集和压缩。
[0065]如图5所示,服务线程的创建步骤如下:
[0066]步骤i)服务线程接收PC客户端发送来的控制命令帧,并且根据控制命令帧设置米集参数;
[0067]步骤ii)查看线程互斥锁是否上锁,若已经上锁,则进入循环等待程序;若没有上锁,则将当前序号的数据帧上锁,防止视频采集线程将压缩视频写入正在发送的数据帧内,即设置framelock [frameout] = I,进入网络数据帧发送流程;
[0068]步骤iii)网络数据帧发送后,将当前序号的数据帧解锁,即设置framelock [frameout] = 0,准备下一帧的网络发送。
[0069]步骤106:判断是否有其他线程在工作,若有则进入等待,否则直接结束退出;
[0070]如图6所示,PC客户端设计包括如下步骤:
[0071]步骤201:建立socket连接,测试该连接是否能正确传输数据:若数据传输正常,就先发送PC客户端的控制命令帧,它是数据结构client_t的实体。
[0072]步骤202:开始读取网络数据帧,接收压缩视频流;
[0073]步骤203:判断PC客户端软件是否为保存命令,若是保存命令,则将视频流保存到文件中,执行结束命令,视频压缩文件保存到硬盘后,可以再调用播放命令,将视频压缩文件解码后用SDL方式播放出来。若不是保存命令,就进入实时视频播放阶段,将视频流放入缓冲区,并进入下一步。视频文件的保存可以用文件操作函数fVrite实现。
[0074]MPEG-4 (这里采用XviD方式)编解码的过程与静态图像编解码不一样,MPEG-4的编码是基于前后帧之间的相关性进行压缩的,那么在解码的时候同样需要前后的参考视频帧,这样才能正确的实现MPEG-4解码。于是,就在视频解码之前设计了一个视频缓冲区。该缓冲区由一个环形的数据结构实现,通过写指针和读指针分别实现缓冲区的写入和读取。
[0075]步骤204:判断缓冲区的视频帧是否可解码:若是,则采用XviD解码器进行解码,最后由SDL程序播放实时视频图像;若否,则返回步骤203继续将视频流放入缓冲区,直至可以解码,播放实时视频图像,最后执行结束命令。如果PC客户端一直没有结束命令,那么就会进入网络接收、解码、播放的循环中,从而实现连续播放视频帧的过程。
[0076]视频数据流的解压过程和服务器端类似,采用XviD解码器实现。PC客户端的程序需要包括XviD.h的文件,具体的静态图像解码过程可以参考文件目录下的XviD_decraw.c文件。实时解码的视频数据流来自视频缓冲区,编写解码过程需要和缓冲区的读写过程配入口 ο
[0077]本发明视频编解码采用XviD编解码器提供的函数接口实现。参考xvid_encraw.c程序,该程序在XviD编码函数接口的基础上编写了三个函数,分别表示编码初始化、编码过程、编码结束。参考xvid_decraw.c程序,该程序也在XviD函数接口的基础上编写了三个函数,分别表示解码初始化、解码过程、解码码结束。
[0078]本发明的视频编解码的实现就是基于上述两个例子程序编写的编码和解码函数实现的。不同点在于:xvid_encraw.c和xvid_decraw.c程序用于编码、解码静态的图像文件,编解码用于动态的视频流。在服务器端的视频采集线程中,主要实现视频的编码过程。
[0079]将服务器端和视频端的程序编写完成后,为了调用XviD的动态链接库或静态链接库,还需要将源码编译后,再与XviD的链接库链接生成可执行文件。总之,实现XviD的编解码需要调用初始化、编解码过程、编解码结束三个基本的成员函数来实现。
[0080]如图7所示,是嵌入式视频监控系统的服务器端的数据帧传输结果。如图8所示,是嵌入式视频监控系统的PC客户端的数据帧传输结果。服务器端标识编码视频帧和编码时间;PC客户端标识解码视频帧和解码时间。本发明设计的系统可以实现视频采集、视频编解码、视频传输和视频播放、视频保存的功能,可用于无线视频监控领域,也可用于其他视频压缩技术和视频通信技术的研究和开发。
[0081]以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
【主权项】
1.嵌入式视频监控系统的设计方法,包括服务器端设计和PC客户端设计,其特征在于, 所述服务器端设计包括如下步骤: 步骤101:初始化设备并配置网络数据帧的空间和视频压缩帧的大小; 步骤102:采用socket编程实现视频数据的网络接收和网络发送; 步骤103:基于Video4Linux的API进行编程,采用内存映射方式采集视频图像,并测试是否正确采集视频图像,若是,则进入步骤104 ;否则,返回步骤101 ; 步骤104:设置视频采集的参数,将videodev的对象设置为全局变量,作为两个线程的共孚资源; 步骤105:为服务器端创建两个并行的线程,分别为:用于采集处理的视频采集线程和用于网络传输的服务线程;视频采集线程创建完成后,判断是否退出视频采集线程,若退出则进入步骤106,否则循环运行视频采集线程;服务线程创建前,先打开socket,将本地IP绑定端口号,实时监听是否有PC客户端需要进行网络传输,若有PC客户端需要进行网络传输,则建立网络连接;服务线程创建完成后,判断是否退出服务线程,若退出则进入步骤106,否则循环运行服务线程; 步骤106:判断是否有其他线程在工作,若有则进入等待,否则直接结束退出; 所述PC客户端设计包括如下步骤: 步骤201:建立socket连接,测试该连接是否能正确传输数据:若数据传输正常,就先发送PC客户端的控制命令帧; 步骤202:开始读取网络数据帧,接收压缩视频流; 步骤203:判断PC客户端软件是否为保存命令,若是保存命令,则将视频流保存到文件中,执行结束命令;若不是保存命令,就进入实时视频播放阶段,将视频流放入缓冲区,并进入下一步; 步骤204:判断缓冲区的视频帧是否可解码:若是,则采用XviD解码器进行解码,最后由SDL程序播放实时视频图像;若否,则返回步骤203继续将视频流放入缓冲区,直至可以解码,播放实时视频图像,最后执行结束命令。2.根据权利要求1所述的嵌入式视频监控系统的设计方法,其特征在于,步骤105中视频采集线程的创建步骤如下: 步骤a)捕获视频帧数据,判断当前网络数据帧是否正在发送,若是,则循环等待,否则将线程互斥锁上锁; 步骤b)采用XviD编码器对视频帧数据进行压缩,并将压缩后的数据放到网络数据帧中,等待发送; 步骤c)将线程互斥锁解锁,变换数据帧序列,准备下一次视频图像的采集和压缩。3.根据权利要求1所述的嵌入式视频监控系统的设计方法,其特征在于,步骤105中服务线程的创建步骤如下: 步骤i)服务线程接收PC客户端发送来的控制命令帧,并且根据控制命令帧设置采集参数; 步骤ii)查看线程互斥锁是否上锁,若已经上锁,则进入循环等待程序;若没有上锁,则将当前序号的数据帧上锁,即设置framelocktframeout] = 1,进入网络数据帧发送流 程; 步骤iii)网络数据帧发送后,将当前序号的数据帧解锁,即设置framelock[frameout] = O,准备下一帧的网络发送。
【专利摘要】本发明公开了一种嵌入式视频监控系统的设计方法,包括服务器端设计和PC客户端设计;对于服务器端设计:基于Video4Linux的API进行编程,采用内存映射方式采集视频图像,并为服务器端创建两个并行线程:视频采集线程和服务线程。对于PC客户端设计,设计了视频流缓冲区暂存,由XviD解码器解压视频流,由SDL程序进行实时播放。PC客户端还具有保存视频压缩流的功能,输入文件播放命令可以播放保存在硬盘上的视频流文件。本发明采用XviD进行编解码,效率高、功能强大,且XviD是免费共享的资源,可在官方网站上直接下载使用,有利于降低嵌入式视频监控系统的设计成本。本发明可用于无线视频监控领域。
【IPC分类】H04N7/18
【公开号】CN105049806
【申请号】CN201510460301
【发明人】郭洁, 顾燕, 王娴珏
【申请人】河海大学
【公开日】2015年11月11日
【申请日】2015年7月30日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1