当前位置:首页 > 电源 > 数字电源
[导读]引言  目前视频监控系统已广泛应用于各领域,数字化和网络化已成为视频监控系统的发展方向。本设计采用OMAP5912 处理器[1]设计和实现了基于B/S模式的远程视频监控系统,不仅解决了传统模拟视频监控系统的弊端,而且

引言

  目前视频监控系统已广泛应用于各领域,数字化和网络化已成为视频监控系统的发展方向。本设计采用OMAP5912 处理器[1]设计和实现了基于B/S模式的远程视频监控系统,不仅解决了传统模拟视频监控系统的弊端,而且弥补了单核处理器在视频编码方面的不足。

  OMAP5912是由ARM926EJ-S MPU内核和TMS320C55x DSP内核组成的双核处理器, ARM926 可满足控制和接口方面的处理需要,而且支持广泛的操作系统,而C55x 系列DSP可提供对低功耗应用的实时多媒体处理的支持。因此,将OMAP5912用于视频监控系统中时,可以利用ARM核实现人机接口、控制和通讯,利用DSP核实现视频编码,从而可以组成一个高速、清晰、低功耗、具有良好人机交互的视频监控系统。

  系统总体结构

  系统总体结构框图如图1所示。系统以OMAP5912电路板和摄像头为硬件,以Montavist Linux操作系统,摄像头驱动程序、H.264编码器、网络通信程序为软件,以带IE浏览器的PC机为监控端。在服务器端OMAP5912的ARM核通过驱动程序启动摄像头进行视频采集,利用DSP/BIOS Bridge将获得的视频传送给DSP核,DSP核利用优化后的H.264编码器对视频编码,然后将编码后的视频回送给ARM核,ARM核通过网络通信程序与监控端进行数据交换。用户监控端对视频解码并播放视频,同时可以通过IE浏览器对摄像头进行控制及参数设置。


  系统硬件设计

  系统硬件设计即为OMAP5912电路板的设计,设计中,电源管理芯片采用TPS65010;DDR采用K4X56163PE芯片;NOR FLASH采用两MT28F128J3FS-12芯片;音频CODEC芯片采用TLV320AIC23;以太网接口芯片采用LAN91C96;另外还设计有USB接口、UART接口、音频输入输出接口、JATG/Multi-ICE仿真调试接口及四个扩展接口。OMAP5912 电路板原理框图如图2所示。


图2  OMAP5912电路板原理框图

  系统软件设计

  系统实现的功能是采集视频并进行远程传输,软件部分设计主要包括软件平台的构建、摄像头驱动程序的实现、视频采集和视频编码的实现、嵌入式WEB服务器的构建、视频网络传输的实现。

  1)开发平台的建立

  在应用程序开发前,首先需要在OMAP5912电路板中建立起软件平台,主要步骤如下:

  (1)在PC机中安装MontaVista Linux嵌入式操作系统。
  (2)移植u_boot到目标板中
  (3)Linux内核配置并增加如下两个模块:
  ①Multimedia devices→<*>Video For Linux→[*]V4L information in proc filesystem;
  ②USB Support→USB Multimedia devices→<*>USB OV511 Camera support;
  修改一些参数,其中最重要的是修改Makefile文件:
  ARCH:= OMAP
  CROSS_COMPILE=arm_v4t_le-
  最后执行如下命令生成内核镜像文件:
  #make dep #创建内核依赖关系
  #make clean #清除中间文件
  #make uImage  #创建内核镜像文件(4)使用tftp方式下载内核镜像文件[!--empirenews.page--]

 (5)挂载根文件系统
  在应用程序的开发过程中,一般通过网络以N FS方式来挂载在L inux主机上的文件系统, 这样就不必要每次有改动都要重新烧写文件系统的镜像文件。它的实现基于对主机进行相应的配置并启动N FS 服务, 向Linux 主机的/etc/exports文件添加下列一行:
  /home/luowei/montavista/filesys *(rw,no_root_squash,no_all_squash,sync)
  并运行下列命令使得设置生效:
  #exportfs –a
  #service nfs restart
  说明:/home/luowei/montavista/filesys为本人宿主机上的根文件系统,可以根据实际情况修改。
  (6)系统测试
  在/home/luowei/montavista/filesys/home建立一个hello.c文件,并使用如下命令编译成目标板可执行文件hello:
  /opt/montavista/previewkit/arm/v4t_le/bin/arm_v4t_le-gcc –o hello hello.c
  进入目标板上相同目录并执行./hello,若能正确运行,表明系统搭建成功。
  2)视频采集和编码
  (1)摄像头驱动程序设计
  驱动程序的作用在于把设备映射为一个特殊的设备文件, 用户程序可以像对其它文件一样对此设备文件进行操作[2]。系统的摄像头驱动程序包括摄像头打开模块Camera_Open()、摄像头控制模块(包括中断请求,摄像头初始化、启动、摄像头寄存器设置、DMA请求及启动)和摄像头关闭模块Camera_Release()。然后将驱动程序定义在struct file_operations中,供内核Video4Linux的API函数调用。考虑到Linux自带OV511的驱动程序,设计采用OV511芯片的网眼摄像头OV3000。
  (2)视频采集
  设计使用Video4Linux模块[5]提供的API函数进行视频采集,主要函数包括:
  ①dev?=?open(Camera_Open?,O_?RDWR);打开视频捕获设备。
  ②ioctl?(dev?,?VIDIOCGCAP?,?&vid_
  caps)?获取该视频设备的相关性能。
  ③ioctl?(dev?,?VIDIOCGCHAN?,?&vid_
  chnl);获取摄像头通道的相关参数。
  ④ioctl?(dev?,?VIDIOCGFBUF?,?&vid_
  buf)?;获取帧缓冲的属性。
  ⑤ioctl?(dev?,?VIDIOCGPICT?,?&vid_pi);获取图片采集的设置。
  ⑥ioctl?(dev?,?VIDIOCSPICT?,?&vid_pic);设置图片采集的相关参数,包括颜色深度、调色板类型、亮度、对比度等。
  ⑦ioctl?(dev?,?VIDIOCSWIN?,?&vid_win);设置图像采集的视区参数。
  ⑧fwrite?(m_buf?,1?,230400?,p)?;采集的数据存入。
  ⑨ioctl?(?dev?,?VIDIOCMCAPTURE?,?
  &vid_mmap);开始俘获一帧。
  设计中使用内存映射mmap()[3]方式截取视频帧,即先使用ioctl()函数获得摄像头存储缓冲区的帧信息,之后修改video_mmap中的设置,接着使用mmap()把摄像头对应设备文件映射到内存区,完成视频采集。
 (3)视频编码
  设计采用OMAP5912的DSP核进行视频编码,能充分发挥OMAP5912的双核优势。在编码器的选择上,考虑到H.264和以前的视频编码标准(如H.263和MPEG-4)相比,在压缩性能上有较大的提高,本设计选择适合嵌入式系统的x264-20060612版本H.264编码器。考虑到监控视频场景的特点,选择如下编码方案:
  ①H.264的baseline,不采用B帧编码和CABAC;
  ②搜索范围选取16;
  ③量化参数选取32;
  ④1/2像素插值;
  ⑤只使用1个参考帧;
  ⑥编码P帧宏块的时只采用16×16,16×8,8×16,8×8,Intra16×16五种模式。
  H.264编码器经过一系列优化后即可用于本系统,其工作流程如图3所示。


[!--empirenews.page--]

 3)视频网络传输
  考虑到B/S模式拓展性好、维护和升级容易、安全度较高等优点,系统采用B/S模式。用户只需要在远程客户机的网页地址栏内输入服务器的IP地址,通过浏览器就能实时查看现场视频画面。
  系统网络通信程序的设计包括服务端和监控端的设计,其中监控端采用通用的IE浏览器即可,主要是服务器部分的设计,包括构建WEB服务器[4](主要涉及BOA Web Server的移植及配置, CGI脚本的创建)、C语言实现CGI(通用网关接口)、实现嵌入式数据库和制作简单网页等。其中,CGI为WEB服务器和应用程序的接口,如通过CGI程序对远程设备的进行参数设置;采用嵌入式数据库MSQL用于存取系统的重要信息,如用户的帐号、密码,摄像头参数等。采用B/S模式后,服务器和监控端的通信程序结构图如图4所示。

图4 服务器和监控端的通信程序结构图

嵌入式WEB服务器部分程序如下。
  //创建TCP套接字连接TCP网络
  if((sock_fd=socket(AF_INET,SOCK_STREAM,0))==-1)
  {
  perror("sock_fd error");
  exit(1);
  }
  setsockopt(sock_fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));
  //为套接字分配HTTP协议地址
  my_addr.sin_family=AF_INET;
  ddr.sin_port=htons(80);
  my_addr.sin_addr.s_addr=htons(INADDR_ANY);
  if(bind(sock_fd,(struct sockaddr*)&my_addr,sizeof(their_addr))==-1)
  {
  perror("bind errorn");
  exit(1);
  }
  ……
  if(!fork())
  {
  recv(new_fd,http_rec,2048,0);//接收用户端控制命令
  //捕捉图像
  image=videograb(320,240,brightness,contrast,colour,hue);
  ……
  }
  系统充分发挥了OMAP5912的双核优势,实现了视频实时采集、存储、编码及网络传输。视频监控用户界面效果图如图5所示。


结语

  设计和实现了基于OMAP5912的远程视频监控系统,系统充分发挥了OMAP5912的双核优势,实现了服务器端进行视频的实时采集、存储、编码及网络传输,而监控端的PC机可以通过IE浏览器查看监测点的视频,也可以设置视频的分辨率、亮度、对比度等参数。经实际运行表明,系统运行稳定,视频流畅,能够满足远程视频监控的要求。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

我们知道 Flash 读时序里有五大子序列 CMD + ADDR + MODE + DUMMY + READ,前面的文章中痞子衡讲过《串行NOR Flash的Continuous read模式》,Continuous r...

关键字: CMD ADDR Flash

摘 要:从硬件与软件方面介绍了基于PXI技术的1553B总线通讯模块的设计,并对PXI总线接口设计、驱动程序的开发、 SDRAM存储器的控制和1553B总线通信协议实现等关键技术进行了详细的阐述,为航空领域测控系统开发P...

关键字: PXI技术 驱动程序 SDRAM存储器 1553B总线

PnP全称Plug-and-Play,译文为即插即用。PnP的作用是自动配置低层计算机中的板卡和其他设备,然后告诉对应设备都做了什么。PnP的任务是把物理设备和软件设备驱动程序相配合,并操作设备,在每个设备和它的驱动程序...

关键字: PnP 驱动程序 操作设备

在掌握了基于TCP的套接字通信流程之后,为了方便使用,提高编码效率,可以对通信操作进行封装,本着有浅入深的原则,先基于C语言进行面向过程的函数封装,然后再基于C进行面向对象的类封装。1.基于C语言的封装基于TCP的套接字...

关键字: 封装 通信 ADDR SOCKET

1.单线程/进程在TCP通信过程中,服务器端启动之后可以同时和多个客户端建立连接,并进行网络通信,但是在介绍TCP通信流程的时候,提供的服务器代码却不能完成这样的需求,先简单的看一下之前的服务器代码的处理思路,再来分析代...

关键字: ADDR INCLUDE 代码 TCP

作 者:道哥,10年嵌入式开发老兵,专注于:C/C、嵌入式、Linux。关注下方公众号,回复【书籍】,获取Linux、嵌入式领域经典书籍;回复【PDF】,获取所有原创文章(PDF格式)。目录kill命令和信号使用kill...

关键字: 信号 应用程序 驱动程序

驱动程序本质上是软件代码,主要作用是计算机系统与硬件设备之间完成数据传送的功能,只有借助驱动程序,两者才能通信并完成特定的功能。

关键字: 驱动程序 硬件设备 UNIX

驱动程序(Device Driver)全称为“设备驱动程序”,是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只能通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常...

关键字: 驱动程序 声卡 设备

作 者:道哥,10年嵌入式开发老兵,专注于:C/C、嵌入式、Linux。关注下方公众号,回复【书籍】,获取Linux、嵌入式领域经典书籍;回复【PDF】,获取所有原创文章(PDF格式)。目录API函数编写驱动程序编写应用...

关键字: 编写 驱动程序 字符设备驱动

作 者:道哥,10年嵌入式开发老兵,专注于:C/C、嵌入式、Linux。关注下方公众号,回复【书籍】,获取Linux、嵌入式领域经典书籍;回复【PDF】,获取所有原创文章(PDF格式)。目录示例程序目标编写驱动程序编写应...

关键字: GPIO 编写 驱动程序

数字电源

15504 篇文章

关注

发布文章

编辑精选

技术子站

关闭