邵泽靖,胡 静,宋铁成,黄 秦
(东南大学 信息科学与工程学院,江苏 南京 210096)
随着社会经济的发展,交通运输业成为国民经济发展重要经济命脉。移动通信技术的发展,为物联网技术提供了强有力的支持,在交通运输行业催生了车联网这一概念。车联网概念引申自物联网(Internet of Things,IoT)。行业背景不同,对车联网的定义也不相同。传统的车联网定义是指装载在车辆上的电子标签,通过无线射频等识别技术实现在信息网络平台上,对所有车辆的属性信息和静、动态信息进行提取和有效利用。根据不同的功能需求,对所有车辆的运行状态,进行有效的监管并提供综合服务的系统。车载视频监控是车联网领域的一个重要研究课题,它能方便用户实时、直观地监控车辆安全情况[1]。为了更有效地对车辆情况进行监管,本设计使用Hi3520D作为车载终端核心芯片,基于Linux嵌入式进行程序设计,实现采集、显示、存储视频数据功能,将车载终端作为流媒体服务器,供远程视频监控软件查看视频终端内的视频文件。
本系统使用车载终端挂载摄像头对车体四周进行监控,远程监控客户端通过网络访问车载终端视频监控系统,查看车辆情况,系统总体设计如图1所示。在本系统中,在每个车载终端上挂载4路摄像头。车载终端对采集到的视频数据进行处理与显示,并将视频数据保存在本地存储设备之中。远程监控客户端通过网络访问车载终端中的视频文件,查看车辆情况。此时,车载终端不仅能作为视频采集与存储的设备,而且可以作为视频文件的流媒体服务器,将本地视频以流的方式推送到视频监控客户端。
系统硬件总体结构如图2所示。其中车载核心芯片使用了基于ARM9处理器的HI3520D,使用130万像素的AHD高清车载专用摄像头,通过NVP6114视频解码芯片将数据传送到HI3520D核心芯片中。4G模块主要采用了移远LTE EC20进行视频数据传输。WiFi模块主要使用了RTL8188 CUS芯片。通过RS232串口进行信息调试的输入和输出,USB可以接外置存储设备和鼠标设备。
图1 系统总体设计
图2 系统硬件架构
车载视频监控系统核心芯片主要使用了搭载Linux操作系统的HI3520D。HI3520D是针对多路D1和多路高清DVR,NVR产品应用开发的一款专业SOC芯片。其采用ARM9处理器内核,处理器频率高达600 MHz,集成8路D1多协议编解码能力的引擎与丰富的视频输入输出接口(CVBS、高清VGA、BT1120),充分满足客户产品的高质量图像体验与车载视频监控应用软件开发需求[2]。海思提供的媒体处理软件平台(Media Process Platform,MPP),可支持HI3520D应用软件快速开发。该平台对应用软件屏蔽了芯片相关的复杂的底层处理,并对应用软件直接提供MPP程序接口(MPP Programe Interface,MPI)完成相应功能。该平台支持应用软件快速开发以下功能:输入视频捕获、H.264/MJPEG/JPEG/MPEG4 编码、H264/VC1/MPEG4/MPEG2/AVS 解码、视频输出显示、视频图像前处理(包括去噪、增强、锐化、Deinterlace)、编码码流叠加 OSD、视频侦测分析、智能分析、音频捕获及输出、音频编解码等功能[5]。
视频采集模块主要使用了NextChip NVP6114作为视频采集芯片。NVP6114作为AHD1.0的接收芯片RX,可以接收960 H CVBS/Comet,720 p(AHD)。NVP6124作为AHD2.0的接收芯片R,用于DVR的时候,因为能接收所有960 H CVBS/Comet,1 280 H CVBS/Comet,720 p(AHD),1 080 p(AHD)图像,所以能够处理多种视频图像。
EC20是移远通信最近推出的LTE Cat.3模块;采用LTE 3GPP Rel.9技术;支持最大下行速率100 Mbps和最大上行速率50 Mbps,可以满足视频传输的高带宽要求。EC20在封装上兼容移远通信UMTS/HSPA+ UC20模块,实现了3G与4G网络之间的无缝切换,并且向后兼容现存的EDGE和GSM/GPRS网络,以确保在缺乏3G和4G网络的偏远地区也能正常工作。EC20使用多输入多输出技术,使信号通过发射端与接收端的多个天线传送和接收,从而降低误码率,改善通信质量。同时,它结合了高速无线连接与内置多星座高精度定位GPS+GLONASS接收器。EC20内置丰富的网络协议,集成多个工业标准接口,可以工作在多种嵌入式设备中。
嵌入式在存储空间与处理器速度等硬件资源上有限,所以不可能直接在车载终端上直接进行开发,必须在上位机PC上进行所有的软件开发与调试,通过串口或者网络将目标程序下载到目标机上运行,这就需要搭建交叉编译环境[3]。使用VMware安装Linux操作系统,本文使用的Linux操作系统为Ubuntu 16.04。安装完操作系统之后需要安装交叉编译器,本系统开发所使用的编译器是arm-hisiv100nptllinux-gcc,版本是4.4.1。为了加快开发速度,不使用串口或者网络将目标程序下载到目标机上运行的方式,而是使用NFS网络文件系统,将宿主机上的指定目录作为共享文件夹,通过NFS网络文件系统将共享文件挂载在目标机上,这样免去了下载程序的步骤,直接在目标机器上运行程序查看效果。
海思图标帧缓冲区(Hisilicon Framebuffer,HiFB)是海思数字媒体处理平台提供的用于管理叠加图形层的模块,它不仅提供Linux Framebuffer的基本功能,还在Linux Framebuffer的基础上增加层间colorkey、层间colorkey mask、层间Alpha、原点偏移等扩展功能[4]。可以使用支持Linux Framebuffer的Qt进行GUI程序设计。Qt是一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。使用Qt进行嵌入式软件开发需要使用交叉编译器进行交叉编译后方可使用,本系统使用的是经过剪裁后的Qt 4.8.6 。
车载终端不仅作为视频采集与存储的设备,还作为视频播放的服务器。使用了基于RTP/RTCP/RTSP/SIP的开源Live555进行视频服务器的开发。Live555是一个为流媒体提供解决方案的跨平台的C++开源项目。标准流媒体传输是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP,RTSP,SIP等的支持。Live555实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG,H.263+,DV,JPEG视频和多种音频编码。Live555现已经支持嵌入式开发,但需要使用交叉编译工具在宿主机上进行移植后方可使用。
终端软件设计主要包括3个部分,视频采集与显示、GUI界面交互、流媒体服务器,整个软件设计架构如图3所示。
图3 系统软件设计架构
本车载终端默认使用4路720P视频进行录制,使用VGA进行输出。视频采集与显示主要使用MPP平台下视频输入、视频处理与视频输出3个模块。视频输入模块捕获视频图像,可对其作剪切、缩放、镜像处理,并输出多路不同分辨率的图像数据。视频处理模块接收视频输入发送过来的图像数据,可对图像进行去噪、图像增强、锐化等处理,并实现同源输出多路不同分辨率的图像数据,用于编码、预览或抓拍。视频输入模块接收视频处理模块处理后的输出图像,可进行播放控制等处理,最后按用户配置的输出协议输出给外围视频设备。MPP提供将系统绑定接口,即通过数据接受者绑定数据源,来建立二者的关联关系,绑定后数据源生成的数据将直接发送给接受者,整个过程如图4所示。
图4 视频采集与显示流程
步骤1:计算视频缓存池大小及初始化系统。视频缓存池主要向媒体业务提供大块内存管理功能,负责内存的分配与回收,充分发挥内存缓存池的作用,让物理资源在各个媒体处理模块中合理使用。
步骤2:打开视频输入模块,HI3520D视频输入模块有两个视频输入设备Dev0和Dev1,每个视频输入设备有4个通道。打开视频输入模块步骤,主要是依次打开每个视频输入设备之后,再打开每个视频输入设备的通道。
步骤3:开启视频处理模块,并将视频处理模块与视频输入模块进行绑定。视频处理模块通过提供组(Group)的概念,将每组分为3种通道:物理通道、直通通道和扩展通道。HI3520D不支持扩展通道,只含有物理通道和直通通道,如表1所示 。将视频输入设备Dev0的4个通道分别与视频处理模块每组的物理通道0进行绑定。
表1 HI3520D视频处理模块通道规格
步骤4:打开视频输出模块并将其与视频处理模块进行绑定。HI3520D视频输出模块支持3个图形层(G0~G2),1个鼠标层。其中,G0~G2图形层分别固定绑定到高清设备(DHD0)、标清设备0(DSD0)和标清设备1(DSD1)。鼠标层可以绑定到DHD0,DSD0,DSD1。其中,每个高清设备有16个通道,标清设备有32个通道[5]。启动高清设备后,将高清设备的0~8号通道分别与视频处理模块的每个组的物理通道2进行绑定。
在使用Qt进行界面GUI设计之前,需要调用open函数将制定HiFB打开。整个HiFB开发流程如图5所示。使用Qt进行GUI设计主要是为了控制视频文件存储打开/关闭,相关视频参数的设置。视频文件存储打开/关闭主要是使用MPP平台下的视频编码模块。视频编码模块同样使用组,首先创建组,其次打开相应通道,然后将相应通道注册到相应组,之后打开相应通道接收图像数据,最后将视频处理模块与视频编码模块进行绑定。本系统中将获取视频码流存储为H.264编码的功能封装到了一个相应的函数中,在Qt界面中点击相应按钮便可以完成视频文件存的打开/关闭功能。
车载终端流媒体服务器主要是使用Live555开源项目中的live555MediaServer通过RTSP/RTP协议传输视频流。在本项目中流媒体服务器是作为子进程运行的。通过进程间的通信方式,可以在父进程,也就是GUI界面中关闭和开启流媒体服务器。Live555MediaServer程序中首先创建BasicTaskScheduler和BasicUsageEnvironment对象。TaskScheduler是任务调度中心,实现事件的异步处理、事件处理函数的注册,主要负责任务的调度与执行。UsageEnvironment可以输入输出消息,代表整个系统环境。然后创建DynamicRTSPServer对象。RTSPServer实现相应端口的监听,对于请求进行应答。最后开启时间主循环,不断监听客户端请求,实现应答[6]。
系统测试主要是用本地PC与车载终端进行联合测试,两者连接到名称为TP-HISI的WiFi,将车载终端启动完成后,PC通过WiFi访问车载终端,车载终端实物如图6所示。图6中,1为串口转USB接口,2为以太网口,3为VGA接口,4为电源接口,5为摄像头接口,6为摄像头,7为RTL8188 CUS WiFi模块,8为SIM卡槽,9为SD存储卡接口,10为7寸显示器。图7为核心板背面,图7中,1为Hi3520D芯片,2为NVP6114视频采集芯片。
图5 HiFB开发流程
图6 车载终端视实物
图7 核心板背面
将图6中7寸显示器通过VGA接口与车载终端相连接,启动车载终端程序,界面显示如图8所示。通过图8可看出,视频采集与显示功能完好,图8中右下角start和stop按钮分别控制视频文件的存储开关。通过测试,视频文件存储功能正常,存储在本地磁盘上文件名称为stream_chnx.264,其中x表示通道号。
图8 车载终端界面显示效果
将车载终端与本地电脑连接至无线TP-HISI,分配地址IP分别为192.168.100.77与192.168.100.100。本地电脑使用VLC播放器访问车载终端,访问格式为:rtsp://IP:Port/filename。其中,IP为车载终端,Port表示地址端口号,测试端口号为554,filename使用视频存储的文件名,文件名为“stream_chnx.264”,其中x表示通道号。访问通道0的视频录像文件stream_chn0.264,播放效果如图9所示,播放速率实测为25帧/s。图10是VLC播放器对当前播放的统计,从图中可看出,播放器丢帧率较低,使用WiFi传输码流速度很高。
图9 VLC播放效果
图10 VLC播放统计
本文使用Hi3520D作为嵌入式核心芯片,通过NVP6114采集视频,移植Qt设计GUI界面程序,控制H.264编码视频的存储开关,使用户更易于控制视频终端,达到了良好的交互效果。本设计将车载终端作为视频流媒体服务器,可使远程视频监控客户端通过网络访问车载终端视频文件,达到了浏览监控视频的效果,满足车载视频监控的各项要求,可以应用于车载视频监控系统中。