多路视频数据实时采集系统设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多路视频数据实时采集系统设计与实现
常永亮王霖萱常馨蓉
( 中国飞行试验研究院陕西西安 710089)
( 贵州省贵阳市花溪区贵州大学贵州省贵阳市 550025)
( 陕西省榆林市榆阳区榆林学院陕西省榆林市 719000)
摘要面对越来越多的实时视频采集、播放的应用,如何能更加方便的操控视频采集,保证流畅的播放效果,成为近几年实时媒体流的一个重要研究方向。本文介绍了视频数据的采集、记
录、编解码、多路视频数据间的切换,基于多网络协议组合下的多媒体流传输,动态切换四路视
频数据实时传输与播放,从而使远端操控、优质播放有了很大的提高。
关键词视频编解码、媒体流、RTP/RTCP协议、组播协议、TCP协议
0.引言
随着信息技术的不断发展,人们将计算机技术引入视频采集、视频处理领域,用计算机处理视频信息和网络传输数字视频数据在很多领域已有广泛的应用,飞机试飞中现如今也大量的应用。
针对目前分散在多处试飞现场视频传入监控大厅后监测设备多而分散的问题,提出了将多处试飞现场视频引入监控大厅后用一台高性能服务器管控,客户端通过网络请求服务器端检测关心的现场场景,达到集中管理优化监控的目的。
视频图像采集的方法较多,基本可分为2大类:数字信号采集和模拟信号采集。前者采用图像采集芯片组完成图像的采集、帧存储器地址生成以及图像数据的刷新;除了要对采集模式进行设定外,主处理器不参与采集过程,我们只要在相应的帧存储器地址取出采集到的视频数据即可得到相应的视频数据,这种方法,无论在功能、性能、可靠性、速度等各方面都得到了显著的提高,但成本高。后者采用通用视频采集卡实现图像的采集,并用软件进行实时编码,其特点是数据采集CPU占用率较高,对处理器的速度要求高,成本低、易于实现,能够满足某些图像采集系统的需要。此系统使用第二类视频采集方法。
如何将各处试飞现场视频信号通过VGA持续接收?传统方式是将模拟的VGA信号引到指定显示器显示,这样即浪费资源且多占空间。多路视频实时采集使用的是VisionRGB- PRO板卡(英国Datapath公司),此卡可同时实时采集两路视频数据,基本达到了本系统的要求,再用一台VGA矩阵切换器将前端数据源的四路视频数据进行人为切换采集,用H.264格式编解码,保存为H.264格式,通过RTP/RTCP 与组播协议将编码后视频流传输给请求客户端,而且可在客户端通过TCP协议选择关心的VGA采集通道。
2
2
在一台显示器上同时最多显示两路 VGA 数据,不用再增加设备,并通过一台服务器软件实时处理后,按客户端请求实时传送到相应客户端监控某现场状态。达到用任意一台客户端按需监控的目的。
1. 系统整体设计
VGA 矩阵切换器视频服务器
客户端
图1 系统结构框图 系统主要实现对前端四路视频数据的人为切换式实时采集,在服务器端最多可同时采集和储存两路视频数据(用一个视频采集卡),也可以一次只采集一路视频数据,再经网络实时传输到客户端播放,服务器端同时实时播放所采集的视频数据。
系统主要由VGA 矩阵切换器、服务器端软件、客户端软件三大部分组成,VGA 矩阵切换器对四路视频输入信号进行切换输出,服务器端主要负责视频数据采集、VGA 矩阵信号切换、视频数据编码、视频信号网络传输,客户端主要负责视数据的解码与播放、简单的VGA 矩阵输入输出信号切换。
在进行视频切换方面可在服务器端或客户端自行切换,在服务器端可通过串行口操作VGA 矩阵切换进行相应的视频输入输出口的切换,在客户端可通过网络(TCP )->服务器程序相应模块->串行口->VGA 矩阵切换进行相应的视频输入输出口的切换。如图1所示。
2. 系统软件的设计
2.1 服务器端软件设计
3
图2 服务器端程序流程图
图2所示为服务器端实时采集、记录、发送视频数据的程序流程图。运行服务器端程序先加载配置信息,加载成功后初始化RGB板卡、串口、网络,初始化成功后进入实时检测VGA通道信号状态,无信号可手动选择其他通道检测,如果有视频信号将进入实时显示与编码保存状态。如有客户端通过网络请求视频数据,则将编码后的视频数据用RTP协议打包后通过组播协议发送给请求的客户端,同时周期性发送RTCP控制包,,通过对发送、丢失的数据包的数量等统计,动态地改变传输速率与同步视频播放。视频数据量较大 ,这就要求视频数据处理系统具有实时处理的特点。在服务器端的实现是整个系统的关键,在此也承担了整个软件系统的大部分工作,主要有以下几大块:一是采集;二是记
4
录;三是向客户端发送;四是串口的通信;五图像的形成;六是服务器端的实时播放;七是对图像亮度、颜色、位置等的调整;采集通道、采样率、采集时间的选择。
软件要实现对视频数据的实时采集、控制视频输入输出通道、把视频数据实时编码保存并发送到多个请求客户端。在软件实现方面应用了相应的SDK(Software development kit)和API(应用编程接口)。
视频采集先通过Initialise函数初始化VisionRGB板卡与播放界面,在SetupCapture函数中初始化视频的显示的模式,在采集方面最主要是实时性,在此以事件驱动的方法从端口获取数据,回调函数InitiateFrameCapture通过板卡通道命令事件实时采集原始视频数据,采集到视频数据流在相应软件界面播放的同时再利用ffmpeg开源库将InitiateFrameCapture获取视频原始数据编码为H264格式,编码后的数据在服务器本地保存的同时通过网络传输给请求客户端。如图3所示。
图3 服务器端数据处理流程图
在服务器端各方面协调工作是关键,程序启动首先默认上次设定的视频采集卡通道,如有视频数
4
5
据就播放、记录,如果没有视频数据就等待,如果要调整视频采集卡通道可用串口给VGA矩阵切换器发送相应的命令让VGA矩阵切换器进行相应的输入输出通道切换。也可通过TCP协议经客户端经网络到服务器串口到VGA矩阵切换器进行VGA矩阵切换器相应的输入输出通道切换。每次切换后将自动保存原视频文件,如切换后有视频数据将自动重新生成一个新的视频文件。
在服务器界面播放的视频是没经编码处理的,但网络传输和保存的视频数据是经H.264编码处理后的,这样有力的减轻了网络间传输和服务器的存储I/O负担。
为了在局域网上有效的、高质量的实时传输媒体流,需要多种技术的支持,包括网络传输层协议的选择、编(解)码技术,网络传输层质量控制技术等等。
实时传输协议(RTP)为数据提供了具有实时特征的端对端传送服务,如在组播或单播网络服务下的交互式视频音频数据。应用程序通常在UDP 上运行RTP 以便使用其多路结点和校验服务;这两种协议都提供了传输层协议的功能。但是RTP 可以与其它适合的底层网络或传输协议一起使用。如果底层网络提供组播方式,那么RTP 可以使用该组播表传输数据到多个目的地。在此,通过JRTPLIB 库提供的RTPUDPv4TransmissionParams、RTPSessionParams 等类实现了在组播协议上利用RTP/RTCP 协议对视频流进行封装、视频流的同步和控制流封装。服务器端将视频数据封装成RTP协议格式通过组播传输到请求客户端,客户端再将RTP协议包中视频数据分离出,给H.264解码库进行解码播放。服务器端网络接口函数核心代码如下:
服务器端网络发送核心代码如下:
......
RTPUDPv4TransmissionParams netInterface;
RTPSessionParams netSet;
netSet.SetOwnTimestampUnit(1.0/8000);
netSet.SetAcceptOwnPackets(true);
netInterface.SetPortbase(组播端口);
netInterface.SetLocalIPList(本地IP);
netInterface.SetMulticastInterfaceIP(组播IP);
netInterface.SetMulticastTTL(255);
sess.Create(netSet,&netInterface);
RTPIPv4Address addr(destip,destport);
sess.AddDestination(addr);
if(!sess.SupportsMulticasting())