APP下载

某车载装备的多路视频远程监控系统软件设计

2022-05-24刘中柱杨福合

机械工程与自动化 2022年2期
关键词:视频流窗体解码

刘中柱,杨福合

(中北大学 军民融合协同创新研究院,山西 太原 030051)

0 引言

某车载装备上安装有四路视频设备,分别是一个可见光相机、一个红外相机和两个监控摄像头,四路视频的分辨率大小和视频压缩率均不尽相同。在设备调试阶段,需要在远程同时监控这四路视频,且在需要时能同步保存这四路视频,并能在后期同步回放所记录的四路视频。此外,在作战时,上级指挥机关也有通过远程监控视频来及时了解装备运行状态的需要。因此,需要制作一套适用于车载装备的多路视频远程监控系统。

四路视频均采用H264格式进行压缩,视频流基于RTSP协议通过以太网进行推送。视频流既可以使用通过的网关直连网络实现有线以太网传输,也可以通过车载的数传电台通过无线以太网进行传输。系统要求在不额外增加现有硬件的条件下,对四路视频同时进行监控或录制,回放时也能同步播放。因此,该监控系统的重点和难点主要在于多路视频远程监控软件的编写。

目前,关于多路视频监控的研究,多采用研发刻录仪或采用硬盘录像机等增加硬件的方式来实现。如,王昱人选用TMS320DM8168和FPGA架构作为硬件平台,在Linux下采用Qt开发了相应软件,研发了一款车载记录仪,可同时记录3路视频并回放所记录的视频[1];胡伟基于AM5728多核处理器开发了一套嵌入式多路视频录制系统软件[2];郑超等利用硬盘录像机等硬件设备,将视频实时存储并进行统一调度,完成对现场作业多路视频同步展示功能的升级[3]。文献中在实现多路视频监控时,除了多数要增加硬件设备外,大多数都不能同步保存多路视频,且在回放记录的视频时,通常只能回放其中一路视频。所以有必要独立开发一套多路视频远程监控软件。

1 开发工具的选取

基于软件今后潜在的跨平台能力需求,本软件在设计时尽量考虑使用跨平台性好的开发工具或程序库,因此,使用了Qt和FFmpeg来进行开发。

1.1 Qt简介

1.2 FFmpeg简介

FFmpeg是一套开源的计算机程序,可以用来对音频/视频进行编码、解码、转换等操作。FFmpeg也具有较高的可移植性,它虽然是在Linux平台下开发的,但它同样也可以在其他操作系统环境中编译运行,包括Windows、Mac OS X等。由于FFmpeg的功能强大和编解码速度较高,目前得到了普遍的应用[5],在有些商业软件中也得到了采用。

2 多路视频远程监控系统软件总体结构

多路视频远程监控系统软件有两种工作模式,一种是远程网络视频监控模式,一种是历史视频记录文件回放模式。因此,需要通过一个变量来表征当前的视频来源是通过以太网传输过来的四路视频流,还是四个记录文件中的视频流。

为了方便对多路视频的处理,将视频的解码及记录等操作写成了一个视频处理类,对每路视频流建立相应的视频处理类对象即可。视频处理类软件确定视频源后,把视频流输入给视频处理类的解码线程队列进行解码操作,生成对应视频帧的图像。如果在此过程中检测到了开始保存记录标志,则同时把视频帧保存到本地文件中。解码得到的视频图像在对应的视频窗体中予以显示。

多路视频远程监控系统软件的总体结构框图如图1所示。

图1 多路视频远程监控系统软件总体结构框图

3 视频处理程序

3.1 视频的解码

视频解码的流程如图2所示。

图2 视频解码流程

视频解码程序采用了两个线程,一个线程专门负责从RTSP视频流或本地视频记录文件中读取视频流,获得视频信息并打开对应的解码器,然后循环提取出每一个视频压缩包,并加入到视频包队列的队尾;另一个线程专门负责解码,它从视频包队列中提取队首的视频压缩包,把它发送到解码器中进行解码,由于根据编码压缩设置的不同,有可能会有多个图像帧,因此需要循环读取解码后得到的图像帧数据,此图像帧是YUV格式,还不能直接显示,需转换成RGB格式后生成QImage对象,然后拷贝出一个复本,用emit()函数作为一个信号(SIGNAL)发送出去,视频窗体把此信号与用于显示的槽函数(SLOT)连接起来,接收到此图像后即通过此槽函数在窗体中进行显示,即完成了一个视频图像帧的显示。如此循环,则能显示整个视频。

3.2 视频的保存

3.2.1 视频记录文件的自动命名

在点击工具栏按钮“开始保存视频记录”后,软件便开始记录各通道的视频,并自动创建一个以开始记录时间命名的文件夹,各个视频通道对应的视频记录文件都保存在这个文件夹中。视频记录的文件名也由程序自动给出,命名规则为“ch+视频通道号+下划线+开始记录时间.mp4”。其中,时间用“年月日_时分秒”格式表示,时分秒的中间用中文全角的分号隔开。例如,2021年8月16日9点10分30秒开始录制通道2的视频,其文件名命名为ch2_20210816_09:10:30.mp4,该文件及其他通道同步录制的文件都保存在20210816_09:10:30文件夹下。

3.2.2 创建文件,写入MP4视频文件头

先调用avformat_alloc_output_context2()函数初始化一个用于输出的AVFormatContext结构体;再调用avio_open()函数创建按上面命名规则命名的文件并以读写模式打开它,以供写入;之后再调用avformat_write_header()写入MP4格式的文件头。

3.2.3 循环读取视频帧数据并写入文件

在解码视频的线程中,循环读取视频输入流,并根据输出封装格式重新计算每包的pts和dts值,然后使用av_interleaved_write_frame()函数把获取到的视频帧数据依次写入到输出流中。

3.2.4 写入MP4视频文件尾,结束保存操作

收到停止记录视频命令时,调用av_write_trailer()函数写入MP4文件尾,调用avcodec_close()函数关闭编码器,调用avio_close()函数关闭文件,再执行必要的资源清理工作,即完成了视频的保存操作。

4 软件界面及功能

软件主界面如图3所示。主界面左侧为视频的历史记录区,视频列表为每次记录视频的时间,双击列表中的记录,可以同时把列表对应的四路视频记录文件打开,并同步回放在四个视频窗体中。主界面的右侧分成上下两部分,上方是工具栏,可快速切换视频来源,以选择是远程网络视频监控还是回放本地视频记录文件模式;通过工具栏,还可进行视频的保存与播放控制等操作;下方是视频窗体区,分别显示四路视频的图像。在四个视频窗体大小均等的情况下,双击任意一个视频窗体都可以全屏显示该路视频。

图3 软件主界面

为了突出显示某路视频,也可以把当前的四路视频均等大小显示,改为一路主视频、三路副视频的“一主三副”显示风格,如图4所示。此时,双击右侧的任意一个副视频都可以将此路视频与主视频区的视频进行互换位置显示,双击主视频区的视频,则能将主视频区中的该路视频全屏显示。

图4 “一主三副”显示效果

5 结语

本文基于Qt软件开发框架,设计开发了一套远程多路视频监控软件,在不额外增加硬件设备的情况下,实现了对车载装备上的两个相机和两个摄像头产生的四路视频的远程监控和同步记录,并能方便地同步回放已记录的四路视频数据。本文设计开发的软件经过测试,达到了设计要求,且具有功能完备、操作简单、运行稳定等优点。而且,由于采用了跨平台的开发工具,软件具有良好的可移植性,可方便地移植到其他平台使用。

猜你喜欢

视频流窗体解码
边缘实时视频流分析系统配置动态调整算法研究
《解码万吨站》
基于视频流传输中的拥塞控制研究
解码eUCP2.0
试谈Access 2007数据库在林业档案管理中的应用
基于Qt的多窗体快速并行图形绘制方法研究
NAD C368解码/放大器一体机
Quad(国都)Vena解码/放大器一体机
铁路货场智能大门集装箱全景图像采集方法研究
美国视频流市场首现饱和征兆