您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术基于嵌入式Linux的3G无线视频终端的设计与实现 正文
基于嵌入式Linux的3G无线视频终端的设计与实现

基于嵌入式Linux的3G无线视频终端的设计与实现

点击数:7155 次   录入时间:03-04 11:38:25   整理:http://www.55dianzi.com   嵌入式系统-技术


    Preview通道可以将YCbCr4:2:2格式的图像转换为RGB(16bit或24bit)格式的数据,并存放于为PreviewDMA分配的内存中,最大分辨率为640×480。主要用于本地液晶屏显示,Codec通道可以输出YCbCr4:2:0或YCbCr4:2:2格式到为Codec DMA分配的内存中。最大分辨率为4 096x4 096,主要用于图像的编解码处理。在本系统中使用的是Codec通道。
    视频采集模块的设计采用的是V4L2(Video for Linux Two)V4L2,它是Linux下开发视频采集设备驱动程序的一套规范,该规范采用分层的方法给驱动程序的开发提供了清晰的模型和一致的接口,并且正对视频设备的应用程序编程也提供了一系列接口函数。其中应用程序处于最上层,V4L2处于中间层,而实际的硬件设备则处于下层,其本身包括两层驱动结构,上层是videodev模块,下层为V4L2驱动程序。video-dev通过V4L2驱动程序的成员函数来调用V4L2驱动。在V4L2驱动的驱动程序初始化过程中,它首先枚举它将要处理的系统中的设备,为每个设备填充struct v412_devICe结构,并且将指向该结构的指针传递给v412_register_device()函数,该函数调用v4L2_deviee结构体中的初始化函数对设备进行初始化。当v412驱动程序初始化完成后,v412通过传递一个包含驱动程序成员函数,次设备号以及相关信息的结构给videod-ev,从而完成它将要处理设备在videodev的注册工作,当应用程序通过系统调用触发了某个驱动程序时,控制权首先传递给videodev中的函数,videodev将应用程序传递的文件或i节点结构指针转换为相应的v412结构指针,并调用v412中的处理函数。以本系统以OV9650摄像头为例,其驱动框架如图5所示。

g.jpg


    视频采集过程如下,应用程序首先打开视频设备文件,摄像头在系统中对应的设备文件为/dev/camera,通过系统调用“open(“/  dev/camera”,O_RDWR)”函数打开该设备,获得一个文件描述符fd,利用ioctl(fd,VIDIOCGPICT,&capability)函数获取摄像头的相关信息,例如设备名称、支持的最大最小分辨率、信号源信息等,填充在结构体video_capability中,通过调用ioctl(fd,VIDIOCGPICT,&pict-ure)获取图像的相关信息如采集图像的对比度、亮度、调色板等属性,并且填充在video_picture结构体中,在获取这类信息后,可根据实际需要来对其重新赋值,具体做法是将需要设置的值赋给相应结构体,然后通过系统调用ioctl(fd,VIDIOCSPICT,&)函数写入设备。在图像获取方式上使用mmap()系统调用来实现内存映射达到各进程共享内层的目的,利用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。使用mmap方式获取图像数据,需要首先设置图像帧的缓冲区结构,即struct video_mmap,如每次采集帧数,图像高度、宽度,图像调色板格式等等。然后调用ioctl(fd,VIDIOCMCAPTURE,&grab_buf)启动捕获过程。调用iotcl(fd,VI-DIOCSYNC,&frame)等待采集完成,若该函数成功返回则表示采集完毕,采集到的图像将放在通过mmap()映射的内存区域内,读取该内存数据即可获得图像数据,其中frame为当前截取的帧数,V4L2允许一次采集多帧数据,可通过设置grab buf.frame来实现。调用close(fd)函数关闭设备文件,终止图像采集。
2.2 视频数据处理模块设计
    由视频采集模块获取的视频图像需要通过3G网络来进行传输,而从摄像头直接采集的未经压缩的数据量非常大,为了在不影响图像质量的前提下提高传输效率,本系统中对原始获得的视频图像进行了压缩编码。由于MPEG-4是专门为播放流式媒体的高质量视频而设计的,并且MPEG-4标准以其高压缩比、高质量、低传输率已经成为目前网络多媒体传输的主要格式和标准。它可利用很窄的带宽,通过帧重建技术压缩和传输数据,以求使得用最少的数据获得最佳的图像质量并且能够保存接近于DVD画质的小体积视频文件。在本系统中选用开源的Xvidcore作为视频压缩模块的核心算法。Xvidcore是一个高效而且便于移植的编码软件。它不仅支持Simple Profile和Advanced Profile,还支持I/P Frames B-Frames Interlacing和GMC,以钻石和方块模式来进行PMVFast和EPZS运行估计,是目前比较流行的MPEG-4编码软件。Xvidcore源码可从网上下载免费获得,目前最新版为xvidcore-1.2.2,它提供了一系列的库函数及接口函数供应用程序使用。但针对嵌入式系统平台,要使用该库需要将其移植到嵌入式系统中。移植过程如下:
    解压源代码:tar-zxvf xvidcore-1.2.2.tar.gz;在使用前需要对xvidcore-1.2.2进行交叉编译,步骤如下:
    1)设置环境变量:export=“xvidcore当前所在目录”;
    2)进入/build/generic目录;
    3)生成Makefrle:/configure-host=LOCal hostbuild=arm-linux-gCC;//指定交叉编译工具以便进行交叉编译;
    4)编译源代码:make。
    将交叉编译生成的库文件libxvidcore.so.*拷贝到交叉编译器工作目录lib子目录中。完成编码库的移植工作。
    以上对个独立模块进行了介绍,在软件实现上对系统进行了整体设计,将各个模块有机的组合在一起,并充分考虑了系统的可扩展性。
    主要结构体如下:
h.jpg

www.55dianzi.com
i.jpg
    以视频压缩模块为例,其软件流程如图6所示。

k.jpg


2.3 网络转发模块设计
    在完成对采集图像的压缩或者接收完视频服务器后,需要将数据通过3G网进行转发,完成网络数据转发通常采取的办法是利用Linux提供的socket API进行,socket给用户提供了统一的编程接口,网络传输协议通常有TCP和UDP两种,对于TCP每次要通过3次握手建立连接,在等待乱序及重传丢失数据时会产生较大延时,而UDP又缺乏流量控制,所以都不太适用于实时数据传输,在这种情况下运行于UDP之上的RTP则具有很大的优势,目前对于有实时要求的数据传输RTP是最好的协议,故在本系统中使用了RTP协议作为数据传输协议,流程如图7所示。

l.jpg


2.4 3G模块驱动设计及联网
    3G模块与ARM是通过USB相连的。无线终端到3G网络的连接是通过PPP协议实现的,PPP协议是一种点对点串行通信协议,为在点对点连接上传输多协议数据包提供了一个标准方法。由于目前嵌入式市场上的3G模块基本上都是提供Windows CE操作系统下的驱动程序,但对于嵌入式Linux下面的目前还没有驱动支持,所以为本系统开发了3G模块的驱动程序。要完成3G模块的拨号上网功能,需要3个层面的支持:1)是内核层面;2)驱动层面;3)应用程序层面的支持。内核层面主要是通过对内核的重新配置来完成,由于3G模块与ARM通过USB线连接,而上层的PPP通信采用的是串行协议,所以要在内核中加入USB转串口的支持,通过makemenuconfig命令进入内核配置界面,依次选择DevICe Drivers->USB support->USB Serial Converter Support选择USB Generic Serial Driver按两次空格键使项目前加[*]将其编译入内核,其中加*为编译成内核模块,加M为编译为模块。由于采用的是PPP协议,故要在内核中加入PPP的支持。进入内核配置界面以后,依次选择DeviceDrivers->Network device support->PPP(point-to-point)protocol support选中,将PPP编译入内核,同时选择PPP展开项,将其全部编译入内核,保存退出。对于驱动层面,3G模块的驱动开发主要是通过修改两个文件generic.c以及usb-serial.c,其中generic.c为USB通用程序,usb-serial.c为USB转串口程序。通过在其中加入一些网络层的hook函数来达到对上层协议的支持。将修改过后的文件复制到/linux2.6.29/drivers/usb/serial,重新编译内核,生成zImage镜像,然后下载到板子上。完成3G模块驱动的设计以及内核对PPP协议的支持,对于拨号上网应用程序的支持,主要是通过PPP提供的两个工具pppd和chat来实现的,其中PPP提供了一种点对串行线路上传输数据流的方法,chat主要用于拨号并等待提示。可从网上下载PPP源码,在本系统中采用的版本为PPP-2.4.0,下载后要解压并且根据目标板的类型来进行交叉编译得到拨号程序。

上一页  [1] [2] [3]  下一页


本文关键字:无线  嵌入式  Linux  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术