当前位置:首页 > 应用方案 > 安防
基于QEMU视频监控系统的设计与实现

嵌入式系统是软硬件相结合、定制化、产品化相结合的复杂性系统工程,它涉及半导体、电子信息、信号处理、软件工程等多学科的知识与技能,已经广泛地应用于消费电子、国防工业、物联网、家居安防、政务教育等诸多领域,并且随着嵌入式操作系统的应用和技术的成熟,产品更加多样化,迭代速度更加快速。


在设计开发某款嵌入式产品时,业内常见的做法通常会选用某款开发板,根据产品需求订制所需CPU 型号、RAM、ROM、电源模块、显示模块等硬件环境,选定操作系统平台及该平台上所使用的各项开发工具,例如编译器、链接器等。根据厂家的硬件规格与软件说明编译出在目标平台(开发板)上运行的镜像文件,通过JTAG 等烧录工具烧录到目标平台上。完成软硬件环境的搭建后,之后才进入嵌入式应用程序的开发环节。


然而,嵌入式系统开发前期过程中存在着硬件经济成本高、环境搭建复杂繁琐、软件开发周期长、问题错误定位难、学习者学习成本高等问题,特别对于初学者在遇到开发板硬件问题时,较难判断问题原因以及寻求一对一指导解决。如何解决上述诸多问题,已成为嵌入式软件从业者迫切需要研究的问题。


1 QEMU软件开发

QEMU最初是由法国程序员Fabrice Bellard 开发的一个开源模拟器,广泛应用于虚拟化和硬件仿真。QEMU能够完成用户程序模拟和系统虚拟化模拟。用户程序模拟指的是QEMU 能够将一个平台编译的二进制文件运行在另一个不同的平台,如一个ARM 指令集的二进制程序,通过QEMU 的TCG(Tiny CodeGenerator)引擎的处理之后,ARM 指令被转换成TCG中间代码,然后再转换成目的平台的代码。系统虚拟化模拟是指QEMU 能够模拟出一台拥有自己的虚拟CPU、芯片组、虚拟内存以及各种虚拟外部设备的完整系统虚拟机,能够将与物理计算机完全一致的硬件视图呈现在虚拟机中运行的操作系统和应用软件上。QEMU 能够模拟的平台很多,包括x86、ARM、MIPS等等,比如QEMU 可以虚拟一个基于x86 架构PC 主机的基于ARM 架构的开发板,运行嵌入式的和应用程序。


QEMU 通过支持对ARM 平台的指令级仿真,使目标系统运行在仿真环境中,就像运行在真实的物理环境中一样,在嵌入式系统的开发过程中,通过建立虚拟硬件环境,使嵌入式软件在没有实体硬件环境的情况下运行,能够为软件开发者提供一个开发和测试的平台,开发效率大大提高,QEMU 可以模拟很多体系结构以及硬件板子,包括ARM Cortex A9 系列的Vexpress 板子、支持ARM64 的Virt 板子以及RISC-V 的板子等。具体操作上只需要1 台安装了Linux 发行版的个人计算机即可,使用QEMU 虚拟机来打造ARM 实验平台,它具有如下特点。


本文基于QEMU 虚拟机模拟4 核Cortex-A9 的Versatile Express 开发平台,完成Linux4.0 和根文件系统的移植工作,并在搭建的虚拟平台上设计实现了嵌入式视频监控器,用户可以在通过网络远程访问并拉取音视频流媒体。通过该案例以验证基于QEMU 的嵌入式软件开发方法是可行有效的,过程简化为如下步骤和内容:

1)在开发平台上建立开发环境。选择Ubuntu、CentOS、Fedora 等Linux 发行版,下载安装GCC 交叉编译器等依赖软件,下载安装QEMU;

2)建立根文件系统。下载Busybox 进行功能裁剪,制作一个最基本的根文件系统;

3)下载开源操作系统Linux 源码并编译,选择4.0版本;

4)编写编译应用程序;

5)启动QEMU 运行内核、根文件系统,在QEMU中执行应用程序。


对比传统的嵌入式软件开发方法,基于QEMU 的嵌入式软件开发方法流程更精简、开发更高效、成本更低廉。


2 视频监控系统设计

视频监控系统是一种电子系统或网络系统,通过摄像机查看所在位置的情况,同时将该位置情况的图像、声音传送到中心控制系统,便于对异常情况的及时发现、记录和处置,广泛应用于公安、消防、交通、银行、医疗、工厂等众多行业的安全保卫和现场管理,一般由前端摄像、传输、控制、显示和记录等主要部分组成,简而言之,视频监控系统主要包括对摄像头采取实时拉流、设备控制等操作。本文设计实现了一款基于QEMU 的视频控制系统,该系统对外提供自定义私有协议和RTSP 协议,分别对外提供摄像头的系统控制服务和RTSP 音视频流媒体服务。


2.1 中心控制系统

中心控制系统采用平台图形用户界面应用程序开发框架QT 编程实现,程序启动后创建线程等待视频控制系统连接,视频控制系统启动后完成USB 摄像头初始化并启动流媒体服务。待双方建立Socket 连接后,根据自定义私有协议,中心控制系统获取到视频控制系统的RTSP URL 地址,并调用视频播放组件实时拉取音视频流数据,实现视频监控功能。


2.2 视频监控系统


1)内核环境准备

选择Ubuntu 发行版,下载安装GCC 交叉编译器等依赖软件:sudo apt-get install libncurses5-dev gccarm-linux-gnueabi build-essential,下载安装QEMU:sudo apt install qemu-system-arm。下载Busybox 进行功能裁剪,制作一个最基本的根文件系统。下载Linux内核源码并编译。


2)编写应用程序

RTSP 是一种网络控制协议,被设计用于多媒体通信系统中建立和控制流媒体服务器。流媒体数据本身的传输并不是RTSP 的任务,实现上还要搭配RTP、RTCP 来完成真正意义上的码流传输及控制。协议分工如下:RTSP 负责建立和控制会话(默认端口:554),基于TCP 实现;RTP 负责传输流媒体数据;RTCP 负责与RTP 控制流量统计。要实现视频监控系统的RTSP 音视频流媒体服务,需要实现图像采集、图像转换、视频编码、视频分发等环节步骤。


ffmpeg 有着强大的视频采集、视频格式转换、视频编码、视频解码等功能,可用于音视频的记录、转换,并能将其转化为数据流。图像采集模块设置video4linux2 的采集方式,设置分辨率、图像格式、采集帧率等参数,并打开摄像头(/dev/video0), 在循环中不断采集图像帧,然后进行下一步的图像转换和编码处理。图像转换模块设置源图像格式YUV422 以及目标图像格式YUV420,转换后存放在AVFrame 中,给下一编码环节使用。视频编码模块设置分辨率、帧率、图像格式、码率等参数后,向编码器添加1 帧上一环节的YUV420 图像,读取到H.264 视频编码帧之后传递给RTSP 服务模块分发数据。


Live555 是1 套使用开放标准协议(RTP/RTCP,RTSP, SIP) 的用于多媒体拉流的开源C++ 库。该开源库能够读取,接收和处理MPEG, H.265, H.264, H.263+,DV 或者JPEG 视频[],以及其他的音视频编码格式,也可以用于构建基本的RTSP 客户端和服务器。

基于live555 实现RTSP 协议服务功能, 包含OPTIONS、DESCRIBE、SETUP、PLAY、PAUSE、TAERDOWN 等方法。在live555 中RTSP 是1 个摄像头的RTSP 会话对应1 个ServerMediaSession,而每个RTSP 会话需要传输视频、音频等码流,而每一个流对应 ServerMediaSubSession,对于视频流,常见的编码格式有H.264、H.265 等,可将摄像头的图像编码为H.264格式, 因此采用H264VideoFileServerMediaSubSession实现ServerMediaSubSession。最后将移植编译成功的ffmpeg 和live555 二进制文件拷贝至kmodules 共享目录中,在QEMU 输入框启动视频监控系统。


3)启动应用程序

启动1 个带有集成网络摄像头的QEMU 虚拟机,设置参数-device usb-host,hostbus=1,hostaddr=3,其中1 和3 分别代表总线和设备值。同时指定硬件平台、内核数量、内存大小、内核镜像路径、共享目录路径等参数:sudo qemu-system-arm -M vexpress-a...。最后启动中心控制系统QT 软件,点击“打开”按钮成功拉取摄像头实时监控视频。


佑德半导体 版权所有