ARM的视频安全监控终端的设计与实现

视频监控系统在工业、军事、民用领域有着广泛的应用,为这些行业的安全防范和环境监控起到了不可忽视的作用。视频监控系统正逐步由模拟化走向数字化,随着半导体技术的飞速发展和多媒体视频编解码技术的日益成熟,高性能、复杂的视频流压缩算法在嵌入式系统中的应用成为了现实。如今监控系统多采用专用处理器或risc嵌入式处理器与dsp相结合的方法实现,本文探讨的是用arm处理器与软件压缩相结合的办法实现。 视频监控系统总体设计
首先需要对系统进行总体规划,将系统划分成几个功能模块,确定各个模块的实现方法。整个视频监控系统采用c/s结构,从主体上分为两部分:服务器端和客户端。服务器端主要包括s3c2410平台上运行的采集、压缩、传输程序,客户端是pc机上运行的接收、解压、回放程序。视频监控终端从现场的摄像头捕获实时的视频信息,压缩之后通过以太网传输到视频监控服务器上。
如系统结构图(图1)所示,视频图像采集和打包发送在服务器端完成,图像的接收解包和回放将在客户端完成。
系统的硬件设计
系统采用模块化设计方案,主要包括以下几个模块:主控制器模块、储存电路模块、外围接口电路模块、电源和复位电路,如图2所示。
s3c2410主控器模块
主控器模块是整个系统的核心,采用的s3c2410处理器是samsung公司基于arm920t处理器核的16/32位微控制器,该处理器最高运行频率可达到203mhz,它的低功耗、精简和全静态设计特别适合于对成本和功耗敏感的应用。s3c2410提供了丰富的片内资源,支持linux,是本系统的合适选择。它能完成整个系统的调度工作,在系统上电时配置所有需工作的芯片的功能寄存器,完成视频流的编码,并通过以太网控制器控制物理层芯片发送视频码流。
系统存储电路模块
主控器还需一些外围存储单元如nand flash,和sdram。nand flash 中包含linux 的bootloader、系统内核、文件系统、应用程序以及环境变量和系统配置文件等;sdram读写速度快,系统运行时把它作为内存单元使用。设计采用了64m的nand flash和64m的sdram。
外围电路模块
本设计用到的外设有usb接口,网卡接口,rs232接口和jtag接口。
视频监控终端的usb主控制器模块通过专用的usb集线器与多个usb摄像头相连。在实时监控状态下,各个摄像头上捕获的图像数据通过usb集线器传输到视频监控终端的usb主控制器模块上,然后再由usb主控制器模块交由s3c2410处理器集中处理。s3c2410对采集到的图像进行实时编码压缩,编码之后的码流直接传输到发送缓冲区中,等候发送。
本设计采用cs8900a扩展网络接口,它是cirrus logic公司生产的16位以太网控制器,通过内部寄存器的设置来适应不同的应用环境。s3c2410通过地址、数据、控制线以及片选信号线对cs8900a网络芯片进行控制和通信。cs8900a与s3c2410的连接如图3所示,cs8900a由s3c2410的ngcs3信号选通,cs8900a的intrq0端用来产生中断信号,与s3c2410的16位数据总线相连,地址线使用了a[24:0]。
cs8900a以太网控制芯片通过dma通道进行数据的传输。首先设置好传输控制和传输地址寄存器的参数,依次从指定的数据存储区域读取数据,送入内部发送缓冲器中,用mac对数据进行封装发送。一组数据发送完后,请求dma中断,由s3c2410进行处理。
rs-232接口与pc机串行总线相连,通过pc机对嵌入式系统进行相关信息显示和控制。而jtag接口主要是对系统进行调试,还可将程序烧写到flash中。
系统的软件设计
视频监控终端的软件设计主要完成两方面的工作:
(1)在硬件上搭建一个软件平台,搭建嵌入式linux软件开发平台需要完成uboot移植、嵌入式linux操作系统内核移植以及嵌入式linux操作系统的设备驱动程序的开发等工作。
(2)在软件平台的基础上,开发系统的应用程序。借助交叉编译工具,开发视频监控终端上运行的采集、压缩、传输程序。
构建基于s3c2410的linux平台
linux具有许多优点,如开放源码;功能强大的内核,支持多用户、多线程、多进程、实时性好、功能强大稳定;大小功能可定制;支持多种体系结构。
构建嵌入式linux开发平台需要先构建交叉编译环境,如图4所示。一套完整的交叉编译环境包括主机和目标机。在开发中主机是一台装有红帽公司的fedorecore 2操作系统的pc机,目标机是基于s3c2410的视频监控终端。选用的交叉编译器是gcc3.3.4 for arm版,嵌入式linux内核源代码包版本号为2.6.8rc。
2.6.8rc版的linux内核源代码包中包含了所有的功能模块。系统中只用到了其中的一部分。因此,编译内核之前首先要配置内核,裁减掉冗余的功能模块,经过定制的内核才符合系统设计。具体步骤如下:
(1)键入命令make menuconfig,对内核进行配置,选择yaffs文件系统,支持nfs启动,系统使用的是usb接口的摄像头,故要启用usb设备支持模块,包括usb设备文件支持模块、usb主控制器驱动模块等。此外,usb摄像头属于视频设备,为了使应用程序能够访问它,还需要启用video4linux模块。
(2)用make dep命令生成内核程序间依赖关系。
(3)make zimage命令生成内核映像文件。
(4)make modules和make modules_install命令生成系统可加载模块。
这样就生成了zimage内核映像文件,把它下载到目标平台的flash中。
本设计采用usb外置摄像头,在内核配置时要求以模块形式加载。首先要完成驱动程序,驱动中需要提供基本的i/o操作接口函数open、read、write、close的实现,对中断的处理实现,内存映射功能以及对i/o通道的控制接口函数ioctl等,并把他们定义在struct file_operations中。这样当应用程序对设备文件进行诸如open、close、read、write等,系统调用操作时,嵌入式linux内核将通过file_operations结构访问驱动程序提供的函数。接着把usb驱动程序编译成可以动态加载的模块,这样摄像头就可正常工作了。
视频监控终端软件的设计
视频监控终端软件按功能分为三部分:视频采集、压缩、传输。这个软件的开发都是基于先前配置好的嵌入式内核。
(1)视频采集部分
使用video4linux接口函数访问usb摄像头设备,捕获实时的视频流。首先完成v4l_struct数据结构的定义,如设备基本信息,图像属性,各个信号源属性等;采集模块一方面通过usb集线器采集usb摄像头中的图像,另一方面启动多个采集线程,分别在不同的端口上监听,一旦有请求连接,采集线程立即从设备缓冲区中把视频流数据读出,放入到视频处理缓冲区中进行下一步的处理。
(2)视频数据的压缩部分
在视频监控系统中,大量的数据需要通过网络传输,为了保证传输质量和传输实时性,就需要在传输之前进行编码压缩以减少数据量,本文采用mpeg-4编码标准进行数据压缩。在网络上可以下载到开源的xvidcore软件作为视频压缩的核心算法,xvidcore是一个高效的、移植性很强的多媒体编码软件,将它在pc机上进行交叉编译,生成的文件拷贝到目标系统下。
(3) 视频数据传输部分
传输模块的作用在于把压缩之后的视频流传送到远程的pc机客户上,视频流数据的传输是基于tcp/ip协议。视频传输采用了标准的rtp传输协议。rtp是目前解决流媒体实时传输问题的最好办法,在linux平台上进行实时流媒体编程,需要使用一些开放源代码的rtp库,如librtp、jrtplib等。定义一种较为简单的握手协议:pc机端的采集程序不停地发请求数据包到采集终端,采集终端把已经捕获的图像打包返回给主机。每个rtp信息包被封装在udp消息段中,然后再封装在ip数据包中发送出去。接收方自动组装接收到的数据帧,还原成视频数据。
本文介绍了一种基于arm的视频监控系统的设计方案,采用软压缩算法,讨论了系统的硬件和软件设计。本系统和市场上其它视频监控系统相比,开发周期短,价格低廉,适用于对视频图像要求不太高的场合

为什么设计区块链项目需要关心道德规范
智慧路灯杆在水库区安全监测的应用
亚马逊将启动电子病历数据挖掘项目
民营100强企业的多媒体展馆,数字展厅用到的全息展柜、大屏展览展示机器人
第七代iPod nano拆解:配备了五款神秘的苹果芯片
ARM的视频安全监控终端的设计与实现
蓝牙组网智能风扇灯方案简介
关于宽带功放数字预失真测试方案的分析和应用
云网融合推动5G终端应用创新,推进生态合作共促产业链繁荣
苹果M1 Mac mini单核基准测试快于所有英特尔Mac
1190个项目!持续30年投入!这把卡中国脖子的武器,美国是这样锻造的!
功率器件AEC-Q101如何选择测试项目?认证准备及流程有哪些?
Mouser备货 Murata微型ZPA系列电容式MEMS压力传感器
运算放大器的常用电路图及其工作原理
浅析35kV变电站综合自动化的改造方案
波峰焊工艺的注意事项有哪些
圣泉历时26年研发光刻胶实现国产 打破国外垄断
digilent Cora Z7-07S: Zynq-7000 概述
小米Note2开箱图赏: 精诚之作,美的无可挑剔
空气负氧离子监测系统介绍