新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于ARM11的无线视频监控系统设计与实现

基于ARM11的无线视频监控系统设计与实现

作者:时间:2014-06-18来源:网络收藏


本文引用地址:http://www.eepw.com.cn/article/248473.htm


  图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 步,否则接收端程序退出。

  4.2 视频数据的解码和显示

  由于接收到的数据是经H264 编码的数据,因此,先要对该数据进行解码,然后才能显示。而在服务器端,对视频数据解码用到FFmpeg.FFmpeg 是一个开源免费跨平台的视频和音频流方案,属于自由软件。

  解码时主要涉及FFmpeg 下的libavcodec 库、libswscale库和libavformat 库,其中第一个库是一个包含了所有FFmpeg 音视频编解码器的库,第二个库是格式转化库,因为解码后的数据是YUV420 格式,而要在计算机上显示该数据,则需要的是RGB 格式的,该库功能就是把YUV420 格式转化成RGB 格式,第三个库是一个包含了所有的普通音视格式的解析器和产生器的库。

  4.2.1 初始化解码线程

  (1) 注册全部的文件格式和编解码器,调用av_register_all()函数完成注册。

  (2) 设置AVFormatContext 结构体。该结构体是FFmpeg 格式转换过程中实现输入和输出功能,保存相关数据的主要结构,通过av_open_input_file 函数设置该结构体。

  (3)检查视频流的信息,通过调用av_find_stream_info(pFormatCtx)函数,pFormatCtx-》streams 就填充了正确的视频流信息,pFormatCtx 类型是AVFormatContext.

  (4) 得到编解码器上下文,pCodecCtx= pFormatCtx -》 streams[videoStream]-》codec,pCodecCtx 指针指向了流中所使用的关于编解码器的所有信息。

  (5) 打开解码器,先通过avcodec_find_decoder 函数找到相应解码器,然后调用avcodec_open 函数打开解码器。

  (6) 申请内存用来存放解码数据, 通过调用avcodec_alloc_frame 函数实现,由于解码的数据是YUV420 格式的,因此还需要将该数据转换成RGB 格式,因此,再次调用avcodec_alloc_frame 申请内存用来存放RGB 格式数据。

  (7) 申请内存用来存放原始数据,因为H264 解码时,对于P 帧需要参考前面一个关键帧或P 帧,而B帧需要参考前后帧,因此需要存放原始数据,首先,用avpicture_get_size 来获得需要的大小,然后调用av_malloc 函数申请内存空间。

  (8) 通过调用avpicture_fill 函数将帧和新申请的内存结合起来。

  (9) 创建格式转换上下文,通过img_convert_ctx=sws _getContext(src_w, src_h,src_pix_fmt, dst_w, dst_h,PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL,NULL)方法实现。其中,src_w 表示源图像的宽度,src_h 表示源图像的高度,src_pix_fmt 表示源图像的格式,dst_w 表示目标图像的宽度,dst_h 表示目标图像的高度,PIX_FMT_RGB24 表示目标图像的格式。

  4.2.2 对数据进行H264 解码

  (1)获得需要解码的一帧数据,由于前面接收端线程已经把接收到的数据存放在一个指针数组中,因此,解码线程只需要从指针数据中获取数据即可。

  (2) 解码数据。调用解码函数avcodec_ decode_video(pCodecCtx , pFrame , &finished , encodedData,size)来解码视频文件。其中,参数pCodecCtx是前面得到视频流编码上下文的指针;参数pFrame存储解码后的图片的位置,参数finished 用来记录已完成的帧数;参数encodedData 是输入缓冲区指针,指向要解码的原始数据;参数size 是输入缓冲区的大小。

  (3) 将已解码的视频数据YUV420 格式转换成RGB 格式,通过调用sws_scale()函数实现格式转换。

  4.2.3 视频数据的显示

  本系统使用QT 下的QImage 显示视频数据,由于QImage 能够存取单个像素,这样在显示前一帧图像的时候,将该图像保存下来,当显示后一帧图像的时候,如果该像素值与前一帧相同,则不必修改该值,从而节省了大量的时间,即哪里变修改哪里,显示过程的具体步骤如下:

  (1) 取得已解码的视频数据,且该数据是RGB 格式的。

  (2) 循环取得视频数据的R 分量、G 分量、B 分量。

  (3) 判断该点的像素值是否与前一帧对应位置的像素值相同,若相同,跳转到第2 步,否则,保存该像素值。

  (4) 对取得的RGB 各自分量,构造该像素点的颜色值,通过调用qRGB(R,G,B)构造方法实现。

  (5) 设置相应点的像素值,首先生成QImage 类的对象,然后调用该类的setPixel(x,y,rgb)。其中,x 是图像的x 坐标值,y 是图像的y 坐标值,rgb 是该点的颜色值。

  (6)显示图像,通过调用update()方法,该方法会触发绘画事件,因此,在绘画事件里,写入显示图像代码,即可显示刚生成的QImage 对象,通过调用drawImage()方法绘制图像。

  5 结论

  本系统在视频图像采集时,为了降低数据量,采用YUV420 的采样格式。视频数据编码采用H264 硬编码方式,极大地提高了编码速度。而在无线网络传输时,考虑到丢包问题,将编码数据进行拆包然后发送,降低了丢包率。经测试,本系统采集一幅OV9650摄像头拍摄的且分辨率为320X240 的图像,经H264硬编码,编码后的图像数据大致为5KB 左右,降低了数据传输量,并且硬编码每秒可编码25 帧图像数据,达到实时视频数据编码的要求。对于WI-FI 无线网络的传输率一般在11-54Mbps 左右,因此,该无线网络可以满足实时传输视频的需求。本系统构建了高实时性,低成本,低功耗的数字化无线视频监控平台,在该平台基础上,可以搭建各种各样的应用,比如,路况实时监控,人脸识别,仓库报警等应用,该系统具有一定的实用价值。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

linux相关文章:linux教程



上一页 1 2 下一页

关键词: ARM11 Linux

评论


相关推荐

技术专区

关闭