谈淼华 Linux下视频监控系统的设计与实现.doc

上传人:飞****2 文档编号:56719749 上传时间:2022-11-03 格式:DOC 页数:40 大小:2.01MB
返回 下载 相关 举报
谈淼华 Linux下视频监控系统的设计与实现.doc_第1页
第1页 / 共40页
谈淼华 Linux下视频监控系统的设计与实现.doc_第2页
第2页 / 共40页
点击查看更多>>
资源描述

《谈淼华 Linux下视频监控系统的设计与实现.doc》由会员分享,可在线阅读,更多相关《谈淼华 Linux下视频监控系统的设计与实现.doc(40页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、 密级: JINGGANGSHAN UNIVERSITY本科毕业论文(设计)题目:Linux下视频监控系统的设计与实现学 院 电子与信息工程学院 专 业 电子信息科学与技术 姓 名 谈淼华 班 级 2010级电信本(1)班 学 号 指导教师 杨建平 起讫时间 2013.112014.05 Linux下视频监控系统的设计与实现作者:谈淼华 2010级电信本(1)班 指导老师:杨建平摘要随着电子信息技术的快速发展,视频监控大步的走向了大家的视野,也越来越普及化。说明在生活中扮演者越来越重要的角色,其中一个最重要也是最显著的特点就是提供了安全防御、并监控记录。它的这个特点使得应用领域十分的广泛,生活

2、中最普通常见的就是超市商品监控,道路红绿灯及重要路段的同步录像,学校及居住小区出入人员的视频监控,以及在银行重要的安全领域扮演了必不可少的角色。它为我们的生活提供了大量的信息,可以在夜里,以及无人看守及不安全的领域把整个镜象记录下来。 视频监控给我们的世界建立了一个安全可靠的安全防御系统和调查取证系统,给人们的生活带来了大量的便利。本监控系统在linux环境下创建,socket编程搭建服务器,负责收集摄像头的图像数据,其中摄像头的数据通过v4l2编程获取,为连接上的用户提供视频服务。关键词视频监控系统;socket编程;linux环境;v4l2编程Design and Implementati

3、on of Video surveillance systerm on LinuxAuthor :tanmiaohua Teacher:yangjianping Dept. of Computer, Jinggangshan College, Jian,China;AbstractWith the rapid development of electronic information technology, video monitoring is gradually toward the everyones field of vision, also more and more accepte

4、d.It plays more and more important role in our lives, one of the most important and the most significant characteristic is to provide the security and defense, and monitoring records.This characteristic makes it application field is very wide, the most common thing in life is to monitor, supermarket

5、 goods, road in the rate of red light and important road synchronized video, video of monitoring in schools and residential area or personnel or the bank and important security domain plays an essential role.It provides a large amount of information for our life, can be in the middle of the night, a

6、nd no one guards and unsafe areas the whole mirror recorded.Video monitoring set up a secure and reliable security defense system and investigation system for our world, brought a lot of convenience to peoples life.Creating this monitor system in the Linux environment, building server socket program

7、ming, responsible for collecting the image data of cameras, the date gained by v4l2 programming of cameras, video serviced for the connected user.Key wordsVideo surveillance systerm;Socket program;Linux environmen;v4l2 program目 录第1章 前言5第2章 软件设计62.1 软件开发说明62.1.1 软件开发流程62.1.2 软件开发目标62.2 视频监控结构6第3章 视频监

8、控的设计73.1 视频采集模块73.1.1 驱动的概念73.1.2 ioctl函数73.1.3 v4l2编程介绍83.1.4 v4l2接口函数83.1.5 视频采集流程93.1.6 视频内存映射93.1.7 缓存队列103.1.8 视频采集技术点113.2 服务器管理模块113.2.1 socket编程介绍113.2.2 socket编程流程123.2.3 socket编程函数123.2.4 多线程处理133.2.5 cpu执行方式解说143.2.6 线程同步和互斥143.2.7 条件变量153.2.8 信号机制153.3 客户端浏览器模块163.3.1 浏览器访问163.3.2 http协议

9、173.3.3 http响应头部信息17第4章 视频监控模块代码的实现184.1 头文件代码部分184.1.1 v4l2编程mdev.h代码184.1.2 服务器mser.h代码194.1.3 图片显示print.h代码194.1.4 图片像素huffman.h代码194.1.5 主函数main.h代码224.2 源文件代码部分224.2.1 视频采集编程代码224.2.2 服务器编程代码264.2.3 打印图片代码304.2.4 主函数编程代码324.3 编译链接32第5章 编译链接Makefile实现335.1 Makefile的介绍335.2 Makefile的实现33第6章 视频监控系

10、统测试346.1 测试内容346.1.1 视频采集块数据测试346.1.2 服务器整体数据测试356.2 参数调试37第7章 主要技术设计与功能387.1 主要技术方案387.1.1 介绍387.1.2 技术方案特点387.2 主要功能387.2.1 帧率设置387.2.2 图片格式设置397.2.3 像素大小设置39第8章 结束语40主要参考文献40致 谢40第1章 前言如今的社会,是电子信息高速发展的社会,人们的生活水平提高了好多。视频监控则成为人们生活中一个替代观察和监督的重要一部分,它以图片直观的展现所在的地的镜像,出现的人或事物,让人可以随时查看和监控所在区域发生的一切。从商品超市,

11、到学校,小区,及交通路口都可以看到监控设备的大量存在,可见,在人们的生活中,已扮演一个越来越重要的角色。本研究的视频监控系统,是在基于linux环境下创建实现的,分为三大块,图像采集的一大块,linux视频驱动接口v4l2编程,用来进行图片的采集,对于视频驱动,直接是生产厂家的摄像头自备有,插上linux系统就会自动安装,只需通过v4l2编程接口进行视频设备的操作。第二大块,通过linux系统socket编程,创建服务器,服务器分为两个服务,一个用于接收v4l2编程采集的图片信息数据;另一个服务用于将收集到的图片信息数据,为连上的客户端提供服务,这样客户端就可以访问了。第三大块,客户端部分,可

12、以利用浏览器做为客户端,在浏览器地址栏输入服务器的ip地址,也可以是其它远程客户端通过网络来访问,浏览器具有第三方协议,支持tcp/ip协议,这样就可以在界面不断刷新的图片,也就是形成的图片流即视频,显示出来,用户就可以通过看到的监督和观察周围所发生的的一切。这三个部分就构成了视频监控系统的基本的三个部分,也是基本模块化思想。本视频监控系统,采用模块化思想,便于调试和查错,结构清晰,具有良好可拓展性;内部数据进行了封装,实用性和保密性好。主要技术性采用多线程处理技术,可支持多个客户端的同时访问,同时访问时解决的是通过互斥与同步,通过互斥锁,解决了信号的同步,不会造成信息乱串,这样就能提供稳定的

13、视频流,增强了图片的不丢失率和错误率,是本系统的重要部分。本系统采用B/S结构思想,服务器是在linux下创建的,用于不断地提供服务,只要服务器工作就可以一直为连上的客户端服务。客户端只需IE、火狐等浏览器,只要在浏览器输入ip地址和端口号视频命令,如http/:192.168.1.2:8080/?/action:stream,实现过程是,摄像头将捕捉到图片数据,服务器将图片信息数据传给浏览器,然后浏览器将一张张图片显示出来,形成视频。这样就实现了视频监控的过程。 第2章 软件设计软件设计前,首先对整个项目要有总体的分析,总体的把握,把项目细分,分为多个模块,再逐一将各个模块的功能功能实现,对

14、于系统所提供的接口、及所运行的环境,要纳入的设计之中,这样再对系统的概要设计和详细设计和测试去一个个实现。2.2 软件开发说明2.1.1 软件开发流程需求分析:市场上很多领域需要视频的监控,比如安全防盗,区域监控,地质勘查,小区及学校区域的监控。可见应用领域非常广,非常实用,对人们生活中扮演重要的角色。概要设计:设计分为三大模块,一个视频采集,一个服务器服务数据,最后一个用户服务部分。详细设计:三个模块的具体实现原理。各个模块会设计到一些技术,算法和数据结构,需要仔细分析好。编码:根据详细设计用c语言写代码去实现。测试:对各个功能模块的测试,软件所存在的缺陷和错误进行调试。交付:测试通过后,对

15、设计系统整个的总结。2.1.2 软件开发目标对于软件开发的目标,总结下来就如下面:掌握软件开发流程,完成软件开发项目。积累软件开发经验,巧用软件开发技术。锻炼文档书写能力,分析解决问题能力。2.2 视频监控结构视频监控系统直观图层次划分如图1SevInternetUSB BUS摄像头服务器客户端图1 系统结构图第3章 系统功能设计与实现3.1 视频采集模块3.1.1 驱动的概念驱动:通俗的说,通过调用系统提供的特定驱动程序接口,我们能够操作特定的硬件。驱动是硬件和系统之间的桥梁。好比U盘,我们刚插上电脑,如果没有驱动的话,我们就不能访问U盘,更不能操作它,驱动就像一个接通的桥梁,操作系统就可以

16、通过驱动去访问U盘,驱动提供的一系列接口,可实现对U盘的操作。用户空间应用程序系统接口(操作驱动),供用户程序调用 驱动(控制硬件),驱动动态加载内核内核硬件硬件图2 应用软件控制硬件图3.1.2 ioctl函数 Ioctl函数是文件I/O操作的杂物箱,要用函数都是与硬件相关的,每个设备的驱动程序都可以定义专用的一组ioctl命令,这样就可以针对设备的一些特征进行控制,比如电脑上光驱的打开。 参数个数:int ioctl(int fd,int cmd,.) 函数介绍:fd就是打开文件的描述表示符,为int型,相当于索引号,通过fd可以找到文件的结构体,里面存有文件状态的描述,如打开次数,文件状

17、态标志,如只读,只写,或阻塞方式,本系统的摄像头打开的方式是以非阻塞方式。文件结构体里有一项重要的I节点地址,里面存放了文件属性,以及数据块等信息,正是I节点,才找到了摄像头设备的地址,这样就可以存取数据。fd=open(“/dev/video1”,O_RDONLY|O_NONBLOCK) / 在设备目录/dev下打开video1号设备,其中video0号是电脑自带的摄像头,video1是USB等扩展设备。多个就会3,4,5,.等等。O_RDONLY|O_NONBLOCK 以只读方式和无阻塞方式打开。参数cmd:具体的命令提示符。V4l2编程提供如下命令cmd:在V4L2 编程中,常用到以下的

18、命令标志符:1. VIDIOC_REQBUFS:分配内存2. VIDIOC_QUERYBUF:将VIDIOC_REQBUFS 中的数据缓存变成物理地址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_DQB

19、UF:放回缓存队列13. VIDIOC_STREAMON:开始视频14. VIDIOC_STREAMOFF:结束视频15. VIDIOC_QUERYSTD:视频设备标准3.1.3 v4l2编程介绍 V4L也叫Video4Linux,是在linux内核中关于视频设备的API接口,可对视频设备的开关,图像的采集进行处理。如下说的V4L2是V4L的改进版。V4L2编程,操作视频设备的驱动。在Linux中,视频设备是设备文件,及一切设备皆文件,可以像访问普通文件一样进行读写操作,摄像头在/dev下。3.1.4 v4l2接口函数V4l2编程里提供许多接口函数,用于视频操作设备文件。本视频监控系统用到的接

20、口函数:ioctl ( int fd ,int cmd, ) ;对于参数fd,表示的是视频设备的文件描述符,只有将视频设备的文件描述符获取到,才能对视频设备进行操作,比如读写。参数cmd,就是上面说的关于iocotl函数对设备操作的一系列命令,根据命令的不同,ioctl函数所变现出来的功能也将不一样,我们理解这个函数主要是通过cmd参数,这样我们就可以知道,我们对设备有怎样的具体操作。最后的三个点参数,表示的是可变参数列表,可以多添加参数,具体的数量多少是根据cmd命令的而确定的,也就是关联与cmd参数。开始3.1.5 视频采集流程设置帧大小打开设备open(“设备文件”) 获取视频流信息设置

21、图片格式关闭视频流设置帧率结束close(“设备文件”)申请视频流缓存区打开视频流图3 视频采集流程图摄像头在采集数据的过程中,第一步打开视频设备,用open函数,然后选择图片的格式,格式选择常有YUYN和JPEG,本系统采用的是JPEG,因为JPEG占用空间少,大多浏览器支持,访问速度快。而YUYN相同情况下图片所占的空间比JPEG大,且许多浏览器支持及下载方面没有JPEG好,所以JPEG成为不二之选。关于缓存区,要得到数据,必然会把拿到的数据存放起来,存放在内核空间的缓存区,然后才会进行数据的传输。3.1.6视频内存映射内存映射,将内核空间内存映射到用户空间,每个启动的程系统都会分配一个虚

22、拟的4G空间(针对32位操作系统),有两种状态,即用户态和内核态,系统处于安全性考虑,内核态是不可以访问的,而缓存空间是在内核态,即数据放在内核态的缓存空间,我们要拿到这块区域的数据,得选用mmap函数,可以直接将内核空间的内容映射出了,且速度快。一下是mmap()函数的介绍: mmap函数,将内核态的地址直接映射到可访问的用户态内存地址中。其函数原型:void *mmap(void *addr,size_t size,int prot,int flags,int fd,off_t offsize);具体参数含义addr:待映射内存起始地址,常设置NULL,表示系统自选,映射成功则返回该地址。

23、size:代表文件大小。prot:映射区域的保护方式。取值如下:PROT_EXEC 映射区域可被执行。 PROT_READ 映射区域可被读取。 PROT_WRITE 映射区域可被写入。 PROT_NONE 映射区域不能存取。Flags:影响映射区域的各种特性。调用mmap()时必须要指定MAP_SHARED 或者是MAP_PRIVATE。 MAP_FIXED 返回地址必须是addr,若addr无法成功建立映射,则放弃映射,不对地址做修正。 MAP_SHARED 存储操作可以修改映射文件里面的内容。 MAP_PRIVATE 原文件不变,对副本进行操作。fd:映射到内存中的文件描述符。 offse

24、t:文件映射的偏移量,常用0,即从文件头开始,offset值要求是PAGE_SIZE的整数倍。mmap映射成功,会返回映射内存的起始地址,失败就返回MAP_FAILED(1)。 munmap函数,有了内存映射,程序退出时要释放用,就用munmap函数。int munmap(void *start, size_t length); 参数start,释放所映射内存的地址;参数length,释放内存的大小,成功返回0,失败返回1。3.1.7缓存队列缓存队列:摄像头工作的过程中,会从外界的读取信息,然后将信息不停的存放到内核空间里面。我们需要不断的读取,然后需要缓存队列来不断存入。队列操作:V4L2编

25、程里提供给了一个内部的队列结构,操作方法是:VIDIOC_QBU,把数据放回缓存队列;相对的,放入缓存队列中,我们要读取的话,就用VIDIOC_DQBUF,表示把数据从缓存中读取出来!每次使用出队列后完以后要将内存放回到队列,即再次入队列,这样就能循环获取图片信息。因为摄像头是要不断的从外界获取图片信息的过程,然后获取的信息要存放起来,就想公交车载人一样,需要不断的循环,将人从一个地方带到另一个地方,然后又开始。所以我们需要采用列的技术。3.1.8视频采集技术点总结:摄像头工作到采集图片信息,需要的过程就是通过系统提供的V4L2接口操作驱动继而控制摄像头,首先是打开摄像头对应的设备文件,设置获

26、取图片的格式为JPEG,继而设置帧率,一帧的大小,然后打开视频流,获取到的视频图片信息会放在内核空间的缓存中,这样我们就要拿到这个缓存,就必须运用mmap()内存映射这个点。对于图片信息怎么不断获取的突破点,就是通过缓存队列,有了这个技术点,我们就基本上解决了获取图片信息数据的步骤了。此时需注意的是,我们拿到的图片信息数据是机器码,只有机器能识别,要转换我们能看到的图片,还需要一个专门的函数模块转换出来,后续中会有介绍。如上就是视频采集的所有点。3.2 服务器管理模块3.2.1 socket编程介绍Socket:也叫套接字,是网络编程里的一种通信。Socket编程基于TCP和基于UDP协议的。

27、TCP协议:面向连接的,也叫可靠的传输连接,连接成功后,会返回一个连接套接字,就是跟文件描述符差不多的,然后信息发送和接收就这样进行不需要指定连接方的ip地址和端口。UDP协议:相反的,是面向无连接的,不可靠的传输,不会进行重发,不同的是每次信息的接收和发送都要确定连接方的IP 地址和端口。socket编程中,套接字共有三种,分别是SOCK_STREAM、SOCK_DGRAM和SOCK_RAW,对应的名称是流式套接字、数据报套接字和原始套接字基于TCP的采用的是流式套接字,基于UDP的采用的是数据报套接字。本视频监控,采用的是TCP协议,域是AF_INET,即IPv4因特网域,数据传送类型是可

28、靠的流式套接字(SOCK_STREAM),连接上后会提供稳定的数据流传输,这样保证了视频图片信息获取的不丢失率,在时间运用过程中,会将每一帧数据都记录下来,可供用户仔细的查找,不会出现大量没有拍摄到,这样就方便我们查看视频,找出很多细节,给用户带来了很大的便利。如果用数据报套接字(SOCK_DGRAM),不稳定的传输,很可能带来数据的丢失,尽管其效率要高好多,传输快,但缺陷也是存在的。3.2.2 socket编程流程其流程原理图如下:服务器Socket()浏览器客户端输入IP地址端口号Bind()connectListen()Accept()创建线程获取图片wait图片显示出来创建线程发送图片

29、图4 应用软件控制硬件图3.2.3 socket编程函数头文件在,一般写包含网络编程的几乎所有头文件。Socket是一种特殊的IO,也是一种管道文件。其运用的函数主要有:(1)int socket(int domain,int type,int protocol )Domain:域,选择AF_INETType :选择SOCK_STREAMProtocol:协议,一般选择0,默认协议。地址结构体struct sockadd unsigned short sa_family;char sa_data14;用于bind, connect, recvfrom, sendtostruct sockadd

30、r_in short int sin_family; /AF_INETunsigned short int sin_port; /网络字节顺序,端口号struct in_addr sin_addr; /Internet地址,用作服务器,则写本地地址IP4unsigned char sin_zero8;/添0(2)int bind(int sockfd,const struct sockaddr* addr,socklen_t len);地址绑定用,sockfd是文件描述符。Addr填地址的指针类型。 Len,为addr所占空间大小。(3)int listen(int sockfd,int ba

31、cklog)用于监听,backlog是便是等待连接请求的个数,若填20,则最多只能连接20个。(4)int accept(int fd,struct sockaddr* addr,socklen_t len)等待用户的连接,主要,此时的fd与前面的sockfd不是同一个,需要重新申请一个地址空间和文件描述符fd,返回值是连接上的文件描述符。有了文件描述符就可以对连接上的进行读写服务。就如上的流程进行图片的发送。(6)close(int sockfd)关闭套接字服务,正常退出。3.2.4 多线程处理关于几个概念,程序,进程,线程。程序:程序是用程序设计语言描述的,适合计算机执行的指令(语句)序列

32、。是放在磁盘的某个位置的文件。进程:进程的定义是系统进行资源分配和调度的最小单位。个人觉得可以理解为运行起来的程序,即启动的例程。线程:线程是比进程更小的,且能独立运行的基本单位。线程所占的资源很小,多个进程进程是共享进程所拥有的全部资源。对于进程和线程的理解,我认为可是:多个进程会另外开辟空间,而线程共享资源,不会再开辟空间。进程,比如是,一条公路及公路上的所有设施是资源,只有一辆汽车可以通过,如再有汽车通过就必须再重新开辟公路及建设设施然后让这辆汽车通过,这样耗费的空间资源是巨大的,若用进程服务,来一个客户端连接,就需要开辟一个新的大小空间,这样资源很容易耗尽,不利于许多用户的连接。而线程

33、,就是这条公路的所有设施不变,多辆车子共享这条公路上的所有资源,这样资源消耗就大量降低了,也利于大量用户的连接,当然公路空间的大小就决定了可以容量多辆车子。所以,视频监控采用多线程技术,而不会用多进程。下面是线程的函数介绍:pthread_create( pthread_t *tid, const pthread_attr_t *tattr, void *(*start_routine)(void*), void *arg )。Tid:线程号,收到创建。const pthread_attr_t *tattr,:线程的属性,这里要设置为线程自动分离属性,这样线程的资源可以自动回收。void *(

34、*start_routine)(void*):线程创建出来的函数,比如可以用来接受信息和写出信息。void *arg:传入为void* 类型的值给线程函数,若不传值,直接写NULL。下面是线程分离属性介绍:Int pthread_attr_setdetachstate(const pathread_attr_t *attr,int detachstate);const pathread_attr_t *attr:如申请pathread_attr_t attr,则填入,让后将这个值放到上面线程创建函数里,即线程的分离属性设置上去。int detachstate:PATHREAD_CREATE_J

35、OINABLE正常启动线程,即以正常方式启动。PATHREAD_CREATE_DETACHED以分离状态启动线程,选择这个。3.2.5 cpu执行方式解说后面涉及多线程处理时,会发生资源的争抢以及同步互斥等,需要解决时首先得先了解cpu的工作方式,后期才能很好的把握条件变量的控制。Cpu把多个任务分成很多时间片,一次只执行一个时间片,比如开辟两个线程,让他们同时运行,一个线程输出ABCDEF,另一个线程输出HIJKLM,cpu会讲两个分为若干时间片,比如线程一分AB,CD,EF三个,线程二分HI,JK,LM三个,由于两个线程同时运行,而cpu一次只执行一个时间片,这就有两种可能,可能先AB执行

36、,也可能HI,在屏幕出现的结果就会变化很多种,如ABHIJKCDLMCF这样的结果,而想要期待的结果如ABCDEFHIJKLM,就必须要有条件变量的控制才能得到,让线程1先执行,线程2等待,等1执行完了后,线程二就执行。视频监控系统也是这样,需要先拿到图片信息数据,然后再把这数据拿出去服务,须有这个先后顺序,而且获取图片信息的时候,其它需要等待这个执行完,这个知识就在下面涉及。3.2.6 线程的同步和互斥开启多线程编程时,需要考虑的问题,那就是线程互斥与同步。线程同步是指线程间的一种制约关系,简单的说就是一个线程要开始执行时,要等待另一个线程,等它发送一个信息后,然后接受到,才开始真正的运行起

37、来。线程互斥是指多个线程共享进程系统资源时,只能其中一个执行,而其它的线程将要等待。等这个线程执行结束后,就会将所占用资源释掉。然后其它的线程接着执行,但只能取其中一个。线程互斥也可以看做事一种特殊的线程同步。线程同步的方法:简单解决,加上线程锁,其API定义如下:pthread_mutex_t mutex;申明互斥锁pthread_mutex_init(pthread_mutex_t *mutex,const pthead_mutex_attr_t *mutexattr);对锁的初始化,mutexattr的取值 1.PTHREAD_MUTEX_INITIALIZER:创建快速互斥锁(本系统选

38、这个,或NULL,为默认类型) 2.PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP:创建递归互斥锁 3.PTHREAD_REEORCHECK_MUTEX_INITIALIZER_NP:创建检错互斥锁pthread_mutex_destroy(pthread_mutex_t *mutex);对锁的销毁,及最后不用的时候pthread_mutex_lock(pthread_mutex_t *mutex):上锁过程,其它资源不可争夺pthread_mutex_unlock(pthread_mutex_t *mutex):解锁过程3.2.7 条件变量 本视频监控系统是在l

39、inux环境下编程的,条件变量是对线程中处理线程响应的一种方式,和信号一样,出现信号后,才会启动其它的线程。就比如上面的列子,开辟两个线程,让他们同时运行,一个线程输出ABCDEF,另一个线程输出HIJKLM,由于cpu执行时候是随机执行这两个线程中任意一个线程的,所以无法断定那个先行,不能得到ABCDEFHIJKLM,故引入条件变量,就能让线程1先行,配合互斥锁,把ABCDEF输出后,然后发信号给线程2,线程2得到通知,然后再执行,就可以得到期望的答案ABCDEFHIJKLM。条件变量类型为 pthread_cond_t。条件变量和互斥锁一样,有两种创建方式,分别是静态创建和动态创建。静态方

40、式:PTHREAD_COND_INITIALIZER常量进行初始化,如下:pthread_cond_t cond = PTHREAD_COND_INITIALIZER;动态方式调用pthread_cond_init()函数,API定义如下:int pthread_cond_init(pthread_cond_t *cond。 pthread_condattr_t *cond_attr);条件变量的初始,相当于注册。int pthread_cond_destroy(pthread_cond_t *cond):条件变量的注销。int pthread_cond_wait(pthread_cond_t

41、 *cond):等待,阻塞,知道收到信号。int pthread_cond_signal(pthread_cond_t *cond):发送给摸一个线程的信号。int pthread_cond_broadcast(pthread_cond_t *cond):广播信号,所有线程都会收到信号。3.2.8 信号机制信号机制:是进程之间相互传递消息的一种方法,也加软中断信号。 介绍信号机制,目的就是处理socket套接字出现的问题,上文中提到过,套接字是一种文件描述符,也是管道文件,比如一个客户端连接上服务器,就会返回一个文件描述符,若正在给客户端传送图片信息服务的时候,关掉服务器,就会产生管道破裂,使

42、内核产生一个管道信号,对socket构建的服务器产生干扰,使服务器停止服务的,这是我们不想看到的结果,所以要屏蔽着个信号,就要介绍信号机制,及信号的屏蔽。SIGHUP 1 A 挂起或终止 SIGINT 2 A 键盘中断 SIGQUIT 3 C 退出 SIGILL 4 C 非法指令 SIGABRT 6 C abort(3)发出的退出 SIGFPE 8 C 浮点异常 SIGKILL 9 AEF Kill信号 SIGSEGV 11 C 无效的内存引用 SIGPIPE 13 A 管道破裂 SIGALRM 14 A 由alarm(2)发出的信号 SIGTERM 15 A 终止信号 SIGUSR1 30,

43、10,16 A 自定义信号1 SIGUSR2 31,12,17 A 自定义信号2 SIGCHLD 20,17,18 B 子进程结束 SIGCONT 19,18,25 继续SIGSTOP 17,19,23 DEF 终止 SIGTSTP 18,20,24 D 停止键 SIGTTIN 21,21,26 D 后台进程从终端读 SIGTTOU 22,22,27 D 后台进程从终端写 关于signal来处理信号方法,声明格式如下: void (*signal(int signum, void (*handler)(int)(int); 本系统中我们要屏蔽的是管道信号,即SIGPIPE 13 A 管道破裂:

44、 写一个没有读端口的管道。3.3 视频采集模块3.3.1 浏览器访问前面已经搭建了视频采集模块和服务器构建模块,就是可以提供服务了,然后就等待用户的连接,浏览器采用IE,或火狐等浏览器,要获取视频的内容,直接在浏览器的地址栏:http:/192.168.1.2:8000/?/action:stream (比如服务器地址是192.168.1.2,然后自己定义的端口号是8000,关于/?/是里面一串的东西,固定格式,action动作,后面的本系统提供了两种,一种是获取视频,另一种只获取一张图片)。如只要获取一张图片就在地址栏输入:http:/192.168.1.2:8000/?/action:im

45、age。浏览器可以是本地,也可以远程,只要服务器联网,就可以提供远程访问服务。3.3.2 http协议HTTP是一个基于应用层的面向对象的协议,特性简捷、快速,适用于浏览器。HTTP协议的主要特点可概括如下:1.支持客户/服务器模式。2.简单快速3.灵活4.无连接5.无状态HTTP URL :URL是一种特殊类型的URI,可以查找某个资源的信息。其格式如下:http:/host:portabs_path,http表示要通过http协议;host表示合法的Internet主机域名,也可以是IP地址;port表示端口号,若不填,默认值是80;abs_path请求资源的URI。3.3.3 http响应头部信息响应信息 = 响应报头 + 帧头 + 数据 + 帧头 + 数据 +.响应报头 = HTTP/1.0 200 OKrnConnection: closernServer: Net-camera-1-0rn Cache-Control: no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0rnPragma: no-cac

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com