微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > Cortex-A8和H.264的无线视频监控系统设计

Cortex-A8和H.264的无线视频监控系统设计

时间:10-16 来源:互联网 点击:

对其进行初始化设置。

②获取编码器的输入缓冲区地址,读取视频数据,发送到编码器的输入缓冲空间。

③进行H.264压缩编码,获取编码后的输出缓冲区,并对编码数据进行相应处理。

④判断编码是否结束,结束则释放编码器的资源,编码器关闭,否则进入第2步循环运行。

2.3 视频数据无线传输

系统的传输网络是通过USB无线网卡构建无线局域网的方式完成,利用无线的信道来传输编码后的视频数据,WiFi(Wireless Fidelity)通信网络标准分别支持IEEE802.11g、IEEE 802.11b和IEEE 802.11a协议,具有传输速率高(11~54 MDps)、安装便捷和受环境限制小等优点。

USB无线网卡通过USB接口与SP5V210通信,需要完成USB设备、无线网卡设备的驱动和移植,无线网卡设备驱动为应用层提供协议栈接口,在下层通过USB总线访问无线网卡设备寄存器。无线网卡在Linux操作系统上的移植,先要下载对应驱动工具包并将其复制到根目录下完成驱动,通过串口工具输入Scan-wifi进行搜索无线网络信号,再通过start-wifi命令打开无线网络并建立连接。

无线网络传输视频数据时,必须要遵循约定的网络传输协议。一般常用的网络传输协议有RTP/RTCP、TCP/IP和UDP,本系统中视频数据的传输是基于RTP/RTCP实时传输协议的,RTP/RTCP协议实现的开源库有JRTPLIB、LIBRTP、ORTP等,本文采用基于C++的开源库JRTPLIB,支持Linux和Windows操作系统平台,且操作便捷,封装性好。为了实现基于RTP/RTCP实时传输协议的视频数据传输,先要完成JRTPLIB的交叉编译和到Linux系统平台移植等工作。

采用JRTPLIB开源库中的接口函数完成无线视频数据传输的具体流程如下:

①初始化并生成RTP会话。采用JRTPLIB开源库传输视频数据前,要先创建一个RTPSession实例用来代表RPT会话,并利用RTPSession Par ams对象设置时间戳的单位,再调用RTPSession实例中的成员函数Create()生成RPT会话并同时初始化。

②设置接收端目标地址。在生成RTP会话后传输视频数据前,首先调用RTPSession实例中的成员函数AddDestination()来设置数据发送时的目标地址(接收端地址)。在RTP协议中可以根据需要设置指定多个目标地址于同一会话中,其中函数SetDefaultPayloadType(96)用于设定RPT负载H.264编码数据;voidClearDestinations()用于清除所有的地址;函数DeleteDestination()为删除指定地址。

③发送视频数据到目标地址。设置好数据发送目标地址之后,使用RTPSession实例中成员函数SendPacket(),将编码好的H.264数据包发送到一个或多个目标地址。由于每一帧视频的数据量较大,RTP数据包以分片传输方式传输以保证视频数据的可靠性。SendPacket()函数中,mark为1代表该RTP包为完整包,为0代表分割包。

④RTP会话结束。调用BYEDestroy()函数结束此次RTP会话。

3 视频监控PC客户端设计

接收端将分片数据包重新组装成为帧,得到H.264格式的压缩编码视频,交付给视频监控PC客户端处理,这里视频监控PC客户端的主要功能为视频数据的重新解压、播放显示和处理等。系统采用FFMPEG方案和SDL技术来实现监控视频数据的解压和显示。

3.1 视频数据解压

FFMPEG是一套开源的音频流和视频流方案,支持音视频编解码等功能,为免费软件。FFMPEG方案的开发与使用是在Linux系统平台下的,但随着发展现已支持Windows等多种操作系统。FFMPEG方案支持H.264、MPEG4、3GP等多种常见格式的视频编解码,功能全面且性能强大。系统采用FFMPEG方案主要完成客户端对已编码视频数据的接收和视频解码工作。

在Windows下安装好FFMPEG开源库开发环境,再进行视频数据的解码工作,其中FFMPEG库中的主要功能函数和数据结构有:

①AVCodecContext()结构体,用于编码器参数信息描述,如视频的采样率、视频的宽和高等信息;

②AVPacket()结构体,缓冲解码前视频数据;

③AVFrame()结构体,存储视频数据解码后的数据帧;

④av_resister_all()功能函数,用来注册全部解码器;

⑤avcodec_find_decoder(),搜索解码器,如H.264格式解码器;

⑥avcodec_decode_video(),解码接收到的视频帧;

⑦avcodec_alloc_frame(),新建AVFrame结构体。

3.2 视频播放显示

SDL是一个跨平台的多媒体开源开发库,支持多媒体播放器、游戏开发等,可以运行在多种操作系统上(如Windows、Linux等),兼容性良好。SDL开源库包含音频、视频和视窗管理等多个子系统。本文采用SDL开源库中的视频子系统,其主要功能是将FFMPEG解码后的视频数据进行显示与播放。

SDL开源库将解码后的视频数据转化成对应的YUV格式,在屏幕上显示其各个分量,完成视频的输出。SDL开源库中的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top