Cortex-A8和H.264的无线视频监控系统设计

judy的头像
judy 发布于:周四, 06/29/2017 - 17:29 ,关键词:

摘要: 设计了一种基于CortexA8和H.264编码的无线视频监控系统。系统包含视频监控PC客户端、无线传输网络和视频采集端。视频采集端采用基于ARM CortexA8内核的SP5V210芯片作为中央处理器,并构建Linux系统对视频图像进行采集、H.264编码和无线传输,已编码压缩的图像数据通过实时传输协议RTP传输到视频监控PC客户端进行解码和显示。该系统具有组建快捷、灵活性强等特点,能够稳定地运行且满足设计要求,在安防系统和紧急救援系统中有着很好的应用前景。

引言

随着现代科学技术和居民生活水平的提高,以及人们对安全问题的日益重视,视频监控系统在紧急救援和安防系统中得到了广泛应用。无线技术的发展解决了传统有线的布线复杂,网络结构不灵活等技术问题。无线技术对于特殊监控环境有着很好的亲和性,且移动通信网和无线局域网的快速建设为视频监控系统的设计提供了技术支持,其中无线局域网WLAN的组建快捷、灵活性强、受环境限制小、方便网络重组和扩展。

国际电信联盟对于视频编码压缩制定了H.264/AVC视频编码压缩标准,H.264加强了对 IP、移动网络的丢包、误码情况处理,保证了在不同信道中进行传输的视频图像质量。随着H.264编码技术的提出与应用,大大提高了视频数据的压缩率,减少传输时所用的网络带宽,并促进了无线网络的发展,同时H.264编码的网络传输提取层设计,可以使视频数据在不同网络里进行传输且适应性良好。

嵌入式芯片功能的增强和开源Linux操作系统的成熟使得基于嵌入式系统的视频监控系统具有更好的稳定性和实时性,结合无线网络技术使系统具有成本低、组网便捷和实际应用性强等优点,可以广泛地应用于民用与工用安防系统。

本文将WiFi技术、图像压缩技术与基于嵌入式视频监控系统相结合,采用嵌入式ARM CortexA8高性能处理器芯片SP5V210和Linux操作系统,将COMS摄像头采集的视频流经H.264编码压缩后由无线WiFi网络传输到监控端,通过PC监控端的FFMPEG模块和SDL播放模块完成监控视频数据的实时显示。

1 视频监控系统框图设计

系统采用ARM CortexA8内核的SP5V210芯片作为视频采集端的中央处理器,该处理器运行稳定时主频可达1 GHz,具有MMU功能、64位内部总线架构、可扩展的DRAM内存接口、1 G的NAND Flash和DDR2、3通道I2C总线接口、4个USB接口、4路 HSMMC/SD/SDIO/接口等。同时其内部集成MFC视频编解码器,支持多格式编解码包含MPEG4/H.264编码,且CortexA8处理器应用NEON信号处理扩展指令集提高了H.264和MP3等媒体编码效率。工作流程为:首先OV3640摄像头采集图像信息并通过I2C总线与SP5V210处理器通信,处理器通过内部集成的MFC多格式编码器将图像信息进行H.264编码压缩,视频图像再基于USB无线网卡构建的WLAN网络和实时传输协议RTP发送给视频监控PC客户端,由客户端进行解码和显示。系统的软件结构包含应用层程序、设备驱动程序和嵌入式Linux操作系统。系统工作时会先执行Bootloader引导加载程序进行硬件设备初始化并引导加载Linux 2.6.35内核,再加载设备驱动程序(包括摄像头驱动、WiFi驱动、Nand Flash驱动等),最后为用户区应用层程序的执行,其中包含视频采集模块、H.264编解码模块、WiFi无线传输模块和RTP实时传输协议模块。系统整体框图如图 1所示。

图1 系统整体框图
图1 系统整体框图

2 视频采集端和无线传输设计

2.1 视频数据采集

在视频采集端,原始视频数据的采集是通过OV3640图像传感器模块完成,该摄像头支持300万像素并支持输出YUV420图像数据,SP5V210处理器通过I2C总线访问与修改OV3640内部寄存器来控制摄像头功能。

在Linux操作系统中,通过应用Video4Linux(V4L)来实现视频采集设备的各种功能。在Linux内核中定义了视频设备的统一接口V4L,由统一的API接口库函数控制视频设备各种功能。其中,V4L2是V4L的升级版,具有更好的兼容性和扩展性。V4L2采集视频信息的流程为:通过openVideo()函数先打开视频采集设备文件;初始化设备信息包括获得视频设备支持的功能属性和设置其采集视频格式;向内核申请帧缓存内存空间,并将其映射到用户空间,开始发送采集信号;读取视频缓存帧数据,可以根据需求进行数据的处理;发送采集停止信号,释放内存映射,关闭视频设备。数据采集流程如图2所示。

图2 数据采集流程
图2 数据采集流程

2.2 H.264编码压缩

视频图像画面用 4:2:0格式存储,每帧的数据大小为1.2 Mb,对于25~30 fps的实时硬件编码,其码流将达到了 30~36 Mbps,无线网络带宽和存储空间难以承受,需采用H.264压缩编码技术将大数据量的视频数据进行压缩。SP5V210内部集成了多格式的视频编解码器(MFC),支持H.264的硬件编解码且速度最高可达到30 fps,可以很好地满足系统对视频数据压缩和处理速度的要求。采用MFC硬件编解码模块完成视频数据编解码的程序时,既可以调用MFC编解码中的API库函数,又可以采用MFC中的I/O接口函数,MFC编解码中的底层驱动接口封装实际上就是API库函数。SP5V210的MFC编解码软件架构如图3所示。

图3 MFC编解码软件架构
图3 MFC编解码软件架构

通过硬件编解码模块 MFC的API接口函数实现 H.264视频编码压缩,具体的流程为:

① 建立H.264编码器实例,设置MFC编码器的参数并对其进行初始化设置。

② 获取编码器的输入缓冲区地址,读取视频数据,发送到编码器的输入缓冲空间。

③ 进行H.264压缩编码,获取编码后的输出缓冲区,并对编码数据进行相应处理。

④ 判断编码是否结束,结束则释放编码器的资源,编码器关闭,否则进入第2步循环运行。

2.3 视频数据无线传输

系统的传输网络是通过USB无线网卡构建无线局域网的方式完成,利用无线的信道来传输编码后的视频数据,WiFi(Wireless Fidelity)通信网络标准分别支持IEEE 802.11g、IEEE 802.11b和IEEE 802.11a协议,具有传输速率高(11~54 Mbps)、安装便捷和受环境限制小等优点。

USB无线网卡通过USB接口与SP5V210通信,需要完成USB设备、无线网卡设备的驱动和移植,无线网卡设备驱动为应用层提供协议栈接口,在下层通过USB总线访问无线网卡设备寄存器。无线网卡在Linux操作系统上的移植,先要下载对应驱动工具包并将其复制到根目录下完成驱动,通过串口工具输入scanwifi进行搜索无线网络信号,再通过startwifi命令打开无线网络并建立连接。

无线网络传输视频数据时,必须要遵循约定的网络传输协议。一般常用的网络传输协议有RTP/RTCP、TCP/IP和UDP ,本系统中视频数据的传输是基于 RTP/RTCP实时传输协议的,RTP/RTCP协议实现的开源库有JRTPLIB、LIBRTP、ORTP等,本文采用基于C++的开源库JRTPLIB,支持Linux和Windows操作系统平台,且操作便捷,封装性好。为了实现基于RTP/RTCP实时传输协议的视频数据传输,先要完成JRTPLIB的交叉编译和到Linux系统平台移植等工作。

采用JRTPLIB开源库中的接口函数完成无线视频数据传输的具体流程如下:

① 初始化并生成RTP会话。采用JRTPLIB开源库传输视频数据前,要先创建一个RTPSession实例用来代表RPT会话,并利用RTPSession Params对象设置时间戳的单位,再调用RTPSession实例中的成员函数Create()生成RPT会话并同时初始化。

② 设置接收端目标地址。在生成RTP会话后传输视频数据前,首先调用RTPSession实例中的成员函数AddDestination()来设置数据发送时的目标地址(接收端地址)。在RTP协议中可以根据需要设置指定多个目标地址于同一会话中,其中函数SetDefaultPayloadType(96)用于设定RPT负载H.264编码数据; voidClearDestinations()用于清除所有的地址;函数DeleteDestination()为删除指定地址。

③ 发送视频数据到目标地址。设置好数据发送目标地址之后,使用 RTPSession实例中成员函数SendPacket(),将编码好的H.264数据包发送到一个或多个目标地址。由于每一帧视频的数据量较大,RTP数据包以分片传输方式传输以保证视频数据的可靠性。SendPacket()函数中,mark为1代表该RTP包为完整包,为0代表分割包。

④ RTP会话结束。调用BYEDestroy()函数结束此次RTP会话。

3 视频监控PC客户端设计

接收端将分片数据包重新组装成为帧,得到H.264格式的压缩编码视频,交付给视频监控PC客户端处理,这里视频监控PC客户端的主要功能为视频数据的重新解压、播放显示和处理等。系统采用FFMPEG方案和SDL技术来实现监控视频数据的解压和显示。

3.1 视频数据解压

FFMPEG是一套开源的音频流和视频流方案,支持音视频编解码等功能,为免费软件。FFMPEG方案的开发与使用是在Linux系统平台下的,但随着发展现已支持Windows等多种操作系统。FFMPEG方案支持H.264、MPEG4、3GP等多种常见格式的视频编解码,功能全面且性能强大。系统采用FFMPEG方案主要完成客户端对已编码视频数据的接收和视频解码工作。

在Windows下安装好FFMPEG开源库开发环境,再进行视频数据的解码工作,其中FFMPEG库中的主要功能函数和数据结构有:
① AVCodecContext()结构体,用于编码器参数信息描述,如视频的采样率、视频的宽和高等信息;
② AVPacket()结构体,缓冲解码前视频数据;
③ AVFrame()结构体,存储视频数据解码后的数据帧;
④ av_resister_all()功能函数,用来注册全部解码器;
⑤ avcodec_find_decoder(),搜索解码器,如H.264格式解码器;
⑥ avcodec_decode_video(),解码接收到的视频帧;
⑦ avcodec_alloc_frame(),新建AVFrame结构体。

3.2 视频播放显示

SDL是一个跨平台的多媒体开源开发库,支持多媒体播放器、游戏开发等,可以运行在多种操作系统上(如Windows、Linux等),兼容性良好。SDL开源库包含音频、视频和视窗管理等多个子系统。本文采用SDL开源库中的视频子系统,其主要功能是将FFMPEG解码后的视频数据进行显示与播放。

SDL开源库将解码后的视频数据转化成对应的YUV格式,在屏幕上显示其各个分量,完成视频的输出。SDL开源库中的主要的数据结构体和功能函数为:
SDL_Overlay()结构体,为YUV格式图像信息的覆盖结构;
SDL_Surface()结构体,为SDL中图像信息显示的基本区域;
SDL_Init()功能函数,作用是初始化SDL中图像特性;
SDL_CreateYUVOverlay()功能函数,创建SDL_Overlay()结构,设置尺寸参数等;
SDL_DisplayYUVOverlay()函数,用来播放监控视频图像,即SDL_Overlay()结构体中存储的图像信息。

通过FFMPEG和SDL技术中的主要结构体以及功能函数完成接收端的视频解码和播放任务,主要的工作流程如图4所示。

图4 视频图像解码与显示
图4 视频图像解码与显示

结语

本文设计了一种基于 CortexA8的无线视频监控系统,采用高性能的ARM CortexA8芯片SP5V210、300万像素的COMS摄像头、USB无线网卡以及PC机完成了系统的硬件搭建,利用低码流和容错能力强的H.264压缩编码技术进行视频数据编码,满足了无线传输要求,且基于RTP/RTCP网络传输协议提高了视频传输的实时性。在视频监控PC客户端应用开源的FFMPEG和SDL技术实现了监控视频图像的解码和播放。

本系统具有良好的扩展性,根据需求可扩展为多路无线视频监控,用于人体识别、智能报警等。该系统可以高效稳定运行,布防便捷,携带方便,灵活行强,成本低,提高了视频监控系统的实时性,在紧急救援和民工业安防系统上具有良好的应用前景。

文章转载自:单片机与嵌入式系统应用

围观 546