摘 要:介绍了一种在网络录像系统(NVR)中实现高清流媒体采集的方案.基于RTSP/RTP协议,实现了对视频数据的封装与传输,结合多线程编程技术,可以满足同时采集多路视频数据的需求,节省了系统资源,提高了用户体验.
关键字:NVR;RTSP/RTP;多线程编程;视频数据
中图分类号:TP399 文献标识码:A DOI:10.3969/j.issn.1003-6970.2013.08.028
本文著录格式:[1]穆永新.网络视频录像系统中视频采集的研究与实现[J].软件,2013,34(8): 92-94
0 引言
随着互联网的发展,数字视频监控系统[1]进入了快速发展的阶段.数字视频录像机(DVR Digital Video Recorder)逐步发展成为具有网络功能的网络视频录像机(NVR Network Video Recorder).NVR是一个包含基本存储硬件和集中管理软件的网络录像子系统.其最大限度的继承了DVR的优势,实现了接入管理、录像存储及解码显示等一体化功能[2].因此,针对这一发展趋势,网络录像系统中视频采集的实现有助于解决视频监控系统中的流媒体数据的传输,提高传输的质量,实现监控的网络化和高清化.
1.NVR的特点与流媒体协议
1.1网络视频刻录机的特点
网络视频刻录机的英文是Network Video Record,简称NVR[3].由于它一开始就是为了在网络环境下使用而设计的,从而克服了DVR无法通过网络获取视频信息的先天缺陷,其主要特点:
① 网络化,全部使用有线和无线网络,提升监控点的灵活性;并且安装和维护得到了简化.
② 高清,使用高清的网络摄像机,普通的DVR满足不了. ③ 扩容性:由于是基于网络的,监控点方便增加和减少.
④ 先进性:采用H.264对于占用的带宽和空间都有一定的提升[4].
视频监控系统的工作原理如下[5]:
①前端摄像机将采集到的流媒体数据通过网线送入监控平台.
②用户可以通过监控平台对前端摄像机发送云台命令,控制摄像机的转动,以控制摄像机的监控范围.
③监控平台可以进行视频数据的处理、发送、存储以及对云台、报警设备等控制.
④监控平台可以对前端摄像机进行远程参数设置、对监控画面进行浏览、回放等.
1.2支持流媒体的协议
1.2.1实时流协议RTSP
RTSP(Real Time Streaming Protocol),实时流传输协议,是一个应用层协议,它在体系结构上位于TCP之上[6]. RTSP是用来控制多媒体串流的协议,并允许同时多个串流需求控制,传输时所用的网络通讯协定并不在其定义的范围内,怎么写作器端可以自行选择使用TCP或UDP来传送串流内容[7].
在基本交互过程中,使用以下几种通信方法.
Option:客户端首先发送请求消息 ,告知怎么写作器所支持交互方法;
Describe:客户端发送请求,怎么写作器对其进行权限验证,并响应关于请求媒体的信息,也就是客户端在怎么写作器上注册;
Setup:客户端发送建立请求 ,其中包含协议集及端口号;
Play:客户端选择播放实时视频时段;
Teardown:客户端发出关闭请求,怎么写作器端响应,播放链接释放.
1.2.2实时传送与控制协议RTP/RTCP
实时传输协议RTP (Realtime Transport Protocol):是针对Inter上多媒体数据流的一个传输协议,RTP被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步.RTP的典型应用建立在UDP上,但也可以在TCP之上工作.但是RTP本身并不负责同步,rtp只是传输层协议,为了简化运输层处理,提高该层的效率.将部分运输层协议功能(比如流量控制)上移到应用层完成[8].
有关论文范文主题研究: | 嵌入式相关论文范文 | 大学生适用: | 硕士毕业论文、函授论文 |
---|---|---|---|
相关参考文献下载数量: | 18 | 写作解决问题: | 写作技巧 |
毕业论文开题报告: | 论文模板、论文前言 | 职称论文适用: | 核心期刊、高级职称 |
所属大学生专业类别: | 写作技巧 | 论文题目推荐度: | 最新题目 |
实时传输控制协议RTCP(Realtime Transport Control Protocol):负责管理传输质量在当前应用进程之间交换控制信息.在RTP会话期间,各参与者周期性地传送RTCP包,包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料,因此,怎么写作器可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型.RTP和RTCP配合使用,能以有效的反馈和最小的开销使传输效率最佳化,故特别适合传送网上的实时数据[9].
1.2.3会话描述协议SDP
会话描述协议(SDP)为多媒体会话初始化提供了会话描述.
SDP 完全是一种会话描述格式,它不属于传输协议 ,SDP 的设计宗旨是通用性,它可以应用于大范围的网络环境和应用程序,但 SDP 不支持会话内容或媒体编码的协商.
SDP 连接好会话后,传送足够的信息给会话参与者.SDP 信息发送利用了会话通知协议(SAP).这些信息是 UDP 数据包,其中包含 SAP 协议头和文本有效载荷(text payload).这里文本有效载荷指的是 SDP 会话描述.
2.Live555开源项目的分析
Live555 是一个C++编写的解决流媒体传输的开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持.Live555实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG、H.264、DV、JPEG视频和多种音频编码.同时由于良好的设计,Live555非常容易扩展对其他格式的支持.
UsageEnvironment模块是对系统环境的抽象,包括抽象类UsageEnvironment0和TaskScheduler.UsageEnvironment0主要用于消息的输入输出和用户交互功能;TaskScheduler实现事件的异步处理、事件处理函数的注册等,它通过维护一个异步读取源实现对诸如通信消息到达等事件的处理,通过使用DelayQueue实现对其他注册函数的延时调度.该模块还包含一个HashTable类,在整个项目中都可以用到它.程序设计者通过自定义该抽象类UsageEnvironment和TaskScheduler类的子类,就可以在特定环境(如GUI环境)中运行,不需要进行过多的修改.BasicUsageEnvironment模块是UsageEnvironment的一个控制台应用的实现.它针对控制台的输入输出和信号响应进行具体实现.GroupSock模块用于实现数据包的发送和接收.GroupSock主要被设计用以支持多播,但它也完全支持单播通信.LiveMedia模块是Live555最重要的模块.该模块声明了一个抽象类Medium,其他所有类都派生自该类,下面简要介绍这些类: ① RTSPClient:该类实现RTSP请求的发送和响应的解析,同时根据解析的结果创建对应的RTP会话.
② MediaSession:用于表示一个RTP会话,一个MediaSession可能包含多个子会话(MediaSubSession),子会话可以是音频子会话、视频子会话等.
③ RTCPInstance:该类实现RTCP协议的通信.
④ Source和Sink:Source抽象了数据源,比如通过RTP读取数据.Sink是数据消费者的抽象,比如把接收到数据存储到文件,该文件就是一个Sink.数据的流动可能经过多个Source和Sink.MediaSink是各种类型的Sink的基类,MediaSource是各种类型Source的基类,各种类型的流媒体格式和编码的支持即是通过对这两个类的派生实现的.Source和Sink通过RTP子会话(MediaSubSession)联系在一起.
3.NVR中高效的实现方案
通过分析,可以明确流媒体的传输是在传输层协议(TCP,UDP)上解释RTP,RTCP,RTSP协议的,所有的客户连接请求都是以TCP的端口获得的,流媒体数据也都是打成RTP包,通过UDP端口发出去的,因此,对于TCP,UDP端口事件的调度以及如何把大量的流媒体数据从网络传递到磁盘空间上成为制约视频数据采集性能的主要因素.NVR面对一个IPC进行采集时,完成的过程如下:
① NVR发出RTSP连接请求,与IPC协商数据传输的信息[10].
② 接收数据流包,解析RTP包,获得RTCP包.
③ 数据包发送完毕,关闭连接.
上述过程如果采用Live555中传统的方法去实现的话,Live555会将上诉过程中用到的socket handler、event handler和delay task添加到TaskScheduler类中,然后是用一个单一的线程不断的处理TaskScheduler中的事件,
BasicTaskScheduler从TaskScheduler派生,所以是一个任务调度对象,循环中每次走一步SingleStep(),这其中又分成四小步:
① 为所有需要操作的socket执行select.
② 找出第一个应执行的socket任务(handler)并执行.
③ 找到第一个应响应的事件,并执行.
④ 找到第一个应执行的延迟任务并执行.
可见,每一步中只执行三个任务队列中的一项.
如果连接不同路的IPC,仍然是将其他路的事件添加到这个TaskScheduler中,随着添加路数的增加,势必会造成流媒体采集的性能低下,出图就会很缓慢,如果其中有一路数据出现了问题造成阻塞的话,就会造成所有其他路的数据一并阻塞.
为了改善上述实现的不足,需重新设计NVR中采集端的程序结构.根据采集端在流媒体传输中所要完成的功能,可以看出,采集端往往需要连接很多不同路数的IPC,并且每一路的传输有很少部分用于RTSP的连接,大部分时间都用于接收RTP数据流包,可以针对每一路数据流的传输开启一个单独的线程,每一个线程都有TaskScheduler的调度,这种采用多线程的方式去同时连接不同的IPC,不仅能够互不干扰,而且能够提高资源利用率,使得多路高清视频能够顺畅播放和存储.这样就开启了多个线程,其中的每一个线程都会等待响应IPC的应答.其程序流程图如下:
综上所述,选择多线程的实现方式,节省了嵌入式系统的宝贵资源,这是利用了线程开销小的优点.虽然是多线程的系统,但是从某一个时间上来看,系统可能只有一个线程正在运行,而其它线程都处于空闲状态.其次,系统的结构清晰,线索清楚,便于功能扩展和代码维护.
4结束语
本文根据网络视频刻录系统中流媒体传输的需要,通过对Live555源码的分析与研究,利用流媒体协议对视频数据实现了封装和传输,并且结合多线程的编程技术,最终实现了多路流媒体的实时传输,不仅节省了系统软硬件资源,而且还提高了用户的体验.