您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 基于Linux的视频传输系统(完整方案)
目录1原创性声明----------------------------------------------------32摘要----------------------------------------------------------43系统方案------------------------------------------------------43.1功能与指标----------------------------------------------43.2方案选择与论证------------------------------------------4系统组成框图--------------------------------------------4硬件平台介绍------------------------------------------------------------------4视频采集方案的选择---------------------------------------------------------4视频编码方案的选择---------------------------------------------------------5视频传输方案的选择---------------------------------------------------------6显示方案选择------------------------------------------------------------------63.4系统软件实现--------------------------------------------63.4.1服务器--------------------------------------------6(1)视频采集模块-------------------------------------6(2)视频压缩模块------------------------------------10(3)网络传输发送模块---------------------------------133.4.2客户端--------------------------------------------19(1)网络传输接收模块--------------------------------19(2)视频解码模块------------------------------------19(3)视频显示模块------------------------------------22四系统测试----------------------------------------------------252摘要本系统在LINUX平台下实现了视频的采集、压缩、传输及组播,图象清晰,实时性较好。本设计采用USB摄像头结合LINUX下自带的驱动模块VIDEO4LINUX实现视频采集。在XVID视频编解码平台下实现视频的压缩和解压。视频传输采用专门为流媒体传输设计的RTP协议,达到了较高的实时性。ABSTRACTOnthebasisofLinuxplatform,thissystemrealizesthevideodata'scollection,compressionandnetworktransmission.Thevideodata'scollectionisrealizedthroughUSBcameraandVideo4Linux.Thevideodata'scodinganddecodingisrealizedundertheXvidplatform.AndthenetworktransmissionisrealizedbyRtpprotocalwhichisdesignedforstreammedia.Allofthesemakehignreal-timeperformance.关键词:视频RTPXVIDSDL3系统方案3.1实现功能与指标本系统可用于足球赛场向场内或场外观众提供更逼真的更精彩的比赛画面,使场内观众可以零距离的观看射门等精彩画面。用户可用笔记本电脑由局域网连接服务器,运行客户端软件即可欣赏近距离的比赛画面。服务器由USB摄像头采集数字视频信息,经过MPEG4视频编码,然后通过JRTP网络传输协议向连接到服务器的客户端传输视频信息,实现视频的实时组播。采集到的YUV图像大约为100KB压缩后每帧图像大小平均为5KB,在局域网环境下延迟小于0.5秒,视频清晰无失真。鉴于服务器的主频限制,组播最大连接数为5,可同时向5个用户提供视频信息。硬件平台介绍:GENE-8310是AAEON提供的第三代无风扇解决方案,在低功耗情况下可以获取更高的性能表现,主要表现在:卓越性能与可控的功耗,多种显示模式,可扩展性,GENE8310主频为500M可以做视频采集处理与传输的服务器。视频采集方案的选择:LINUX有自带的摄像头驱动模块Video4Linux.Video4Linux为针对视频设备的应用程序编程提供一系列的接口函数,对于USB摄像头,其驱动程序中需要提供基本的I/O操作接口函数如openclose的实现以及内存影射功能和对I/O操作的控制接口函数ioctl等。LINUX下视频采集如下所示视频应用程序Video4Linux设备驱动程序视频采集设备视频编解码方案的选择Xvid作为第二代MPEG-4编码具有多方面的优点,XVID是DIVX开发小组因不满DIVX被封闭而在其基础上开发的源码开放的视频编码解码平台。对于第二代的MPEG4视频编码内核来说。XVID的各种特点都有代表性和先进意义。1.它支持多种编码模式:除了最原始的单重估定码流压缩(1-passCBR)之外,XVID提供了包括:单重质量模式动态码流压缩单重量化(Quantization)模式动态码流压缩、和包括外部控制和内部控制的两种双重(2-pass)动态码流压缩模式。2.在量化方式上Xvid不仅提供了标准的MPEG量化方式,还特地提供了更适合低码流压缩的.h263量化方式。3.除了量化方式迭择,Xvid还提供了强大的对压缩过程中的量化幅度的范围控制。用户可以选定压缩时允许使用的量化幅度范围。例如设定一个量化的上限,就可以避免可能出现的画质大幅下降的情况。4.在运动侦测(MotionSearch)和曲线平衡分配(Curve)方面,XVID对画面帧进行运动侦测以及对全片段的运动侦测结果进行分析后,重新以曲线平衡分配每一帧的量化幅度,以做到:需要高码流的运动画面可以分配更多空间、更高的码流、更低的量化幅度来保持画面的细节;而对于不包含太多运动信息的静态画面,则消减分配预算。这种把好钢用在刀刃上的做法,是Xvid作为第二代MPEG-4编码的核心内容。5.Xvid提供了多极运动侦测精度,包括半像素插值的技术以16x16像素的微区块为单元标示上运动矢量:以及4分运动矢量(inter4vmotionvectors)的方式,以8x8的像素区块为单元更细致的纪录运动向量以供二重分析。6.动态关键帧距是另一个Xvid所具有的,在空间和画面之间获得最大平衡的技术。我们知道在视频压缩中不是每一帧都记录着全部的画面信息,事实上只有关键帧记录着完整的画面信息,而后续的P帧(P-Frame)仅仅是纪录下与之前一帧的差值。如果关键帧之间的画面变化很大,则会浪费宝贵的空间在P-Frame上;而加入把变化很大的那一帧记录在关键帧里,那么由于后续的帧不再有更大的变化,就可以节省P帧所需的空间。因此,根据画面镜头切换和运动幅度来变换关键帧的位置,对于视频压缩下的画面质量提高,就有着事半功倍的效果。鉴于XVID以上种种优点,我们采用XVID实现视频的编解码。视频传输方案的选择视频传输可以选择TCP与UDP,TCP是一个面向连接协议,传输信息前需要建立连接,系统资源开销大,但可靠性较高。UDP是一个无连接协议,传输数据之前源端和终端不需要建立连接,资源开销小,实时性较高。实时传输协议(Real-timeTransportProtocol,RTP)是在Internet上处理多媒体数据流的一种网络协议,利用它能够在一对一(Unicast,单播)或者一对多(Multicast,多播)的网络环境中实现传流媒体数据的实时传输。RTP通常使用UDP来进行多媒体数据的传输,具有UDP传输的优点。鉴于可靠性考虑,在本系统中,信息传输之前服务器和客户端用TCP建立连接。然后服务器通过RTP向客户端发送视频信息,这样就达到了可靠性和实时性的平衡。显示方案选择SDL(SimpleDirectMediaLayer)是一个跨平台的多媒体游戏支持库。其中包含了对图形、声音、线程等等的支持,目前可以运行在许多平台上,其中包括XWindow、XWindowwithDGA、LinuxFrameBuffer控制台等等。因为SDL专门为游戏和多媒体应用而设计开发,所以它对图形的支持非常优秀,尤其是高级图形能力,比如Alpha混和、透明处理、YUV覆盖、Gamma校正等等。而且在SDL环境中能够非常方便地加载支持OpenGL的Mesa库,从而提供对二维和三维图形的支持。本系统客户端接受到的视频解压后为YUV格式,考虑到SDL在YUV覆盖方面的优势,我们选择SDL实现视频信息接收接压后的显示。3.3系统软件实现3.3.1服务器服务器实现了采集数据然后压缩后进行实时传输,用了三个线程分别实现了视频的采集压缩(线程1),通过TCP协议建立连接(线程2),压缩后视频流的传输(线程3)。服务器应用程序运行后,服务器即创建线程1进行视频采集,线程2处于阻塞状态。一旦有客户端建立连接,则线程2获得客户端IP信息。以此IP信息为参数建立线程3,线程3通过JRTP协议向客户端传递视频流。此后客户端继续处于阻塞状态,直到有新的客户端连接。服务器端的重要的模块包括视频采集模块,视频压缩模块,和网络传输发送模块。(1)视频采集模块Linux内核公开支持的OV511等摄像头芯片,但由于较陈旧在市面不容易找到。我们选用LOGITECH的QUICKCAMCOOL摄像头并从网上下载摄像头驱动程序qc-usb-0.6.3.tar.gz然后进行解压、编译、安装。假定已经搭建好嵌入式Linux的开发环境,下面第一步工作就是USB摄像头的安装与驱动。确定USB摄像头被正常驱动后,下一步就是使用Video4Linux提供的API函数集来编写视频采集程序。在Linux下,所有外设都被看成是一种特殊的文件,称为设备文件。系统调用是内核和应用程序之间的接口,而设备驱动程序则是内核和外设之间的接口。他完成设备的初始化和释放、对设备文件的各种操作和中断处理等功能,为应用程序屏蔽了外设硬件的细节,使得应用程序可以像普通文件一样对外设进行操作。Linux系统中的视频子系统Video4Linux为视频应用程序提供了一套统一的API,视频应用程序通过标准的系统调用即可操作各种不同的视频捕获设备。Video4Linux向虚拟文件系统注册视频设备文件,应用程序通过操作视频设备文件实现对视频设备的访问。Linux下视频采集流程如下:开启视频设备()获取设备信息及图像信息()初始化窗,颜色模式,帧状态()捕捉视频帧数据()关闭视频设备()送压缩模块是否中止采集终止Video4Linux视频设备数据结构的定义structvdIn{intfd;//文件描述符char*videodevice;//视频捕捉接口文件structvideo_mmapvmmap;structvideo_capabilityvideocap;//包含设备的基本信息(设备名称、支持的最大最小分辨率、信号源信息等)intmmapsize;structvideo_mbufvideombuf;映射的帧信息,实际是映射到摄像头存储缓冲区的帧信息,包括帧的大小(size),最多支持的帧数(frames)每
本文标题:基于Linux的视频传输系统(完整方案)
链接地址:https://www.777doc.com/doc-2570412 .html