基于ARM11的无线视频监控系统

发布时间:2015-10-30 15:29    发布者:designapp
关键词: ARM11 , 视频监控
  摘 要:设计了一种基于ARM11+Linux 系统组成的无线视频监控系统。为提高运算速度,系统采用ARM11 微处理器S3C6410 作为主处理器,采用OV9650 摄像头作为图像采集设备,用硬编码方式对图像数据进行H264编码。接着通过WI-FI 无线网络和RTP 流媒体传输协议把已编码的数据传送到远端的服务器上显示。实现了运行稳定、速度快、成本低、体积小的无线视频监控平台,具有很大的实用价值。
  1 引言
  随着无线网络的普及,ARM 处理器运算的能力不断地增强以及计算机处理图像的技术不断地提高,基于ARM 的视频监控正越来越广泛的应用于学校,社区,酒店,网吧,医疗等各种各样地领域。传统的视频监控系统布线复杂,设备庞大,智能化低,以及软硬件资源得不到充分的发挥。而ARM 嵌入式系统的小型化、占用空间小、成本低廉、结构紧凑、支持无线网络等特点,使得利用S3C6410 的ARM11+linux系统构成各种各样的无线网络数字监控系统具有广泛的应用价值。
  2 系统整体设计
  2.1 硬件总体设计
  本系统采用韩国三星公司ARM11 内核的S3C6410 作为微处理器,该款处理器体积小,尺寸仅相当于一个48mm*67mm 方块的大小,同时集成了丰富的接口,32 位数据总线和32 位外部地址总线,SROM 控制器、 SRAM 控制器、NAND 闪存控制器、64 个中断源的中断控制器、五个三十二位定时器、四个UART、四个DMA 控制器、STN 与TFT LCD 控制器、看门狗、IIS 音频接口、IIC-Bus 接口、两个USB host口、一个USB device 口、两个串行外围接口电路、三个SD 卡接口、camera_if 接口、TV_out 接口、MFC接口、2 路SPI、Touch Screen 接口,其主频可达800MHz,扩展总线最大频率133MHz.在此基本上,还进行了相关的扩展,引出了一个四线RS-232 串口,该串口用于开发主机与S3C6410 开发平台进行通信;配置了1GB 的NANDflash,用于存放嵌入式linux操作系统,应用程序和数据,128MB 的DDR 内存,用于存放运行程序,摄像头捕获的数据;扩展了一个WIFI 模块,用于开发平台与服务器传输视频数据,通过无线网络实现视频远程监控。
  2.2 软件总体设计
  软件总体结构包括引导加载程序Bootloader、操作系统内核,设备驱动程序和应用层程序,其软件结构如图1 所示。
  


  图1 软件总体结构框图
  该系统上电后,先运行引导加载程序Bootloader,该程序的作用是初始化硬件设备、建立内存空间的映射表,引导和加载操作系统内核,然后启动嵌入式操作系统linux,接着加载Nand flash 驱动程序、LCD 驱动程序、WIFI 驱动程序等一些必要的驱动程序。
                               
                  3 视频数据采集和编码设计
  3.1 基于V4L2 视频数据采集设计
  在Linux 系统下,对视频设备的各种操作是通过Video4Linux2 实现的,简称V4L2.应用程序通过V4L2 提供的接口函数实现视频设备的操作。整个视频数据采集的过程如图2 所示。
  ( 1) 打开视频设备, int open( const char *pathname, int flags)。调用该函数,若返回值为-1,表示打开失败,否则,表示所打开设备的文件描述符。
  (2)取得设备信息。通过ioctl(cam_fp, VIDIOC_QUERYCAP, &cap)函数来取得设备文件的属性参数并存储于cap 结构中,其中cam_fp 指的是打开的视频设备的文件描述符。
  ( 3)选择视频输入方式。通过ioctl(cam_fp,VIDIOC_ S_INPUT, &chan)函数设置视频设备的输入方式,其中chan 的数据结构类型是v4l2_input,用来指定视频的输入方式。
  ( 4 ) 设置视频帧格式。通过ioctl(cam_fp ,VIDIOC_S _FMT, &fmt)函数设置视频的帧格式,其中fmt 的数据结构类型是v4l2_format,用来指定视频的宽度、高度、像素大小等。
  (5)读取视频数据。通过read(cam_fp, g_yuv,YUV_ SIZE)函数,把摄像头一帧的数据存放到g_yuv中,其中YUV_ SIZE 指的是每帧数据的大小。
  (6)关闭视频设备。通过close(cam_fp)函数来实现视频设备的关闭。
  


  图2 视频数据采集流程框图。
  3.2 视频数据的H264 编码
  为了提高视频数据编码速度,本系统采用的是H264 硬编码方式,硬编码具有不占用CPU 资源,运算速度快等优点,从而满足视频数据实时性的要求。
  具体编码的过程如图3 所示。
  (1)创建H264 编码结构。调用SsbSipH264EncodeInit (width, height, frame_rate, bitrate, gop_num)函数实现的,其中width 表示图像的宽度,height 表示图像的高度,frame_rate 表示帧频,bitrate 表示比特率或码率,gop_num 表示两个相离关键帧之间最多包含多少个帧(B 或P 帧)。
  (2)初始化H264 编码结构,调用SsbSipH264Encode Exe (handle)函数。
  (3)获取视频输入地址,SsbSipH264EncodeGetInBuf (handle, 0)函数来实现,该函数返回视频输入的首地址,存放在p_inbuf 中。
  (4)输入视频数据,调用memcpy(p_inbuf, yuv_buf, frame_size)函数实现,p_inbuf 存放需要编码的数据,yuv_buf 存放原始视频数据,frame_size 表示数据的大小。
  (5)编码视频数据,对p_inbuf 内容进行H264编码,调用SsbSipH264EncodeExe(handle)函数实现。
  (6)输出已编码的数据,SsbSipH264EncodeGetOutBuf (handle, size),该函数返回已编码图像的首地址,size 表示已编码图像的大小。
  (7)关闭硬编码设备,调用SsbSipH264EncodeDeInit (handle)函数实现的。
  


  图3 H264 编码流程框图。
  4 视频数据的传输和显示
  4.1 视频数据传输模块设计
  现代无线通信网络标准主要有3G(第三代移动通信),WI-FI,Bluetooth,Zigbee(紫蜂)等,具体详见表1.
  表1 常用无线通信网络标准的基本比较
  


  由于WI-FI 具有传输率高,支持的协议多,安装及设置简单,成本低等优点,所以本系统采用的无线网络标准是WI-FI.
                               
                  4.1.1 WI-FI 无线网络搭建过程
  (1)加载WI-FI 模块。通过insmod 命令加载,这里需要加载2 个文件helper_sd.bin、sd8686.bin,这2 个文件可以从Marvel 官方网站下载。
  (2)搜索WI-FI 网络。先用ifconfig eth1 up 命令把WI-FI 网络接口卡打开,然后用iwlist eth1 scanning命令搜索WIFI 网络。
  (3)设置eth1 的ip 地址和子网掩码。
  (4)设置ESSID.通过iwconfig eth1 essid 402命令实现的,ESSID 用来区分不同的网络。
  (5)设置密码。通过iwconfig eth1 key s:your_key命令实现的,其中your_key 就是登陆密码。
  4.1.2 基于RTP 协议的视频数据传输
  RTP 是实时传送协议( Real-time TransportProtocol)的缩写,代表一个网络传输的协议,为音频、视频上传中的常用协议[5].RTCP 和RTP 一起提供流量控制和拥塞控制服务,它们能以有效反馈和最小开销使传输效率最佳化,因而特别适合传送实时的数据,所以采用该协议传输视频数据。
  本系统采用开源代码Jrtplib 提供的RTP 协议栈,由于Jrtplib 对RFC3550 的实现进行了封装,使得传输视频数据更加简单。由于本系统的网络最大有效载荷为1500 字节,因此设置RTP 包大小的上限为1400 字节,如果发送的数据大于1400 字节,则采用拆包的方法再发送,具体传输过程如图4 和图5 所示。
  


  图4 发送端流程框图。
  


  图5 接收端流程框图。
  发送端主要过程如下:
  (1)创建RTP 会话并设置目标地址。调用Create方法得到RTP 会话实例,然后调用AddDestination 方法设置目标IP 以及目标端口号。
  (2)获得数据,调用Get_Data()函数得到。
  (3)发送数据,通过SendPacket()方法实现。
  接收端主要过程如下:
  (1)创建RTP 会话。调用Create 方法来创建一个会话实例,并且在创建会话的同时设置端口号,要与发送端的端口号保持一致。
  (2)接受RTP 数据。调用RTPSession 类的PollData()方法接收数据。
  (3)保存RTP 数据报。通过创建了一个指针数组,里面存放的是RTP 数据报的指针,只要将刚接收到RTP 数据报的指针赋给这个指针数组即可,这样可以节省数据拷贝的时间。
  (4)判断是否接收完成,如果没有,则跳转到第b 步,否则接收端程序退出。
                               
               
本文地址:https://www.eechina.com/thread-155175-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表