随着数字中国的建设,特别是设备的国产化和设备研发制造成本快速下降,设备快速普及,并被广泛应用于各类园区,如景区、产业园区、社区等。出于安全和成本等原因,这些监控设备分布在各自独立的智能化专网,处于封闭运行的状态。调阅实时监控的方式主要在监控指挥中心,通过现场平台及大屏完成。近年手机移动应用快速普及,催生了远程实时查看视频监控的需求,比如景区大门口实时人员状态、应急处突管理的现场视频、产线生产的实时状态、重点实验室的运行情况等多种多样的需求。目前已经有很多家庭用级别的网络监控摄像设备及系统,可以满足简单场景下的基础需求。但是,受限于成本及摄像机的性能,无法在园区内大量普及。
本文引用地址:在园区部署视频监控设备上云的系统,即可以实现的需求,通过园区本地部署的NVR 设备获取前端的实时码流,经转码、、上云发布等流程,完成视频流上云的过程,在经过应用端的下载、解码、播放等,完成园区视频监控的远程实时查看。
1 视频监控上云技术
视频监控上云,如要确保视频内容安全,需要本地视频流经过转码,然后通过算法对视频内容进行,然后再上云传输,前端应用下载解密后,即可进行播放,完成的目的。
1.1 视频转码技术
FF MPEG是个开源跨平台多媒体数据解决方案[1-2],具备强大的编码、解码、转码能力, 支持HTTP、RTSP、RTMP 等多种协议,并且支持不同协议视频格式的转码,比如RTSP 转成RTMP 或HLS 等格式。
开源RTMP 架构SRS 结合开源编解码库FF MPEG可以实现视频直播播放[3],本系统的远程视频监控功能类似直播平台,可以实现一次转码分发,多终端同时观看的效果。
1.2 视频加解密算法
本系统为了确保视频监控的安全,在编解码节点增加了加解密算法。算法在数据块的第28~40 字节增加干扰数据串,其余数据通过简单4 个字节1 组,同一4 个字节的密钥进行异或操作,实现视频数据的加解密。下面就分别就加解密算法进行描述。
1)加密算法
public byte[] ByteEncrypt(byte[] videoBytes)
{
byte[ ] encryptedVideoBytes = new byte[(videoBytes.Length)];
b y t e [ ] _ e n c r y p t e d Vi d e o B y t e s = newbyte[(videoBytes.Length) + 13];// 预留12 个字节
// 增加的干扰数据,示例
byte[] DisValue =new byte[12] { 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,0xde, 0xff, 0xaa,0xce, 0xbb, 0xdd };
// 初始化标兵指向数据第一个元素
int i = 0;
//加密流程
while (i + 4 < videoBytes.Length)
{
// 加密密钥设定为 0X4E 0X42 0X49 0X4C(示例),原始数据同密钥进行异或操作
encryptedVideoBytes[i + 1] = (byte)(videoBytes[i + 2] ^ 0x4E);
encryptedVideoBytes[i + 2] = (byte)(videoBytes[i + 3] ^ 0x42);
encryptedVideoBytes[i + 3] = (byte)(videoBytes[i + 0] ^ 0x49);
encryptedVideoBytes[i + 0] = (byte)(videoBytes[i + 1] ^ 0x4C);
i += 4; // 处理下后续四个字节
}
/ / 将12 个字节的干扰数据并入视频流数据块的
第28 到第40 个字节
for (int j = 0; j < 28; j++) _encryptedVideoBytes[j]= (byte)(encryptedVideoBytes[j]);
f o r ( i n t j = 0 ; j < 1 2 ; j + + ) _encryptedVideoBytes[j+28] = (byte)(DisValue[j]);
for (int j = 28; j < (videoAsBytes.Length);
j + + ) _encryptedVideoBytes[ j + 12] = (byte)(encryptedVideoBytes[j]);return _encryptedVideoBytes;// 返回最终处理完的数据
}
2)解密算法
直接跳过第28 到第40 个字节,其余的数据按照四个字节一组同密钥进行异或操作复原数据。
public byte[] Byte_Dcrypt(byte[] _videoBytes) {
byte[] DcryptedVideoBytes = new byte[(_
videoBytes.Length)];
int i = 0, k = 0 ;
// 解密流程
while (i + 4 < _videoBytes.Length)
{
// 跳过第28 到第40 个字节的数据,其余数据按4个字节一组同密钥进行异或操作
if (i < 28 || i >= 40)
{
DcryptedVideoBytes[k] = (byte)(_
videoBytes[i + 3] ^ 0x49);
DcryptedVideoBytes[k + 1] = (byte)(_
videoBytes[i] ^ 0x4C);
DcryptedVideoBytes[k + 2] = (byte)(_
videoBytes[i + 1] ^ 0x4E);
DcryptedVideoBytes[k + 3] = (byte)(_
videoBytes[i + 2] ^ 0x42);
k += 4;
}
i += 4;// 处理后续4 个字节
}
return DcryptedVideoBytes;// 返回解密后的数据
}
2 监控上云整体方案
整体方案分为视频上传及视频下载两个部分,详见系统图1。视频上传部分包括前端NVR 实时码流获取,视频格式转码,视频流数据加密及加扰,传输上云几个模块;视频下载及播放部分包括视频下载、视频解码、视频播放几个功能模块,后续将详细介绍。视频的加解密模块给视频的网络传输安全增加了一道安全屏障,确保了信息的安全。
图1 基于加密的智慧园区视频监控远程监控系统架构图
3 系统关键模块
系统各关键模块密切配合,围绕视频流数据的安全可靠处理加工及传输等,完成园区视频监控上云及远程监控的目标。下面将分布介绍各个模块内容。
3.1 监控视频流获取
园区的视频监控设备都汇集到监控指挥中心,可以通过NVR获取其实时的视频监控流。监控摄像机都支持输出多个码流,主码流以及子码流,码流的编码格式式包括H.264、H.265 等,可通过RTSP 协议获取其视频流。系统首先获取所有视频监控设备的列表明细,然后在配置页面,选取众多摄像机中需要上云的设备,配置其码流地址、编码格式、账号及密码等信息。
鉴于视频流同时抓取需要消耗大量的计算资源及网络带宽,该系统视频流抓取部分,平时在“待机”状态,有前端系统请求的时候,才会启动视频流抓取的模块,根据预先设定的码流配置信息,将前端实时码流通过NVR传输到视频转码平台。系统平台支撑多路视频流数据同时抓取。
3.2 视频转码
本系统要支持多种播放终端上进行远程查看,包括PC网页、微信小程序以及移动APP等,需选取一个更加通用的协议作为传输标准,所以选择了更为通用的Webrtc格式流。原始的视频流各位RTSP标准,要转换成Webrtc格式,需要经过两次转换来完成。在视频转码的设计部分,由两个节点完成,首先通过FFMEPG组件在自研任务调度组件的支配下,以规则将视频流获取模块传输来各路的RTSP格式的视频流,转换成对应RTMP格式的流,然后将RTMP格式的流通过SRS 组件,根据调度任务规则,转换成对应的Webrtc格式的流。转换流程如图2所示。
图2 视频转码流程图
3.3 视频加密
为了保护隐私安全,系统采用本文1.2 节描述的加密算法,对准备上云传输的视频流数据包进行加密。采用密钥为0x424E4C49,以视频转码节段生成的各路webrtc数据包为单位进行加密,各数据报内以4 个字节1 组同加密密钥按加密算法进行加密。各单位待传输数据包加密完成后,在每个数据包的第28 至第40 字节插入干扰串{{ 0x45, 0X4C, 0x45, 0X4B, 0X54, 0X52,0X4F, 0X4E, 0X49,0X4B, 0X45, 0X52 },从而完成各个数据包的加密工作,准备进入视频上云分发阶段。
3.4 视频上云
视频上云模块主要根据播放端的请求,将经过加密的数据包对应传输给指定的链接,同时用多个线程来维护链接的数据,确保经过加密的数据包准确有序地上传。
3.5 视频监控云服务平台
服务平台负责响应前端播放器的码流播放请求,根据请求码流来分配播放地址,这里就分两种情况:一种是已经有别的播放终端请求过统一码流的播放,则直接将现有播放连接分发给新的请求终端;另外一种是全新的播放请求,则需要向前端请求对应的码流,建立视频流获取、转码、加密的数据通路,并将对应的数据获取地址下方给播放器端。
视频云平台服务器还负责维护当前所有的播放链接,针对每条播放链接进行权重赋值,增加一个播放请求加1,减少一个播放请求则减1。如果在2 min 内无持续的播放请求,则释放该条转码上传连接,待下次有需求后重新建立链接。
由于视频建立链接有时间及资源的消耗,为了前端用户更好的体验,系统会根据前端用户使用的情况做出是否提前启动转码链路的预测,提前建立视频流的转码上传链路,待用户真的产生请求时,即可以完成秒速响应。
视频云端服务平台的主要作用就是完成播放段与转码端的匹配,并建立数据交换链路,响应终端用户的需求,同时达到资源的优化配置,及时释放无用的资源。
3.6 视频下载
视频下载服务模块,根据前端播放器的请求,从视频监控云服务器获取下载链接地址,并建立下载进程,将对应的数据下载到指定缓冲区。
3.7 视频解码播放
视频数据已经经过加密,如果直接丢给播放器,则无法进行播放,需要对称执行解密操作。播放器从对应的缓冲区获取经过加密的视频流数据,交给解密模块,解密模块根据本文1.2 章节描述的解密算法,首先严重干扰字段释放正确一致,然后对其余的数据按4 个字节一组,采用解密密钥0x424E4C49 进行解密。解密完成的数据直接送给播放器进行播放。从而完成整个解密播放的流程。
4 系统运行效果
系统上线部署后,转码、加解密、播放各模块无缝配合,运行流畅。每路视频仅需要128 kbit/s 的网络带宽,20M的带宽即可支持200 路园区本地监控视频同时远程调取的需求。图3 为小程序端远程调阅的运行效果,视频从请求到播放时间1.5 s,运行流畅,画面清晰。
图3 小程序园区监控运行效果
5 结束语
基于加密算法的园区视频监控上云系统,给智慧园区本地视频监控远程实时调阅提供了技术手段,在保障远程视频监控及时高效的同时,还给数据安全增加了一套屏障。具备良好的商业价值和广泛的推广意义,有了这套系统,再配合其他可量化的指标预警系统,即可让管理方有效掌握生成经营的状况,第一时间处理各种应急事件,有效促进园区数值转型升级。
参考文献:
[1] 吴张顺,张珣.基于FFMPEG的视频编码存储研究与实现[J].杭州电子科技大学学报,2006(3) :30-34.
[2] 胡成任,平安,李文莉.基于Android系统的FF MPEG多媒体同步传输算法研究[J].计算机技术与发展, 2011,21(10):85-91.
[3] 胡国强,周兆永,信朝霞.基于SRS的开源直播系统的设计与实现[J].现代电子技术,2016,39(16):36-43.
(本文来源于《电子产品世界》杂志2023年2月期)