APP下载

基于实时推流工具的风机叶片测试过程视频监控

2018-02-18乌建中

装备制造技术 2018年11期
关键词:视频流预览服务器

乌建中,浦 睿

(同济大学机械与能源工程学院,上海201804)

0 引言

风电叶片是风力发电机组的关键部件,所有新设计的叶片在投入批量生产前,都要进行全尺寸结构试验以确定叶片质量是否符合设计要求。但是,在叶片加载测试现场,长期的监控看管给企业带来了较大的人力物力成本,同时叶片的远程认证也有着诸多不便,叶片加载系统的实时监控可改善的空间很大。传统的远程监控需要客户安装相应软件,虽然专用性强,但不利于升级维护。由于依赖于软件的安装,所以也不能实现随时随地的即时监控。web浏览器作为互联网用户最经常使用的客户端程序,为各种网络媒体数据的传播提供了通用稳定的渠道。将web和现场视频监控结合将会极大地提升监控系统的便利性[1]。为了解决叶片测试现场实时监控的实际工程问题,本文以Linux为平台,提出了一个较为通用的基于web的远程视频监控方案,利用某型网络摄像机的二次开发包,设计了一个与流媒体服务器对接的实时流推送工具。

1 系统方案设计

由于风机叶片测试场地的多样性和测试过程的持久性,存在不同的测试地点需要实时监控以确保测试过程的安全进行,这就给系统提出了不同用户低延时并发监视不同地点的要求。而采用流媒体服务器作为实时视频取流分发的中转站将很好地满足风机叶片测试场景的需求。基于web的实时视频监控系统的服务器端向前直接连接大量浏览器的请求,向后连接各种实时视频流源,提供流媒体协议转换、实时流分发、预览请求监听等功能,其性能直接影响到整个监控系统的运行。

本文采用某型网络摄像机(IPC)为底层视频采集器,配有基于EHome协议的C语言SDK,已封装好相应产品的底层交互,并基于此SDK研究开发了一款多摄像头推流的实时视频流推送工具。整个实时视频监控系统总共分为三部分:浏览器客户端、服务器端和底视频采集端[2],如图1所示。

图1 远程视频监控系统框架

其中服务器端由三部分组成:

(1)web服务器 采用稳定轻量的HTTP服务器Nginx,负责接收浏览器端的用户预览监控的请求,将此请求从前端传至后端,最终传给推流工具。

(2)流媒体服务器 在各流媒体传输协议中,RTMP协议与web兼容性最好,可基于flash实现无插件播放,采用Nginx的nginx-rtmp模块,负责接收推流工具产生的RTMP视频流,并通过浏览器中的flash播放器进行分发播放。

(3)推流工具 命名为HIKPusher,负责浏览器端的预览请求监听,远端叶片测试现场IPC的注册和连接管理,流媒体协议转换等,是服务器端及整个实时视频监控系统的核心。

2 推流工具框架设计

通过推流工具的使用场景分析,确定了对外需要接受web端的预览请求并将其转化为IPC的预览指令,对内需要实现流媒体协议的转化以便发送给流媒体服务器的需求[3]。HIKPusher主要模块划分如图2所示。

意识形态作为一种价值观和思想体系,应该反映和表现社会成员的共同利益,并以特定的道德观念加以强化,以达成共识、消弭纷争,具有政治整合、制度合法性支持以及政治社会化的作用。正如马克斯·韦伯所指出的:“一切经验表明,没有任何一种统治自愿地满足于仅仅以物质的动机或者仅仅以情绪的动机,或者仅仅以价值合乎理性的动机,作为其继续存在的机会。毋宁说,任何统治都企图唤起并维持对它的‘合法性’的信仰。”㊵可见,制度合法性信仰的建构对于国家统治的稳固尤为重要。国民党执政时期,对于稳固自身统治及与中共竞逐,意识形态因素都扮演着重要的角色。

图2 HIKPusher软件框架

整个框架主要分为五大模块:

(1)预览请求服务器模块 负责监听web浏览器端的用户预览请求,将请求传送给注册管理模块进行后续处理。

(2)注册管理模块 是推流工具中直接与IPC对接的模块,负责IPC的注册和连接管理,下发各种指令等。

(3)视频分发模块可看作一个小型流媒体服务器,负责接收原始RTP流并交给协议转换模块进行后续处理。

(4)协议转换模块是整个推流工具的核心模块,负责IPC的RTP流到RTMP流的协议转换,是连接IPC和流媒体服务器的桥梁。

(5)其它模块比如日志记录模块,用于推流工具运行信息查询等。

其中,注册管理模块和视频分发模块属于EHomeSDK中的原生模块,采取了线程池的方式来同时处理多路IPC的实时流,从而实现风机叶片多测试地点的并发推流。RTMP流推送部分采用了在流媒体项目中广泛使用的librtmp开源第三方库。

3 推流工具主要模块实现

3.1 预览请求服务器模块

预览请求服务器模块的主要功能是C/S模型下的请求监听,由于可能在某个时刻会同时有多个用户的预览请求,所以采取了多路I/O复用机制中的epoll模型。程序流程图如图3所示。

图3 预览请求服务器模块软件流程图

在epoll轮询处理中加入了请求心跳包检测机制来判断当前是否有用户在预览。web前端若有用户在预览页面,就会一直有请求心跳包通过调用后端PHP socket客户端程序发送给预览请求服务器,若离开预览页面,请求心跳则消失。检测机制首先获得当前的系统时间,若有请求预览指令到来,则将当前时间记录下来作为最新请求时间。另外通过设置epoll_wait()函数的时间间隔参数来实现每隔一定时间跳出阻塞,检测每个IPC的上一个请求心跳包时间和当前系统时间之差,若大于一定的时间,则判定为web端已经没有用户在预览页面了。考虑到叶片测试现场的特殊网络环境,此心跳机制能够实时响应用户的预览请求,并且适时地释放预览资源,从而节约传输流量。

3.2 协议转换模块

实际传输中,EHomeSDK中取到的IPC实时视频流为私有RTP协议,并且荷载的是PS流。视频编码方面,由于H264编码使用广泛,原生RTMP协议本身对于H265(HEVC)并不支持,考虑到平台环境兼容性,配置IPC为H264编码。故而整个协议转换模块的思路就是从IPC的私有RTP流中剥出PS流,再取出H264裸流,然后使用librtmp库对H264数据进行封装传输[4]。

协议转换的实现基于PS解析器和H264解析器这两个解析程序段。此私有RTP流中RTP头由40个字节组成,将其剥去就得到了荷载的PS流,而PS流由多个PES包组成,其格式如图4所示。

图4 PES包格式

由此可见,只需要找到PES包起始的标志:00 00 01 E0,并根据其中的长度信息就能解析出荷载的H264裸流。PS解析器核心解析函数如下:

int PS_ParserPES(char**pack,int*pack_len,char**payload,int*payload_len);

四个入口参数均为传入传出参数,其中pack为PES包处理前起始位置和处理后下一个包的位置,payload为PES包中荷载的H264裸流的位置。由于函数外PS流的内存空间已分配,为了节省内存空间和降低拷贝时间消耗,函数内部没有分配内存空间,只是做指针值的修改,从而减少了内存泄露等问题的产生。

H264裸流由许多NAL单元组成,而NALU由NAL头和原始字节序列载荷组成,一般情况下,NALU会以00 00 01或00 00 00 01作为起始标志来界定分割,NALU头的长度为一个字节,低5位为此NALU的类型,有即时解码刷新(IDR)、序列参数集(SPS)、图像参数集(PPS)等。

RTMP封装视频部分的数据格式如图5所示。视频包头中高四位为后面NALU帧类型,主要分为关键帧和非关键帧。在一个H264图像序列中,第一个I帧为IDR帧,当解码器收到此类帧时,会立即将参考帧队列清空,重新查找参数集并开始新序列,所以IDR帧作为关键帧传输。同时解码器需要重新读入参数集,即SPS帧和PPS帧,所以在发送IDR帧前也需要将这两种帧作为关键帧重新发送。

图5 RTMP视频包数据格式

包头中低四位为解码此视频包的解码器种类,本文中为AVC(H264)。包类型常见有AVC序列头和AVC NALU.AVC序列头为解码器解码所需的重要信息,即SPS帧和PPS帧。由于librtmp发送时需要另外指定时间戳,此处相对时间戳一般全为0.

以上分析得到了在发送RTMP包时整个视频数据包的结构,包括重要字节中标志位的选取。通常情况下H264码流的第一个NALU是SPS帧,第二个NALU是PPS帧,紧接着就是多个I帧,后续码流以此结构形式循环。在取出了RTP流中的H264裸流之后,H264解析器只需要根据此结构形式将每个NALU解析后按照图5的格式插入进包尾即可。

librtmp库对于RTMP流的底层发送已封装成RTMP_SendPacket()函数,核心入口参数为 RTMPPacket结构体。其中需要说明的是m_nTimeStamp结构体成员,本文中使用绝对时间戳对视频流进行标记,时间戳计算公式为:

当前帧时间戳=上一帧时间戳+1000/fps

一般视频时间戳可以从0开始计算,则每一帧的时间戳每次只需加上一个常量即可。fps为视频帧率,可以根据H264相关文档从SPS帧中解析获得。在填写好所有主要结构体参数之后,将前面所述的视频数据包内容拷贝进结构体中m_body数组,即可调用RTMP_SendPacket()函数向流媒体服务器进行最后发送。

4 实际应用及效果

将推流工具部署在一台拥有公网ip地址的2核8G云服务器上,操作系统为Ubuntu 16.04.实际监控场景为上海某工厂叶片疲劳测试现场,用户登录系统后选择相应的叶片测试地点,并点击现场视频界面即可进入视频监控。页面采用了JW Player开源播放器从流媒体服务器实时拉取RTMP视频流进行解码播放,监控网页如图6所示。

图6 视频监控显示页面

一般地,评价视频监控性能的主要指标是实时性,并通过延迟时间来体现。视频延迟是指图像从底层IPC采集完成经服务器端中转,通过播放器显示给用户的时间差。对整个叶片测试视频监控系统的实时性进行测试,试验一共进行了200组,结果如图7.可以看出延迟时间为2 s左右,考虑到工业现场网络状况,此结果满足叶片测试视频监控要求。

图7 延时性实验结果

5 结论

本文基于librtmp库和EHomeSDK自行开发了一款支持多摄像头注册,响应多路预览请求,并分别向流媒体服务器推流的实时视频流推送工具。很好地改善了风机叶片测试现场的监控环境,有效地节省了人力物力,保障了测试过程的安全性,为叶片远程认证提供了一种可能途径。同时,其软件架构也方便扩展和移植更多功能,为其它基于web的视频监控场景提供了一种有效的方案。

猜你喜欢

视频流预览服务器
边缘实时视频流分析系统配置动态调整算法研究
新品预览
服务器组功能的使用
基于视频流传输中的拥塞控制研究
通信控制服务器(CCS)维护终端的设计与实现
PowerTCP Server Tool
铁路货场智能大门集装箱全景图像采集方法研究
11月在拍电视剧预览表
美国视频流市场首现饱和征兆
计算机网络安全服务器入侵与防御