Linux和Android手机终端的WiFi视频监控系统
eeskill 2020-11-19

引言

近年来,随着嵌入式技术、无线通信技术和多媒体技术的快速发展,视频监控正在向着数字化、网络化、无线化方向发展[1]。由于嵌入式系统具有集成度高、功耗低、体积小等优点,再结合无线网络组网灵活、可扩展性好的优势,无线视频监控与有线视频监控系统相比,体现出了无法比拟的优越性[2]。本系统利用USB摄像头采集数据。由于S3C6410处理器内置了(高性能多媒体处理器)硬件编解码模块MFC(MultiFormat Codec),其将采集到的图像数据压缩为高效的H.264编码格式,在S3C6410处理器的控制下通过WiFi发送至无线网络,这样用户可随时随地通过Android手机客户端实现实时的视频监控。

1 系统总体设计

本设计采用服务器/客户端的架构,服务器以S3C6410开发板为控制板,以Android手机为客户端,服务器和客户端通过WiFi进行通信。服务器由嵌入式硬件平台、嵌入式操作系统和应用程序组成。硬件部分由S3C6410主控制板、USB摄像头、WiFi组成;操作系统由s3cLinux2.6.23内核、YAFFS文件系统、摄像头驱动程序、MFC驱动程序、网卡驱动程序组成;应用程序由视频采集、视频压缩编码和数据发送程序等组成。采用WiFi无线网络作为传输媒介,通过无线网卡接入到接入点AP。客户端为Android手机,利用Android提供的各种API函数来实现功能要求[3]。USB摄像头采集视频数据,经过内置的DSP芯片处理将其转化为YUV格式的图像,再通过USB接口传送到主控制板上。主控制板通过内置的MFC模块将YUV格式图像压缩为H.264编码格式,并对视频数据进行处理、存储,然后利用WiFi将其发送至无线网络。Android手机客户端,通过客户端软件可以实时读取视频流。服务器和客户端都采用宿主机和目标机的交叉开发模式[4]。

本文的研究分以下几步进行:

① 系统环境的搭建,包括Bootloader、内核、根文件系统的移植;

② USB摄像头驱动程序、MFC驱动程序、网卡驱动程序的移植;

③ V4L2的视频采集和H.264的视频压缩编码;

④ RPT协议的数据传送;

⑤ Android手机客户端的数据接收和界面显示。

2 系统基本网络拓扑

WiFi是一种成本低、传输速率较高、可靠性高、组网灵活、扩展性强的短距离无线通信技术。WiFi有两种基本工作模式,Ad hoc自组网络模式和Infrastrcucture组网模式。本系统采用有线和无线相结合的开发模式,WiFi采用Infrastrcucture模式组网,以无线路由作为接入点AP。服务器通过无线网卡与接入点AP相连,接入点AP通过有线链路与IP网络连接,接入到互联网。AP将无线链路和有线链路连接起来,组网方案如图1所示。视频流通过无线链路发送到接入点AP,这样Android手机端可以通过3G或WiFi网络实现远程的实时视频监控。

3 系统硬件设计

硬件系统主要由S3C6410微控制器及其外围电路、USB摄像头、USB无线网卡、Android手机等组成。考虑到视频数据的存储选用1 TB的移动硬盘作为存储介质,硬件组成框图如图2所示。

3.1 S3C6410微控制器及其外围电路

S3C6410是一款以ARM1176为处理器核,低功耗、高性价比的RSIC微处理器,提供了存储控制器、USB控制接口以及丰富的外设接口,内置了多格式编解码器MFC。NAND Flash用于存储系统程序,SDRAM则用于存储系统运行时的程序,JATG接口用于烧写程序,RS232接口用于与PC机进行交互[5]。

3.2 摄像头

由于MFC只能从YUV数据转化为H.264格式,所以摄像头采用输出格式为YUV的USB摄像头。此类USB摄像头由图像传感器芯片和DSP芯片两部分组成。景物的光学图像照射在图像传感器上,产生电信号,经A/D转换器转化为数字信号,经DSP芯片处理加工生成YUV格式的图像,通过USB传送至主控制板。

3.3 无线网卡

本系统采用USB接口的TPLink TLWN322G WiFi无线网卡,传输速率为54 Mbps。较高的传输速率足以满足视频信息的传输要求,覆盖范围室内最远100 m,室外最远300 m。在微控制器的控制下,将其连接到无线路由,无线路由与互联网连接。

3.4 Android手机客户端

Android是以Linux为内核的手机操作系统,由于其源代码的开放性和丰富的硬件选择,促进了Android应用的快速发展[6]。基于Linux的Android手机可以与各种嵌入式Linux系统进行通信,手机Android成为视频监控系统的主流[7]。

4 系统软件设计

服务器端视频采集与编码分为硬件部分和软件部分。硬件部分负责视频数据的采集、编码;软件部分负责基本系统环境的建立、视频流的获取及发送。客户端软件部分负责视频数据的获取、解码及显示。

4.1 系统环境和驱动程序的移植

本系统采用Bootloader引导系统、s3cLinux2.6.23内核、YAFFS文件系统来构建嵌入式系统环境。Linux操作系统可根据硬件需求进行软件裁减,构建合适的软件环境。

首先,执行make menuconfig,选择Multimedia support下的选项支持UVC摄像头,在USB support、HID Devices、SCSI device support中添加对USB总线驱动的支持,选择USB support、HID Devices、SCSI device support下的选项支持MFC驱动。然后,执行make uImage,编译生成内核。

4.2 V4L2视频采集程序的设计

视频采集程序采用V4L2视频驱动标准,基本流程是:打开视频设备→设置格式→处理数据→关闭设备。通过Linux系统提供的open、ioctl函数来访问视频设备。Linux设备用文件表示,视频设备在/dev/video目录下,可以像普通文件一样去读写。采集到的图像信息是YUV420格式的,MFC可以直接对其进行压缩。具体步骤如下:

① 调用函数open(“/dev/video0”,O_RDWR|O_NOBLOCK,0),以可读可写、非阻塞的方式打开视频设备。

② 设定视频设备属性,调用ioctl(fd,VIDIOC_S_FMT,&fmt)设置视频格式,ioctl(fd,VIDIOC_REQBUFS,&req)分配内存空间,mmap(NULL,buf.length,PROT_READ|PROT_WRITE,MAP_SHARED,fd,buf.m.offset)将物理地址转化为内核地址。

③ 程序采用双缓存的机制来采集数据,ioctl(fd,VIDIOC_DQBUF,&buf)将缓冲中的数据发送出去。与此同时,ioctl(fd,VIDIOC_DQBUF,&buf)采集一段数据放到另一个缓存中。此方法可以提高程序执行的效率。

④ 调用close(fd)来关闭视频设备。

4.3 H.264视频压缩程序的设计

USB采集的视频流数据量非常大,若直接传输会增加系统负担,难以满足实时性要求。在嵌入式系统中大多采用H.264编码,与其他压缩标准相比,其压缩比高、误码率低、视频质量高、容错能力强,特别适合于网络传输[8]。本设计利用MFC硬件模块将YUV数据转化为H.264视频流,降低了数据流量和网络带宽的占用,最大限度地提高了压缩比和传输速度[9]。H.264视频压缩具体步骤如下:

① 调用open(MFC_DEV_NAME,O_RDWRW|O_NDELAY)打开MFC设备;

② 映射空间mmap(0,BUF_SIZE,PROT_RERD|PROT_WRITE,MAP_SHARED,mfc_fd,0);

③ 配置编码格式ioctl(mfc_fd,LOCTL_MFC_H264_ENC_INIT,&enc_init);

④ 获取输入输出缓冲区ioctl(mfc_fd,LOCTL_MFC_H264_ENC_INIT,&get_buf_addr);

⑤ 进行H.264编码ioctl(mfc_fd,LOCTL_MFC_H264_ENC_EXE,&enc_exe)。

4.4 视频传输程序的设计

由于TCP的三次握手连接和错误重传机制,系统开销较大,不能满足视频数据的实时传输。本设计采用无连接的UDP协议进行视频数据的传输,但是无法保证数据的完整性。为了保证视频流的实时性和同步性,针对UDP的不足,采用RTP通信方式,RTP建立在UDP之上,将数据封装后使用UDP协议进行数据传输。由于本设计基于Linux系统,所以RTP程序采用现成的C语言oRTP库进行开发。RTP的关键步骤如下:

① 调用orpt_inin()、ortp_scheduler_init()完成oRTP库的基本初始化;

② rtp_session_new()创建rtp对象,接着设置rpt对象的客户端IP和监听端口;

③ 发送数据时调用 rtp_session_send_with_ts()库函数;

④ 发送完毕后调用rtp_session_destroy(); 销毁RPT对象,ortp_exit()关闭oRTP库资源。

4.5 Android手机客户端

Android客户端采用分层的设计思想,各模块之间相互独立工作,降低了系统的复杂程度。整体结构从下到上分别为视频数据获取、视频数据的解码、视频数据的显示以及用户界面4个功能。首先,客户端通过3G或WiFi网络从服务器端进行验证请求,请求信息包括用户名、密码、IP地址和端口号;验证通过后,接收服务器端发送的视频数据,并将其放到视频缓冲区中。然后将经过H.264和RTP编码过的视频数据去除包头信息,对无序的数据进行组帧,再对其进行解码。最后,将视频数据在用户界面上播放。结构模块图如图3所示。

5 系统运行效果测试

测试分两种方式进行,一种在小米2S手机上,另一种在Nexus 7平板电脑上。在登录界面上输入设备名称、地址、端口号、用户名和密码,分别用3G网络和WiFi网络来访问服务器。选取3个不同的地点进行了12次测试,每次测试1 min,统计客户端接收到的帧数。测试结果表明,客户端不受地点的限制,每秒能接收约12帧,视频数据流畅,没有出现失帧现象。

测试结果如表1所列。测试效果如图4所示。

结语

本系统实现了一种基于嵌入式Linux操作系统和Android手机终端的远程视频监控系统。利用3G或WiFi进行数据通信,用户能够随时随地地监控。与传统的监控系统相比,增强了整个系统的灵活性。由于Linux的可移植性强,客户端还可移植到Android系统的平板电脑上,用户通过WiFi接入到互联网,即可实现视频监控。在后续的研究中,可在此基础上,服务器端增加了多摄像头监控、视频数据的存储,客户端增加图像处理、云台控制、视屏回放等功能。随着嵌入式技术和3G/4G移动通信技术的不断成熟,基于Android手机的视频监控系统将具有良好的应用前景。

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
热门推荐
  • 相关技术文库
  • 单片机
  • 嵌入式
  • MCU
  • STM
  • 为什么有些CPU的主频更低,但运算效率却更高呢?

    为什么有些CPU的主频更低,但运算效率却更高呢? 比如:51单片机30M主频,STM32单片机20M主频,执行相同一段代码可能主频更低的STM32所花的时间更短。 这里就牵涉到CPU流水线的问题,本文围绕CPU流水线描述相关内容。 一、早期CPU流水线 1.流水线来源 流水线

    10-19
  • 究竟是什么让很多单片机的工作电压是5V?

    5V来自于TTL电平,5呢为True,0即为False,之后用了压降更低的PN节,衍生出了3.3这个电平。 12V和24V来自于汽车电瓶,早年乘用车又12V和24V两个系统,现在一般小型车12V,商用车24V,再究其由来应该是铅酸电池。 所以3v3和5v一般出现在信号电路或者单片机等vc

    10-19
  • 没想到,CRC校验原来这么简单

    由于公众号申请的时间比较晚,所以没有留言互动功能,最近公众号上线了读者讨论功能,和留言差不多,对本篇文章有什么感想的都可以到文章末尾留言评论。 目录 前言 CRC算法简介 CRC计算 CRC校验 CRC计算的C语言实现 CRC计算工具 总结 前言 最近的工作中,要实

    11-09
  • 解决串口传输“阻塞”问题的方案

    本文在探讨传统数据收发不足之后,介绍如何使用带FIFO的串口来减少接收中断次数,通过一种自定义通讯协议格式,给出帧打包方法;之后介绍一种特殊的串口数据发送方法,可在避免使用串口发送中断的情况下,提高系统的响应速度。 1.简介 串口由于使用简单,价格

    09-17
  • 嵌入式 Linux 的一切,看这一篇就够了!

    嵌入式Linux是什么 嵌入式Linux跟桌面Linux一样,是一个操作系统。从单片机走过来的童鞋往往习惯于直接控制寄存器,事必躬亲,从零开始实现想要的功能。而在嵌入式Linux的世界里,我们首先要抛弃这个思想,应把它作为最后没办法的办法。 就像我们想要在window

    09-11
  • 单片机高阻态与P0口上拉电阻讲解

    51单片机的时候对P0口必须加上上拉电阻,否则P0就是高阻态,对这个问题可能感到疑惑,为什么是高阻态?加上拉电阻?今天针对这一概念进行简单讲解。 在一个系统中或在一个整体中,我们往往定义了一些参考点,就像我们常常说的海平面,在单片中也是如此,我们

    09-01
  • 技术原理解读:小波变换

    记得我还在大四的时候,在申请出国和保研中犹豫了好一阵,骨子里的保守最后让我选择了先保研。当然后来也退学了,不过这是后话。当时保研就要找老板,实验室,自己运气还不错,进了一个在本校很牛逼的实验室干活路。我们实验室主要是搞图像的,实力在全国也是

    09-01
  • 数控加工刀具及工具系统:数控加工刀具

    点击蓝字关注我们 一、数控加工对刀具的要求 稳定可靠的切削性能, 很高的耐用度, 可靠的卷屑、 断屑和排屑能力, 高的加工精度和重复定位精度, 能实现刀具尺寸的预调、 快速换刀和自动换刀。 二、数控加工刀具的构成和分类  数控加工刀具一般应包括通用刀

    08-27
  • 螺纹刀具:丝锥和板牙

    一、丝锥 1.普通丝锥的结构 丝锥是加工内螺纹并能直接获得螺纹尺寸的标准螺纹刀具,它的基本结构是一个有轴向槽的外螺纹。  2.螺旋丝锥  螺旋丝锥可控制排屑方向: 加工通孔右旋螺纹用左旋槽丝锥,使切屑从孔底排出。 加工盲孔右旋螺纹用右旋槽丝锥,使切屑

    09-09
  • 单片机系统抗干扰,软件 VS 硬件哪个重要?

    在提高硬件系统抗干扰能力的同时,软件抗干扰以其设计灵活、节省硬件资源、可靠性好越来越受到重视。下面以MCS-51单片机系统为例,对微机系统软件抗干扰方法进行研究。 1、软件抗干扰方法的研究 在工程实践中,软件抗干扰研究的内容主要是:一、消除模拟输入

    08-24
  • 大牛都是怎么学习STM32的?看完顿悟

    单片机用处这么广,尤其是STM32,这么火!如何快速上手学习呢? “不要去学STM32”。我不是说STM32不好,而是这种为了学习单片机而去学习单片机的思路不对。 你问,如何系统地入门学习stm32? 这本身就是一个错误的问题。假如你会使用8051 , 会写C语言,那么

    08-25
  • 史上最全Linux/C/C++思维导图

    申明:所有图片都源自网络素材,侵删。 这是收集的,并花大量时间整理的可说最全的Linux/C/C++思维导图。 有些图可能不是高清,但是放大即可看清楚。 linux思维导图 1、认识Linux 2、Linux命令 3、Linux学习路径 4、Linux 桌面介绍 FHS:文件系统目录标准 Linu

    08-20
下载排行榜
更多
广告