版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
[10]。软件压缩主要是靠CPU和软件来实现视频的处理和编码,软件压缩的特点是不需要占地面积,灵活性高成本低,但是它对处理器的要求高,比较占用系统资源。本次设计采用H.264软件压缩技术进行视频的处理。2003年,H.264编码标准由MPEG/ITU-T机构联合推出,h.264是目前最主流的视频压缩编码技术。一般应用于视频会议、可视电话等低码率视频传输。h.264是非常优秀的可适应多种环境多种速率的软件视频压缩技术,在应用环境方面,无论有没有丢包、延时和误码它都可以通过丰富的错误处理工具轻松解决。在编码效率方面,它采用混合编码结构,可以比H.263节省了一半以上的码率,。H.264由两层构成,第一层视频编码层(VCL)和第二层网络提取层(NAL),第一层的作用是基于块的运动补偿进行混合编码然后快速的显示视频。第二层通过使用下层网络的分段格式对组帧、逻辑信道的信令、定时信息等视频数据进行编码和传输。本次设计中从摄像头得到的原始信息量太大,而我们现有的网络情况完全不能满足它的传输,所以必须使用H.264对音视频数据进行编码处理,以利于在网络传输时,提高视频数据的传输速率,节省传输带宽和存储内存。图2.3视频编码标准的发展2.5FFmpegFFmpeg是一个基于linux平台开发的开源的简洁的多媒体框架,它通常以作为库或作为工具来实现音视频的采集,格式变换和编解码。用户可以通过使用该框架访问很多视频格式,可以记录转换音视频数据,比如说你可以从摄像头里面把视频给录制下来,从声卡里面把音频给录制下来,然后转为各种格式,并且它还可以把这些格式发送给流媒体服务器。我们经常使用的格式工厂或者各种播放器,它的内核就是FFmpeg,它是影视频开发的必备程序。结合以上功能本次设计使用FFmpeg进行推拉流的实现。它的特点是有较高的可移植性和兼容性,既可以在Windows下运行编译也可以在linux下运行编译。Ffmpeg是一个文件夹,里面包含各种文件和程序,比较容易移植。它有很多功能,支持对各种结构体进行封装和编解码,还可以流化音视频、进行视频抓图和录制、给视频加水印等。结合以上功能本次设计使用FFmpeg进行推拉流的实现。图2.4ffmpeg流程图2.6通信协议介绍2.6.1RTMP协议实时消息传送协议RTMP是为播放器和流媒体服务器之间进行音视频数据交互的网络私有协议。RTMP通信协议是基于TCP连接的协议族,它就像一个用来装数据包的容器,作用是解决音视频传输流的多路复用和分包问题。它一般是在TCP的一个通道上传输flv、mp4格式流。它的优点是可以有效的避免音视频流在广域网传输过程中丢包对而影响视频质量的问题。除此之外RTMP协议传输的FLV封装格式支持的H.264视频编码方式可以在很低的码率下显示质量还不错的画面,非常适合网络带宽不足的情况下收看流媒体。它还支持音视频直播,支持H264/AAC编码和flv/mp4视频格式,可以将直播流录制成flv文件,支持在线转码,还可以只占用少量内存完成视频传输功能。可以和JWPlayer,FFmpeg协同工作,支持跨平台。综上述优点,本次设计使用RTMP协议。表2.1协议位置应用层HTTPRTMP传输层TCPUDP网络层IP数据链路层网络相关协议物理层有线/无线2.6.2HTTP协议在TCP/IP协议模型的应用层是HTTP超文本传输协议,。HTTP协议是一种无状态的协议,默认采用80的端口号连接服务器端和用户端的交互,它对于客户端和服务端之间的交互进行了相关的约束和规范。HTTP的工作流程是:用户在客户端点击相应的链接,就可以尝试获取相应的服务,用户发送请求获取响应,服务器端会给予回应,如果失败则会返回对应错误代码,用户根据错误代码提示就可以查看错误来源,如果成功会返回用户需要的信息给客户端显示屏,至此,连接中断。整个过程都是由HTTP进行,用户只需要点击链接,等待返回数据即可。
第3章需求分析及技术搭建3.1Linux的网络视频监控系统总体设计方案伴随着科学技术的日新月异,网络视频监控的设计千式百样,但百变不离其宗,它们大部分的结构都由视频采集端、服务器端和客户端组成,并应用于各个行业的各个领域如:工厂、校园、家庭等。视频监控系统的采集端使用USB摄像头2.0进行采集视频数据,然后使用H.264编码格式进行视频数据的压缩编码,并通过网络发送到服务器端,然后由服务器发送给客户端,再由客户端进行解码播放。由于视频监控的功能复杂,数据量大,需要的系统的稳定性要高,所以本次设计基于Linux系统平台来完成,以保证视频传输的网络环境和视频质量。本次设计的总体目标是设计一款占用空间小,安装操作简单,灵活性高的视频监控。本次视频设计的总体框架是由视频数据的采集传输和流媒体服务器两部分组成。使用USB摄像头2.0作为视频数据的采集和传输部分。为提高传输速率将采集的视频数据编码成H.264,通过编码的H.264视频数据由安装的FFmpeg开源库进行数据的封装和打包,然后由流媒体服务器Nginx进行RTMP推流。而视频画面主要显示在PC机的网页上。网页通过HTTP和RTMP通信协议向服务器发送查看视频的请求,由此就可以随时的查看监控视频。视频监控系统的总体框架图如下图所示。图3.1监控系统总体结构设计图3.2视频监控平台的搭建3.2.1下载Ubuntu镜像文件本次监控系统设计的开发环境使用Ubuntu14来进行底层操作,首先下载Ubuntu的镜像文件。在浏览器搜索栏输入进入Ubuntu官网,点击download下载项,进入Ubuntu版本列表,选择Ubuntu14.04.3LTSreleasenotes,点击UbuntuDesktopandServer,找到匹配电脑的64-bitPC(AMD64)Desktop,然后选择Ubuntu14.04.3LTSreleasenotes,然后选择UbuntuDesktopandServer,接下来我们选择桌面版64-bitPC(AMD64)desktop。desktop桌面版面向个人电脑的使用者,可以进行文字处理、网页浏览、多媒体播放等。本质上说,这是一个为普通用户所定制的多用途操作系统。另一方面,服务器版旨在充当web服务器,可用来托管文件、网页及相似内容。3.2.2安装Ubuntu首先创建虚拟机,根据导向选择自定义、下一步,选择稍后安装系统,然后客户机操作系统选择Linux,版本下拉选择Ubuntu64(如果电脑是32位,则选择Ubuntu),选择安装位置,这里必须输入一个已存在的目录,不然后期会报错的,设置处理器内存都采用默认的,然后选择将虚拟机存储为单个磁盘,然后点击自定义硬件,选择我们第二步下载的Ubuntu镜像,然后点击完成,向导设置完成。接下来开启虚拟机,然后选择中文简体点击InstallUbuntu,按照提示进行下一步,到键盘布局选择汉语,设置用户名:cqq,密码:111111,最后开始正式安装,重启。此时登录浏览器,输入百度网址,发现可以访问网络。至此Ubuntu虚拟机创建完成。图SEQ图\*ARABIC3.2Ubuntu安装成功3.3流媒体的实现之Nginx3.3.1Nginx原理详解本次设计采用Nginx视频服务器,使用流媒体时会涉及“两端一服”,两端是指推流端和拉流端,推流端是把摄像头数据推送给流媒体服务器,拉流端是从流媒体服务器里面得到数据并把它播放出来。在推流端采用FFmpeg程序来采集数据和格式转换并且把它推送给流媒体服务器。从摄像头扑捉视频并发送给服务器再到客户端下载查看视频整个过程。“一服”指的是流媒体服务器,它是一款开源稳定的web服务器,它的配置比较简单可移植性强。可以满足本设计的基本需求。客户端向服务端发送request请求行、头部和数据,然后服务端发送response包括状态行、报头和响应正文。如下所示。图3.3nginx流程方法3.3.2Nginx服务器的移植首先输入sudoapt-getinstallbuild-essentiallibpcre3libpcre3-devlibssl-dev命令下载安装Nginx和Nginx-rtmp编译依赖工具,然后创建工作目录并切换到工作目录,通过wget命令下载Nginx和Nginx-rtmp源码,通过sudoapt-getinstallunzip命令,安装unzip工具为后面解压安装包做准备,通过tar命令解压之前下载Nginx和Nginx-rtmp安装包,通过cd命令,切换到Nginx-目录。图3.SEQ图\*ARABIC4编译安装Nginx然后添加Nginx-rtmp模块编译到Nginx,Nginx有很多官方和第三方的模块,在这里我们只需要安装设计中必须的模块就好,来节约资源。本次设计需要的依赖库有pcre库、zlib库、openssl库、Nginx包等。指向安装目录图3.SEQ图\*ARABIC5模块1指向pcre库文件目录。图3.SEQ图\*ARABIC6模块2指向zlib库文件目录,来支持gzip做headers压缩。图3.SEQ图\*ARABIC7模块3指向openssl安装目录,来支持HTTP协议。图3.SEQ图\*ARABIC8模块4添加静态链接的第三方模块,可以实现四层协议的转发、代理和负载。图3.SEQ图\*ARABIC9模块5图3.SEQ图\*ARABIC10安装支持模块执行Make和sudomakeinstall命令,编译安装Nginx、Nginxinit脚本,启动和停止Nginx服务,生成配置文件,配置Nginx-rtmp服务器,打开/Nginx/conf/Nginx.conf文件,Nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的,每个区块以一对大括号来表示开始与结束。其中main存在于nginx.conf文件的最高层,它的层下可以有event、http层。在末尾添加图3.11配置节点,支持RTMP,服务器会监听1935端口,通过以下配置把流发送给播放器。保存Nginx.conf配置文件,然后重新加载Nginx服务。图3.11修改源码3.4流媒体的实现之FFmpeg3.4.1FFmpeg原理详解FFmpeg会涉及四个层次:原始数据层,编码层,容器层和协议层。从摄像头采集原始数据,因为这些原始数据比较庞大需要压缩。对于采集的视频采用视频编解码器进行压缩。压缩之后以某种格式例如mp4或者是flv等其它格式进行压缩。压缩的视频数据格式多种多样,FLV格式只是负责把它们打包起来。这些flv的文件会经过某种协议传送给流媒体服务器。当客户端需要观看某些视频时,又需要从流媒体服务器通过某些协议下载到FIV这些文件中。这些文件里面存放的是被压缩过的视频数据,我们需要经过视频解码器进行解压缩得到原始数据,这些原始的数据就可以通过屏幕播放出来。整个流程会涉及原始数据、编码层、编码层可以把原始数据压缩成各种格式的数据。同时也可以把各种格式还原成原始数据。这些压缩后的数据会封装进一个容器。这个容器指的就是mp4、FLV等一些格式的文件。这些文件会经过协议层传送给流媒体服务器或者是从流媒体服务器经过协议层下载下来。这里有个误区,我们以为FLV代表音频视频的压缩格式。其实它只是一种封装格式,里面有音频和视频数据。音频和视频数据有自己的压缩格式,而且还不止一种,flv支持vp6、h.264视频编码,目前经常使用的领域是互联网视频网站。图3.12ffmpeg原理图因为本次设计使用的是RTMP协议,所以不能直接使用视频编码器h.264,需要FFmpeg库对经过h.264编码后的视频数据进行打包,把视频数据转换成flv格式,在通过rtmp视频流的方式发送到流媒体服务器。流程如下:容器层会分配一个flv格式,根据flv格式分配一个结构体,然后FFmpeg开源程序会把USB摄像头2.0采集的视频数据通过结构体创建成flv格式的输出流,然后使用RTMP通信协议向服务器的监听端口进行推流。在WEB服务器中编写网页并添加JWPlayer播放器,当客户端通过HTTP通信协议向WEB服务器发送请求时,WEB服务器通过JWPlayer播放器解码FLV格式的数据并通过HTTP通信协议发送到客户端,此时,可后通过网页实时查看监控视频,也可通过服务器查看监控视频回放。通过查阅资料得到封装的很多格式,它的含义为编码器把所生成的视频、音频、字幕等多媒体内容按照一定的规范密封在一个大的容器里。容器的功能是为音视频数据提供导航,如果没有容器,一个视频只能从头看到尾不能进行各种操作,而容器的规范则由各自的单位和组织规定,各个容器之间有一些可以互通兼容,但有的不可以,必须要改变音视频数据的编码格式才能互通转换,非常麻烦,所以为简洁操作过程,本次设计选用效率高,兼容性好的FFmpeg进行推流,采用FLV封装格式、H.264编码。图3.13数据传输图3.4.2FFmpeg搭建通过wget命令下载FFmpeg-3.4.4.tar.bz2和libx264源码压缩包,libx264需要yasm,所以先安装yasm,打开后是一个包含若干文件的文件夹,把它解压到电脑的D盘,重命名这个文件为FFmpeg,最后把程序添加到环境变量,以方便操作系统找到它,复制FFmpeg文件夹中的bin文件的地址,添加到系统环境变量的Path里,可以win+Rcmd输入命令行FFmpeg-version检查返回信息,判断ffmpeg是否安装成。FFmpeg文件夹中bin文件夹中有三个命令行程序,FFmpeg.exe程序用来操作转换和流式传输多媒体内容,ffplay.exe是一个简洁的播放器,ffprobe.exe是一个媒体参数分析工具。doc文件夹里有大量的离线文档,涉及FFmpeg项目的方方面面。persets文件夹存放一些预设。license.txt是版权许可。Readme.txt是声明文件。输入ffplay视频文件名加后缀命令播放视频,输入ffprobe文件名加后缀查看视频参数,图3.14的头文件参数有:容器格式为MP42,开始时间是0s,持续时间为28.5s,总比特率是3038kb/s。流媒体参数有:h.264高规格编码,avc1封装,颜色空间是yuv420p,分辨率1920x1080方形像素,长宽比16:9比特率2908/s,帧率29.97帧/s等。图3.14视频参数安装ffmpeg需要设定选项,进入ffmpeg源码目录,先使用./configure--help命令查看一下安装帮助,输入如图3.15所示的命令进行配置,根据本次设计需求设置动态库选项,禁用汇编,H.264选项,GPL设定ffmpeg目录等。完成配置后,通过make-j、makeinstall命令进行安装。图3.15设定推流参数在ffmpeg/bin目录下新建video1.sh文件,输入图3.16命令设定推流参数。编译FFmpeg推流命令,设置帧频为30,视频设备为/dev/video0,视频编码为H.264,最大延时100,输出格式为FLV,关键帧间隔为5,定义推流IP为34。图3.16设定推流参数表3.1FFMPEG命令FFmpeg常用命令-i设定输入流-s设定画面宽和高-f设定输出格式-aspect设定画面比例-ss开始时间-vn不处理视频-b设定视频流量(码率)-vcodec设定视频编码器,默认使用与拉流相同的编解码器-r设定帧速率,默认253.5客户端的搭建3.5.1视频查看模块的实现本次设计采用B/S架构实现对客户端的搭建,局域网建立B/S网络应用,将系统功能实现的核心汇集到了服务器部分统一了客户端,简化了系统的操作、运维和开发,这个结构可以实现任意的人员从任意场所以不同的接入方式进行访问和操作,它优点是开发成本低、操作简单、高效便捷。客户端播放器模块采用JWplayer播放器,当客户端访问网页播放器对监控进行实时查看时,会出现播放延迟、卡顿等情况,出现这种情况的原因是播放网页播放器会影响服务器的运行,而使用JWplayer播放器则不会有以上问题。所以本次视频查看模块使用JWplayer播放器。3.5.2网页搭建本次设计的网页由主题模块、背景模块和功能模块构成。主要实现客户端查看视频功能。主题模块顾名思义就是整个网页的主题,首先在/www的目录下新建index..html文件,选择用vi编译器编译进行网页编译,在里面添加主题,设置字体参数。然后添加网页背景图片,设置图片参数,然后将从官网下载的JWplayer播放器安装包复制到/www目录下解压,新建一个JWplayer的文件,然后插入JWplayer播放器,设置推拉流地址。打开浏览器输入IP地址,就可以实现实时的视频监控了。图3.17插入播放器图3.18设置推拉流地址
第4章视频监控系统测试及策略分析本次监控系统的设计基本完成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年安阳幼儿师范高专高职单招职业技能考试题库及参考答案详解【能力提升】
- 2026二下数学第一单元获奖课件
- 2026北师大二下全册大单元试讲课件
- 2026北师大二下动画核心素养课件
- 2026氢燃料电池膜材料技术研究行业市场现状供需分析报告
- 2025年直播预热文案金句
- 护用药理学专项试题及答案
- 2026中国新能源产业政策工具比较与实施效果评估报告
- 2026中国食品机械和加工设备行业市场现状自动化程度分析及生产线优化评估
- 2026中国智能家居行业市场现状供需调研及投资价值评估规划报告
- 吊柜制作安装专项施工方案
- 医院领导ab角工作制度
- 妇产科妊娠合并糖尿病护理规范培训
- 心脏术后疼痛管理策略
- DG-T 285-2023 鲜食玉米收获机
- (2025年)城市管理网格员职业技能竞赛考试题库(含答案)
- 出入相补原理课件
- 《麻醉学》教学资料
- 青少年心理健康数字化服务体系建设研究
- 高新企业认定汇报材料
- 青少年民法典宣传课件
评论
0/150
提交评论