APP下载

基于S3C2440的嵌入式无线视频采集系统设计

2018-12-03韩成哲赵宏伟

吉林大学学报(信息科学版) 2018年6期
关键词:嵌入式内存无线

韩成哲, 李 勋, 赵宏伟,3

(1. 中国人民解放军 92493部队, 辽宁 葫芦岛 125000; 2. 吉林大学 计算机科学与技术学院, 长春 130012;3. 中国科学院 应用光学国家重点实验室, 长春 130033)

0 引 言

视频监控在智能家居[1]、 安全生产[2]、 智能交通[3,4]和公共安全[5,6]等众多领域得到广泛应用。视频监控系统对现场的实时视频图像信息进行采集并快速传送到监控中心, 从而使人们掌握监控现场的情况。笔者从嵌入式视频监控的设计角度出发, 设计了基于S3C2440嵌入式处理器的视频采集系统, 并利用Linux操作系统, 通过USB摄像头进行图像采集, 对采集到的图像进行压缩处理, 同时实现后续的传输与存储。

1 无线视频采集系统结构设计

图1 视频采集系统架构Fig.1 Architecture of video capture system

无线视频采集系统包括视频采集端和视频监控端, 视频采集端设计了视频信息采集、 视频信息处理、 视频信息发送3层结构, 如图1所示。视频信息采集模块完成视频信息的采集工作, 视频信息处理模块完成视频信息的读取、 压缩。在嵌入式Linux环境下, 应用V4L技术实现设备的初始化操作以及图像的采集工作, 应用mmap内存映射读取图像, 应用FFMEPG库完成图像编码压缩。视频信息发送模块通过无线网卡将压缩后的图像传输到监控端, 视频监控端完成视频图像的接收和后续图像处理、 监控等工作。

无线视频监控系统的硬件结构如图2所示, 其硬件核心是S3C2440嵌入式微控制器, 同时在RAM存储器、 Nand FLASH存储器等方面进行了扩展。

图2 视频采集系统硬件结构Fig.2 Hardware architecture of video capture system

1) 嵌入式微控制器。无线视频采集系统的硬件核心是S3C2440嵌入式微控制器[7], S3C2440嵌入式微控制器采用ARM920T内核, 具有独立指令高速缓存和独立数据高速缓存, 增强了指令流水线处理能力, 扩展了高性能内部总线和外部设备内部总线, 支持NAND Flash启动, 内置外部存储器控制单元, 支持系统扩展RAM、 FLASH, 具有MMU(内存管理单元)逻辑, 支持虚拟存储管理, 因而支持Linux操作系统, 提供比较丰富的外围设备控制接口。

无线视频监控系统是在嵌入式Linux系统上开发的, 需要一定容量的内存空间, 因此硬件上扩展了64 MByte的SDRAM、 1 GByte的Nand Flash, 以及2 MByte的Nor Flash。为进行系统的更新与软件的调试, 扩展一个JTAG接口。

2) 视频采集设备。视频采集设备采用中星微ZC301P数码摄像头[8], 其视频采集应用CMOS感应技术, 具有分辨率高、 智能曝光、 自动校正等特点, 可还原画面生动、 表现力强的真实场景, 同时, 该设备具有良好的性价比。为实现ZC301P数码摄像头的接入, 硬件上扩展一个USB接口。

3) 无线传输设备。无线传输设备采用RT3070无线网卡[9], 以150 Mbit/s速度传输数据信息, 兼容IEEE802.11n、 IEEE 802.11b、 IEEE 802.11g 3种传输协议, 在传输距离方面, 室内距离是100 m, 在环境条件良好的情况下, 室外距离是300 m, 可配置成集中控制式网络模式或对等式网络模式。为实现RT3070无线网卡的接入, 硬件上扩展一个USB接口。

2 视频采集系统软件结构

视频采集系统软件结构包括嵌入式操作系统、 视频采集API接口、 视频数据编码。嵌入式操作系统是软件体系结构的核心, 用于管理嵌入式系统硬件和软件资源, 负责整个系统的资源分配、 资源调度、 内存配置、 底层驱动、 通信协议等任务处理。视频采集API接口实现标准协议下的设备驱动。视频数据编码完成数据的处理。

1) 嵌入式操作系统。嵌入式操作系统采用Linux, S3C2440嵌入式微控制器具有MMU特性, 提供对嵌入式Linux操作系统的支持。嵌入式Linux操作系统源码开放、 内核可以自由定制、 支持多任务与多用户操作, 包括Linux内核、 Linux系统以及Linux发行套件等。Linux采用模块化设计, 可移植性强, 具有丰富的开源软件与开发工具资源。

2) 视频数据采集。视频数据采集采用Video4Linux接口函数[10]。Video4Linux简称为V4L, 提供一种接口标准, 实现对Linux底层视频设备的控制、 驱动和数据采集, 并以协议方式同应用程序进行数据交换, 完成对视频采集设备、 视频采集图像的操作控制和信息处理。V4L包含多种外部设备的驱动程序, 支持ZC301P数码摄像头, 提供一整套API函数, 包含对ZC301P数码摄像头启停控制、 设备初始化以及图像采集等功能。

3) 视频数据编码。视频图像采集后, 要进行编码、 传输、 解码、 播放的数据处理过程。在视频采集端, 首先进行视频采集信号的编码操作, 形成视频编码数据文件, 视频编码数据通过无线传输的方式发送给视频监控端, 视频监控端接收到视频编码数据后, 完成数据文件解码操作功能, 播放器是对解码数据文件进行数据操作。视频采集系统采用FFmpeg开源解决方案完成视频信号的编解码处理。

FFmpeg是处理视频和音频的开源平台, 提供对视频和音频的多种处理功能, 支持H.264、 MPEG-4、 MP3等多种格式的编解码操作。FFmpeg方案中包含一个libavcodec库, 可以处理视频采集信号编码和视频数据文件解码, 需要使用FFmpeg的编码函数avcodec_encode_video和解码函数avcodec_decode_video, libavcodec库提供对编码函数avcodec_encode_video和解码函数avcodec_decode_video的支持。

4) 软件移植。系统软件开发基于嵌入式Linux操作系统, 在针对无线视频采集系统配置好嵌入式Linux操作系统后, 需要将操作系统和应用软件一起移植到视频采集端目标板上。

嵌入式系统软硬件资源受到限制, 嵌入式无线视频采集系统同样受到这种约束。在系统开发中, 需要在宿主机上开发应用程序, 采用ARM版的arm-linux-gcc编译器进行调试, 编译后的目标代码连同库文件一起移植到视频采集端目标板, 在目标板上运行应用程序。

3 基于V4L的视频采集

无线视频监控系统视频采集流程如图3所示, 视频采集流程设计如下。

图3 视频采集系统数据流程Fig.3 Data flaw diagram of video capture system

1) 开启视频硬件设备:调用open函数, 启动视频硬件设备对应的驱动程序, 建立硬件设备文件, 这个文件在逻辑上就对应了视频硬件设备, 对这个文件的操作就相当于对视频硬件设备操作。

2) 查询视频硬件设备信息。开启视频硬件设备后, 通过硬件设备文件可以得到相关的设备和图像的信息。视频硬件设备信息包括型号、 接口等, 调用VIDIOCGCAP命令的ioctl函数可以得到这些信息。视频图像信息包括分辨率、 像素等, 通过调用VIDIOCGPICT命令的ioctl函数可以得到这些信息。

3) 初始化图像参数, 在视频数据信号采集前, 需要设置采集图像参数, 比如挺像的分辨率、 像素要求、 图像缓冲区容量等。

4) 初始化图像参数不成功处理: 如果初始化图像参数没有成功, 需要调用初始化错误处理程序, 处理完毕后重新进行属性的设置。

5) 初始化图像参数成功处理: 若图像属性参数设置成功, 则进行图像的采集过程。无线视频监控系统的在图像采集过程中, 对设备物理内存进行程序逻辑空间映射, 通过程序逻辑空间访问设备物理内存。

6) 为提高视频数据采集效率, 无线视频监控系统在采用内存映射方式基础上, 还采用了双缓存采集方式, 就是在内存中开辟两块内存空间, 分别存放两帧图像数据, 在系统处理其中一个内存空间的图像数据的同时, 采集设备可以采集另一帧图像并映射到另一块内存空间, 系统在两个视频数据内存空间之间进行切换处理。

7) 视频图像采集: 图像参数初始化完成后, 将进行视频图像的采集与存储。完成视频图像采集后, 通过调用两个函数结束视频图像采集工作, 一是释放占用的系统内存资源, 通过调用函数munmap()实现; 二是关闭开启的视频硬件设备, 通过调用函数close()实现。

图像参数初始化完成后, 需要定义几个函数、 数据结构为图像采集做准备, 函数如下。

1) 建立v4l_device结构体, 用于存储V4L信息, 在应用程序中通过访问v4l_device结构体获取数据。

2) 定义一个v4l_open函数, 用此函数对打开设备过程进行封装。

3) 定义一个v4l_get_capability(v4l_device*vd) 函数, 用此函数得到视频硬件设备信息, 定义一个v4l_get_picture(v4l_device*vd) 函数, 用此函数得到采集图像的信息。

4) 定义一个v4l_grab_init函数, 用此函数初始化图像参数。

5) 定义一个int v4l_mmap_init(v4l_device*vd)函数, 用此函数申请程序逻辑空间, 初始化内存映像过程。

6) 定义一个int v4l_get_mbuf(v4l_device*vd)函数, 用此函数获取缓存空闲容量。

7) 定义一个int v4l_grab_start(v4l_device*vd,int frame)函数, 用此函数完成视频图像采集工作。

8) 定义一个unsigned char* v4l_get_address(v4l_device*vd)函数, 用此函数获取视频图像内存映射地址。

9) 定义一个int v4l_grab_sync(v4l_device*vd,int frame)函数, 用此函数保证双缓存同步采集。

10) 定义一个int v4l_close(v4l_device*vd)函数, 用此函数停止视频硬件设备工作。

无线视频监控系统视频数据采集的实现过程如下: 定义一个结构体vd, 开启视频硬件设备, 完成vd映射赋值到fd, 初始化设备、 图像参数, 对设备物理内存进行程序逻辑空间映射, 双缓存同步采集视频图像信息, 内存映射地址传递给已定义变量, 通过变量访问视频图像, 停止视频设备工作。

4 视频编码

原始连续视频信号耗费大量带宽资源, 庞大的视频数据量对于嵌入式系统来说很难保存或处理, 编码压缩方法可以有效解决这样的问题。编码压缩能大幅度降低编码容量, 减少带宽占用, 也更适合于嵌入式环境处理。在视频数据中存在大量冗余数据, 特别是在相邻帧之间存在很大的冗余信息和相关信息, 这是视频数据压缩的切入点。

无线视频采集系统把采集到的数字化视频信号进行MPEG-4格式压缩, 压缩后的数据文件从RT3070无线网卡发送到视频监控端, 其编码过程如下。

1) 编解码初始化: 利用函数av_register_all完成参数设置。

2) 参数设置: 利用函数parse_options检查参数符合性。

3) 数据编码: 利用函数avcodec_encode_video实现MPEG-4格式压缩编码。

4) 释放申请的内存空间, 关闭输入输出文件。

5 结 语

笔者设计一个基于ARM嵌入式微控制器的无线视频采集系统, 给出了详细的软硬件设计方案。硬件系统以S3C2440微控制器为核心, 依据应用需求和软件运行环境需求, 扩展了内部存储器、 数码摄像头、 无线网卡等硬件设备。视频数据采集采用V4L技术, 设计了视频数据采集流程, 并对关键实现环节进行了详细说明。通过FFMPEG库对视频数据进行编码压缩, 压缩后的视频数据便于存储保存和无线传输。通过无线传输网络设备把视频数据传输到视频监控端, 从而实现无线视频监控。无线视频监控系统具有集成化高、 便携性强、 功耗低等特点, 在实际运行中性能稳定, 图像流畅, 可应用于相关视频监控场合, 同时, 系统的设计方法和设计流程, 也为相关系统设计提供实用的方法和思路。

猜你喜欢

嵌入式内存无线
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
《无线互联科技》征稿词(2021)
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
“春夏秋冬”的内存
TS系列红外传感器在嵌入式控制系统中的应用
无线追踪3
基于ARM的无线WiFi插排的设计
一种PP型无线供电系统的分析
搭建基于Qt的嵌入式开发平台
内存搭配DDR4、DDR3L还是DDR3?