版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
绪论研究背景现如今随着计算机在各个领域的广泛应用,视频播放器在如今社会已融入到人们生活的各个方面,不仅仅是娱乐,在工作和学习中也拥有不可忽视的地位,多数都支持常见的媒体格式、.mp4、.avi、rm、.rmvb等。随着C语言的发展和嵌入式系统技术的推广,音频解码技术、存储器技术愈发成熟。在嵌入式系统低端应用中,存在着大量的小型嵌入式应用系统,基于Linux下的视频播放器就是其中一员,由于能满足人们视听享受已成为热门,随着Qt的发展,基于Qt开发的程序成本大大降低,Qt也越来越稳定。同时Qt强大的开发功能和可移植性实现了多平台的兼容性,可以很快移植到其他平台,从而节约了开发周期和成本,促进嵌入式设备的开发水平。因此基于Qt的嵌入式系统中实现视频播放器具有深刻的意义和价值。本文将设计并实现一款界面清楚明了,操作简单,支持多种格式媒体。该播放器的主要功能是播放一些常见的视频的格式文件,在功能上达到简单易行,消耗资源少。主要实现的功能:文件控制(主要用于添加播放文件);播放控制(控制视频的播放状态)。声音控制(调整音量的大小);显示控制(若播放的是视频文件应当显示图像,可以进行按比例播放或者全屏)。在文献中都详细介绍了嵌入式多媒体播放器的设计与实现的各种解决方法。如由Christopher
Hallinan.编写的《嵌入式Linux基础教程(第2版)(英文版)》中介绍了引导加载程序、系统初始化、文件系统、闪存和内核、应用程序调试技巧等,还讲述了构建Linux系统的工作原理,用于驱动不同架构的配置,Linux内核源码树的特性,如何根据需求配制内核运行时的行为,如何扩展系统功能,用于构建完整嵌入式Linux发行版的常用构建系统,USB子系统和系统配置工具udev等内容,同时还讲述了构建系统的工作原理,以及怎样将满足项目需求的定制的内核变化加载到内核中。你会了解用于驱动不同体系结构配置的机制和Linux内核源码树的特性;更重要的是,掌握如何修改系统使之满足自己的需求。除此之外,还深入探讨了内核命令行参数机制,介绍了它是如何工作的,如何根据需求配置内核运行时行为,如何扩展系统功能,如何导航内核源代码,如何为相关嵌入式系统的不同任务配置内核等内容。国内外研究现状基于Linux平台已经存在多款多种媒体播放软件,如:Xmovie,Xine,Realplayer,QuickTime,Mplayer等。其中既有以RealNetworks公司的RealPlayer和Apple公司的QuickTime为代表的商业软件,也有以Xine、Mpalyer为代表的自由软件。其中大部分都是具有较强的专用型,但缺乏较好的移植性,并且主流媒体播放器的设计都是基于桌面平台,虽然功能强大但是用户必须利用桌面平台,人们更希望有专用播放器来代替PC的多媒体功能。随着近几年嵌入式市场的飞速发展,许多公司都着手进行2嵌入式软件的开发和设计,并且已经研发出多种嵌入式产品,在这当中就包括嵌入式媒体播放器。但是纵观全局,并没有任何一个嵌入式媒体播放器能够像Microsoft公司的IE浏览器在桌面浏览器市场中一样占据嵌入式媒体播放器市场的垄断地位。主要是因为现有的嵌入式系统的发展非常迅速,而它们当中的播放器大部分都是从桌面电脑系统上移植而来,并没有充分考虑到嵌入式系统的特殊性,如MicrosoftWindowsCE中附带的播放器就是WindowsMediaPlayer的简化版,所以当前市场上已经出现的多种嵌入式媒体播放器在功能、速度、显示和易用性等各方面的表现还不尽如人意,总的来说,它们存在的局限性大致可以分为下面几类:1)可扩展的能力不强,大多不具备扩展新媒体类型的功能,或者仅支持新媒体类型的扩充,不支持传输协议的扩充;2)部分播放器虽然可以运行在多种平台上,可移植性和扩展性都比较好,但是其界面死板,易用性比较差;3)部分播放器虽然界面美观、使用方便,具有专用的插件接口,但是不开放源码,并且只能运行在特定的平台上,所以其移植性不强,扩展性一般。从以上的几点分析可以看出,一款好的媒体播放器需要功能强大、易于扩展、界面美观、使用方便,可以通过它达到娱乐或者学习的效果,满足自己的视听享受。目前嵌入式媒体播放器仍然在不断向前发展,除了继续根据各种音视频编解码标准进行升级和支持更多的应用外,还在拓展其他的应用模式和领域。例如在手机客户端和浏览器技术、数字电视机顶盒技术集成,实现完整的数字电视软件平台和Java技术、DSP技术结合,解决实时性强的动态视频处理;将多媒体技术应用到更多传统的电器领域,以提供交互式的应用等等。这些都说明嵌入式媒体播放器有着非常广阔的发展前景。论文主要完成的工作本课题所设计的视频播放器是基于Qt的应用程序框架。我所要做的首先系统的设计阶段:主要包括需求分析和概要设计、界面设计等;可扩展性架构的设计:包括环境的建立、系统的选择、Qt的安装及相应的环境变量配置、Mplayer的后台搭建。视频播放器的代码:主要基于Qt对播放器的界面进行开发,并实现播放的功能。本文在研究了当前音视频编解码技术、主流媒体文件格式、流媒体技术以及常见的GUI系统的基础上,针对嵌入式Linux环境下对资源使用的特殊性,采用GTK+实现嵌入式媒体播放器的图形用户界面模块,采用FFMpeg开源解码库作为播放器的解码器,它能够支持多种音频和视频编解码标准,通过采用SDL来实现对音视频的回放,最后采用NC机作为硬件环境对该播放器进行功能测试,通过测试表明该媒体播放器符合设计要求,能够满足嵌入式设备的媒体播放要求。开发平台与开发工具开发平台与工具在系统的设计与开发中,软件开发平台及开发工作是关键。LinuxLinux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux操作系统诞生于1991年的10月5日,Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。现列举几个常用命令如下:echo
命令举例:echo$PATH。功能:将命令行中的参数显示到标准输出中。date命令举例:date。功能:显示或设置系统时间,没参数直接显示系统当前的日期和时间。passwd命令举例:passwd。功能:修改密码。file命令举例:file文件名【参数】。功能:确定指定文件类型。ls命令举例ls-a显示当前目录下的全部文件(包括隐藏文件)。功能:列出目录文件。touch命令举例:touch【选项】文件名。功能:修改指定文件的时间标签或者创建一个空文件。选项:-a仅改变指定文件的存取时间。UbuntuUbuntu(乌班图)是一个以桌面应用为主的Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu基于Debian发行版和GNOME桌面环境,与Debian的不同在于它每6个月会发布一个新版本。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。2013年1月3日,Ubuntu正式发布面向智能手机的移动操作系统。Ubuntu由MarkShuttleworth(马克·舍特尔沃斯,亦译为沙特尔沃斯)创立,Ubuntu以Debian
GNU/Linux不稳定分支为开发基础,其首个版本于2004年10月20日发布。Debian依赖庞大的社区,而不依赖任何商业性组织和个人。Ubuntu使用Debian大量资源,同时其开发人员作为贡献者也参与Debian社区开发。Ubuntu是基于DebianGNU/Linux,支持x86、amd64(即x64)和ppc架构,由全球化的专业开发团队(CanonicalLtd)打造的开源GNU/Linux操作系统。为桌面虚拟化提供支持平台。Ubuntu对GNU/Linux的普及特别是桌面普及作出了巨大贡献,由此使更多人共享开源的成果与精彩。QtCreatorQt是一个完整的C++应用程序开发框架。它包含一个类库,和用于跨平台开发及国际化的工具。它是诺基亚开发的一个跨平台的c++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。QT是完全面向对象的,很容易扩展,并且允许真正地组件变成。QtCreator是一个用于Qt开发的轻量级跨平台集成开发环境。QtCreator可带来两大关键益处:提供首个专为支持跨平台开发而设计的集成开发环境(IDE),并确保首次接触Qt框架的开发人员能迅速上手和操作。即使不开发Qt应用程序,QtCreator也是一个简单易用且功能强大的IDE。从1996年,QT已经成为全世界范围内数千种成功的应用程序的基础。QT也是流行的Linux桌面环境KDE的基础。基本上,QT同XWindow上的Motif,Openwin,GTK等图形界面库和Windows平台上的MFC,OWL,VCL,ATL是同类型的东西,但是QT与其他开发工具相比,具有优良的跨平台特性、面向对象、丰富的API、大量的开发文档等优点。信号和槽机制是QT的核心机制,信号和槽是一种高级接口,应用于对象之间的通信,它是QT的核心特性,也是QT区别在于其他工具包的重要地方。信号和槽是QT自行定义的一种通信机制,它独立于标准的c/c++语言,因此要挣钱的处理信号和槽,必须借助一个成为MOC的QT工具,该工具是一个c++预处理程序,它可以为高层次的事件处理自动生成所需要的附加代码。GUI工具包是构造图形用户界面所使用的一套按钮、滚动条、菜单和其他对象的集合。提供一个友好的用户界面是GUI设计的一个宗旨,减少用户的负担、满足用户的需求、界面和用户的互动交流也是在GUI设计中其中必不可少的。一个出色的界面不仅能够清晰的勾画出所依托系统的大体结构,并且能够大大减少操作的工作量和复杂性。在UNIX系统里,有很多可供使用的GUI库,其中之一就是Qt库一个基于C++变成语言的工具包。它具有以下几个优点:(1)可移植性Qt的一个主要设计目标是使跨平台程序开发更加直观,便捷并富有趣味性。为了实现这一目标,Qt提取了窗口和操作系统的底层基础构造函数,为程序员提供了有意义的一致逻辑界面。QtAPI在所有支持的平台上都是相同的,Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt提供了一种称为signals/slots的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。Qt支持下列操作系统:MicrosoftWindows95/98,MicrosoftWindowsNT,Linux,Solaris,SunOS,HP-UX,DigitalUNIX(OSF/1,Tru64),Irix,FreeBSD,BSD/OS,SCO,AIX,OS390,QNX等等。(2)易用性和健全性Qt开发这只需学习一个API,就能编写在所有平台下运行的程序。统一的跨平台API使得程序员只需侧重于程序本身的增值创新,不用担心基础代码构建和多平台应用的维护和管理。Qt对不同平台的专门API进行了封装,如文件处理、网络,进程处理、线程、数据库访问等。Qt软件可以实现多编译器的平稳编译,因此用Qt构建的程序通常是非常健全的。Qt通过对所有子窗口内存单元分配的处理,简化了内存管理。程序员只需要侧重于顶层对象的处理。Qt是一个C++工具包,它由几百个C++类构成,你在程序中可以使用这些类。因为C++是面向对象的编程语言,而Qt是基于C++构造,所以Qt也具有OOP的所有优点。(3)运行速度Qt非常容易使用,且具有很快的速度。这两方面通常不可能同时达到。但当谈论Qt时,其易用性和快速则是密不可分的。这一优点要归功于Qt开发者的辛苦工作,他们话费了大量的时间来优化产品。另一个原因是它的表现方式。Qt是一个GUI仿真工具包,这意味着它不使用任何本地工具包作调用。Qt使用各自平台上的低级绘图函数仿真MSWindows和Motif,当然,这能偶提高程序速度。由于Qt是基于C++,速度快,易于使用,并具有很好的可移植性。所以,当需要开发UNIX和MSWindows环境下的GUI程序时,Qt是最佳选择。Mplayer视频播放器是指能播放以数字信号形式存储的视频的软件,也指具有播放视频功能的电子器件产品。除了少数波形文件外,大多数视频播放器携带解码器以还原经过压缩的媒体文件,视频播放器还要内置一整套转换频率以及缓冲的算法。MPlayer是一款开源多媒体播放器,以GNU通用公共许可证发布。此款软件可在各主流作业系统使用,例如Linux和其他类Unix系统、Windows及MacOSX系统。MPlayer建基于命令行界面,在各作业系统也可选择安装不同的图形界面。它的另一个大的特色是广泛的输出设备支持。大部分视频和音频格式都能通过FFmpeg项目的libavcodec函数库本地支持。对于那些没有开源解码器的格式,MPlayer使用二进制的函数库。它能直接使用Windows的DLL。专有的CSS解析软件和相关格式使MPlayer成为被众多开放源代码播放器所使用的后端。MPlayer的开发始于2000年。最初的作者是ArpadGereoffy。MPlayer最初的名字叫"MPlayer-TheMoviePlayerforLinux",不过后来开发者们简称其为"MPlayer-TheMoviePlayer",原因是MPlayer已经不仅可以用于Linux而可以在所有平台上运行。第一个版本被称为mpg12playv0.1,并且将libmpeg3在一个半小时之内集成到其中。之后的版本mpg12playv0.95pre5里被加入了基于avifile的Win32DLLloader的AVI播放功能,从2000年11月MPlayerv0.3之后的版本都一直保留着该功能。最初绝大多数的开发者都来自于匈牙利,开发者遍布全球。自从2003年AlexBeregszászi开始接替准备开发第二代MPlayer的ÁrpádGereöffy来维护该项目。MPlayerG2由于多种原因暂停开发。Mplayer的特色主要有以下几个:(1)内置多种解码器MPlayer本身编译自带了多种类型的解码器,不需要再安装xvid、ffdshow、ac3filter、ogg、vobsub等等所谓看DVDrip必备解码器,也不会跟你的电脑原来所安装的解码器有任何冲突。(2)拖动极速播放器MPlayer相对其它播放器来说,资源占用非常少,不需要任何系统解码器就可以播放各种媒体格式,对于MPEG/XviD/DivX格式的文件支持尤其好,不仅拖动播放速度快得不可思议,而且播放破损文件时的效果也好得出奇,在低配置的机器上使用更是能凸显优势。(3)强大的音频支持MPlayer广泛地支持音视频输出驱动。它不仅可以使用X11、Xv、DGA、OpenGL、SVGAlib、fbdev、AAlib、libcaca、DirectFB、Quartz、MacOSXCoreVideo,也能使用GGI,SDL(及它们的所有驱动),所有VESA兼容显卡上的VESA(甚至不需要X11),某些低级的显卡相关的驱动(如Matrox、3dfx及ATI)和一些硬件MPEG解码器卡,比如SiemensDVB、HauppaugePVR(IVTV)、DXR2和DXR3/Hollywood+。它们中绝大多数支持软件或硬件缩放,所以你可以享受全屏电影。(4)OSD功能MPlayer具有OSD(屏上显示)功能显示状态信息,有抗锯齿带阴影的漂亮大字幕和键盘控制的可视反馈。支持的字体包括欧洲语种/ISO8859-1,2(匈牙利语、英语、捷克语等等),西里尔语和韩语,可以播放12种格式的字幕文件(MicroDVD、SubRip、OGM、SubViewer、Sami、VPlayer、RT、SSA、AQTitle、JACOsub、PJS及我们自己的:MPsub)和DVD字幕(SPU流、VOBsub及隐藏式CC字幕)。(5)MEncoderMEncoder(MPlayer'sMovieEncoder)是一个简单的电影编码器,设计用来把MPlayer可以播放的电影(AVI/ASF/OGG/DVD/VCD/VOB/MPG/MOV/VIV/FLI/RM/NUV/NET/PVA)编码成别的MPlayer可以播放的格式。它可以使用各种编解码器进行编码,例如DivX4(1或2passes)、libavcodec、PCM/MP3/VBRMP3音频。同时也有强大的插件系统用于控制视频。相关技术音视频编解码技术音视频压缩编解码技术是媒体播放器的核心技术之一,通常使用在计算机、数据库、通信、数字电视和交互式系统中的关键多媒体技术。从目前的主要的压缩编解码技术来看,虽然被人们经常应用的技术有很多种,但是得到广泛的市场认可的主要标准有国际标准化组织(ISO)的MPEG(MovingPict=uresExpertsGroup)系列标准、国际电信联盟(ITU)和国际标准化组织联合提出的H.264标准、以及Microsoft的WMV标准,以下是对这三种标准技术的介绍。MPEG标准MPEG(动态图像专家组)成立于1988年,它是视频编码标准中一个大的集合,也是我们平时日常生活当中所见到的最普遍的视频标准。MPEG标准主要有以下五个,MPEG-1、MPEG-2、MPEG-4、MPEG-7及MPEG-21等。MPEG标准的视频压缩编码技术主要利用了具有运动补偿的帧间压缩编码技术以减小时间冗余度,利用DCT技术以减小图像的空间冗余度,利用熵编码则在信息表示方面减小了统计冗余度。这几种技术的综合运用,大大增强了压缩性能。该专家组建于1988年,专门负责为CD建立视频和音频标准,而成员是为视频、音频及系统领域的技术专家。他们成功将声音和影像的记录脱离了传统的模拟方式,制定出MPEG-格式,从此视听传播方面进入了数码化时代。MPEG-1音视频压缩是为了储存和发布数字音视频而建立起来的压缩格式。它制定于1992年,是为工业级标准而设计,可适用于不同带宽的设备,如CD-ROM、Video-CD、CD-i。它可针对SIF标准分辨率(对于NTSC制为352×240;对于PAL制为352×288)的图象进行压缩,传输速率为1.5Mbits/sec,每秒播放30帧,具有CD(指激光唱盘)音质,质量级别基本与VHS相当。MPEG-1也被用于数字电话网络上的视频传输,如非对称数字用户线路(ADSL),视频点播(VOD),以及教育网络等。MPEG-2音视频编码是在MPEG-1基础上的扩展,MPEG-2能适应高码流的要求,特别适合高清电视(HDTV),其可支持的码流为1.5-60Mbps。MPEG-2的音频编码可提供左右中及两个环绕声道,以及一个加重低音声道,和多达7个伴音声道(DVD可有8种语言配音的原因),MPEG-2还可用于为广播,有线电视网,电缆网络以及卫星直播(DirectBroadcastSatellite)提供广播级的数字视频。MPEG-2的其中一个特点是可提供一个较广的范围改变压缩比,以适应不同画面质量、存储容量、以及带宽的要求。为适应在互联网上多媒体数据的灵活传输,ISO/IEC于1998年又发布了MPEG-4标准,MPEG-4是基于音/视频对象的可分级编码技术,其码率可从5Kbps-2Mbps的范围内变化,它综合了数字电视、交互图形学和Internet等领域的技术。它在要求高效压缩编码的同时,强调多媒体网络通信的灵活性和交互性。这个标准主要应用于视像电话、视像电子邮件和电子新闻等,对传输速率要求较低。MPEG-4利用很窄的带宽,通过帧重建技术进行数据压缩,以求用最少的数据获得最佳的图像质量。与MPEG-1和MPEG-2相比,MPEG-4的优点是特别针对低带宽等条件设计算法,所以MPEG-4的压缩比更高,使低码率的视频传输成为可能。在公用电话线上可以连续传输视频,并能保持图像的质量,这是其它技术做不到的。其次它节省存储空间,在同等条件如场景、图像格式和压缩分辨率条件下,经过编码处理的图像文件越小,所占用的存储空间越小。由于MPEG-4算法较MPEG-1、MPEG-2更为优化,因而在压缩效率上更高。(2)H.264标准H.264是在早期视频编码标准的运动补偿转换编码范例基础上创建的。它是ITU-T的VCEG(视频编码专家组)和ISO/IEC的MPEG(活动图像编码专家组)组成的联合视频组(JointVideoTeam,JVT)开发的一个新的数字视6频编码标准,它既是ITU-T的H.264,又是ISO/IEC的MPEG-4的第10部分。H.264较早期的MPEG-2标准相比,该标准大大降低了比特速率。该技术不受早期标准所用构建模块的制约,整个技术的设计无需后向兼容性。H.264提供的一些可提高压缩效率的重要编码工具有:改进型空间交互预报、增强型时间预报(通过四分之一采样运动补偿、可变模块大小运动补偿、多重假设运动补偿和加权预测工具实现)、高效的基于上下文的熵编码(通过变长度编码或二进制运算编码工具实现)以及内环内容和编码模式适应性解锁滤波。实验表明,要实现相近的视觉质量,同MPEG-4ASP编码相比,H.264把比特速率降低了35%到50%,同MPEG-2相比,降低了40%到65%。另外,同MPEG-4SP相比,H.264BP可以在宽广的比特速率范围内把峰值信噪比降低50%以上。(3)WMV标准WMV(WindowsMediaVideo)标准,是Microsoft公司所推出的一种采用独立编码方式并且可以直接在网上实时观看视频节目的文件压缩格式。由WMV标准生成的文件一般同时包含视频和音频部分。视频部分使用WindowsMediaVideo编码,音频部分使用WindowsMediaAudio编码。它是在Microsoft公司的另外一种文件格式ASF(AdvancedStreamFormat)升级延伸而来得。它作为一种经久不衰的音视频编码标准,一直在不断的改进。WMV格式的主要优点包括:本地或网络回放、可扩充的媒体类型、部件下载、可伸缩的媒体类型、流的优先级化、多语言支持、环境独立性、丰富的流间关系以及扩展性等。主流媒体文件格式目前的主流媒体文件格式有:avi、RealMedia的rm和rmvb格式,WindowsMedia的asf、wmv格式,mp4和3gp,QuickTime的qt格式等。下面将对上述几种媒体文件格式进行简要的分析。(1)avi格式Avi英文全程是AudioVideoInterleaved,即“音频视频交错”,就是可以将视频和音频交织在一起进行同步播放,可以跨多个平台使用。文件体积过大是他的缺陷,而且压缩标准不统一,因此经常会遇到高版本Windows媒体播放器播放不了采用早期编码编辑的AVI格式视频,而低版本Windows媒体播放器又播放不了采用最新编码编辑的AVI格式视频。所以在使用时常常需要临时下载更新编码编辑器。(2)RealMedia的rm和rmvb格式RealMedia是RealNetworks公司所开发的流式音频、视频文件格式,主要用来在低速率的网络上实时传播活动视频影像,可以根据网络数据传输速率的不同而7采用不同的压缩比率,从而实现影像数据的实时传播和播放。RealMedia包括:rm(RealVideo)、ra(RealAudio)和RealFlash三类文件。rm用来传播连续视频数据,ra用来传播CD音质的音频数据,而RealFlash则是RealNetworks公司与Macromedia公司共同推出的采用矢量技术的动画格式。作为最早的Internet流式技术,在音视频方面RealMedia已成为事实上的网络音视频播放标准。RMVB这是一种由RM视频格式升级延伸出的新视频格式,它的先进之处在于RMVB视频格式打破了原先RM格式那种平均压缩采样的方式,在保证平均压缩比的基础上合理利用比特率资源,就是说静止和动作场面少的画面场景采用较低的编码速率,这样可以留出更多的带宽空间,而这些带宽会在出现快速运动的画面场景时被利用。这样在保证了静止画面质量的前提下,大幅地提高了运动图像的画面质量,从而图像质量和文件大小之间就达到了微妙的平衡。(3)WindowsMedia的asf、wmv格式ASF是(Advanced
Streaming
Format
高级串流格式)的缩写,是
Microsoft
为
Windows
98
所开发的串流多媒体文件格式。WindowsMedia是Microsoft提出的信息流式播放方案。其核心是ASF(AdvancedStreamFormat)文件,是一种包含音频、视频、图像以及控制命令、脚本等多媒体信息的数据格式。这个词汇当前可和
WMA
及
WMV
互换使用。ASF支持任意的压缩/解压缩编码方式,并可以使用任何一种底层网络传输协议,具有很大的灵活性。并将ASF用作Windows版本中多媒体内容的标准文件格式,这无疑将对Internet特别是流式技术的应用和发展产生重大影响。ASF最大优点就是体积小,因此适合网络传输,也同样适于在本地播放。用户可以将图形、声音和动画数据组合成一个ASF格式的文件,当然也可以将其他格式的视频和音频转换为ASF格式,而且用户还可以通过声卡和视频捕获卡将诸如麦克风、录像机等等外设的数据保存为ASF格式。WMV是微软推出的一种流媒体格式,它是在“同门”的ASF(AdvancedStreamFormat)格式升级延伸来得。在同等视频质量下,WMV格式的体积非常小,因此很适合在网上播放和传输。WMV不是仅仅基于微软公司的自有技术开发的。从第七版(WMV1)开始,微软公司开始使用它自己非标准MPEG-4Part2。但是,由于WMV第九版已经是SMPTE的一个独立标准(421M,也称为VC-1),所以WMV的发展已经不象MPEG-4那样是一个它自己专有的编解码技术。(4)Mp4和3pg目前MP4最流行使用的压缩方式为MPEG-4。移动手持设备视频多数支持此格式,但由于硬件平台的没有统一的标准,软件系统也是由厂商自行设计,各种设备可播放的MP4编码方式也不同。3gp使用MPEG-4或H.263
两种影片编码方式,以及
AMR-NB或AAC-LC两种声音储存方式,可以将影片以更经济的方式存放在手机或是其他行动装置里,所以它最大的优点就是:容量小。(5)QuickTime的qt格式QuickTime的qt格式是Apple公司于1991年推出的能在计算机上播放高品质视频图像的技术,它几乎支持所有主流的个人计算平台和各种格式的静态图像文件、视频和动画格式,支持RLC、JPEG等领先的集成压缩技术,提供了大约150多种视频效果。具有内置Web浏览器插件(Plug-in)技术,支持IETF流标准以及FTP和HTTP等网络协议,现已成为是数字媒体领域的工业标准。QuickTime的qt电影文件格式定义了存储数字媒体内容的标准方法,不仅可以存储单个的媒体内容(如视频帧或音频采样),而且能保存对该媒体作品的完整描述;QuickTime的qt文件格式被设计用来适应为与数字化媒体一同工作需要存储的各种数据。因为这种文件格式能用来描述几乎所有的媒体结构,所以它是应用程序间(不管运行平台如何)交换数据的理想格式。qt文件格式中媒体描述和媒体数据是分开存储的,媒体描述或元数据(meta-data)叫做电影(movie),包含轨道数目、视频压缩格式和时间信息。同时movie包含媒体数据存储区域的索引。媒体数据是所有的采样数据,如视频帧和音频采样,媒体数据可以与QuickTimemovie存储在同一个文件中,也可以在一个单独的文件或者在几个文件中。流媒体技术流媒体是指在Internet/Intranet中使用流式传输技术的连续时基媒体,如音频、视频等多媒体文件。在网络上传统的多媒体文件的传输方式,基本上只有文本、图像可以按照原格式在网上传输,动画、音频、视频等虽然可以直接在网上播放,但文件偏大,即使使用专线上网,也要等完全下载后才能观看。流式传输方式可将视频、音频、动画等多媒体文件经编码工具的特殊处理,分成一个个压缩包,由流媒体服务器向用户计算机连续、实时传送。在采用流式传输方式的系统中,用户不必等到整个文件全部下载完毕,只需经过几秒或几十秒的启动延迟即可观看,文件的其余部分将在后台服务器继续下载。该技术首先在用户端的计算机上创建一个缓冲区,预先下载多媒体文件的部分数据作为缓冲,播放程序读取缓冲区内的数据进行播放。在播放的同时,用户计算机在后台继续下载多媒体文件的剩余部分填充缓冲区。这样,当网络出现抖动(Jitter),实际连线速度小于播放消耗数据速度时,可以避免播放的中断,也使得播放质量得以维持。流媒体技术是为解决以Internet为代表的中低带宽网络上多媒体信息传输问题而产生、发展起来的一种网络新技术,可适应从窄带到宽带任意的网络带宽。目前,实现流媒体传输主要有两种方式:实时流(realtimestreaming)传输和顺序流(progressivestreaming)传输。一般来说,如使用HTTP服务器,文件即通过顺序流发送,即为顺序流传输。如视频为实时广播,或使用流传输媒体服务器,或应用如RTSP的实时协议,即为实时流传输。采用哪种传输方式依赖于不同需求,两种方式有着不同特点:顺序流传输是顺序下载,在下载文件的同时用户可观看在线媒体,在给定时刻,用户只能观看自己下载的那部分,而不能跳到还未下载的部分,顺序流传输不像实时流在传输期间根据用户连接的速度做调整。由于标准的HTTP服务器可发送这种形式的文件,不需要其他协议,它经常被称作HTTP流传输。顺序流传输比较适合高质量的短片段,如片头、片尾和广告。由于文件传输是无损下载的,这种方法保证电影播放的最终质量。这意味着用户在观看前,必须经历延时,对较慢的连接尤其如此。实时流传输保证媒体信号带宽与网络连接匹配,使媒体可被实时观看到。实时流媒体传输需要专用的流媒体服务器与传输协议。实时流传输总是实时传送,特别适合现场事件,也支持随机访问,用户可快进或后退以观看前面或后面的内容。其必须匹配连接带宽,这意味着以调制解调器速率连接时图像质量较差。而且,由于出错丢失的信息被忽略掉,网络拥挤或出现问题时,视频质量很差。实时流传输需要特定服务器,如QuickTime,StreamingServer,RealServer。这些服务器允许用户对媒体发送进行更多级别的控制,因此系统设置、管理比标准HTTP服务器更复杂。而流媒体的实现原理简单地说,就是通过采用高效的压缩算法,在降低文件大小的同时伴随质量的损失,让原有的庞大的多媒体数据适合流式传输。然后通过架设流媒体服务器,利用各种实时协议传输流数据。Figure2.1Streamingmediaimplementationprinciple多媒体数据必须进行预处理才能适合流式传输,这是因为目前的网络带宽相对多媒体巨大的数据流量来说还显得远远不够。预处理主要包括两方面:一是采用先进高效的压缩算法;二是加入一些附加信息把压缩媒体转为适合流式传输的文件格式。其技巧在于压缩原始的A/V内容,使其能够在窄带或宽带通道上以流的方式传给用户。预处理在编码器内完成,编码方式的选择可以是多种多样的。编码过程是一种艺术,应该考虑不同编码速度的定制性能、包损失的容错性与网络的带宽波动、最低速度下好的A/V品质、编码/流式传送的成本、流的控制以及其他方面。目前流媒体播放技术市场上主流的流媒体技术有三种,分别是:RealNetworks公司的RealMedia;Microsoft公司的WindowsMedia和Apple公司的QuiekTime。这三家公司的技术都有自己的专利算法、专利文件格式甚至专利传输控制协议。下面就这三种技术进行简要的介绍:(1)Apple公司的QuiekTime技术Apple公司的QuickTime适用于MacOS和Windows的跨平台的多媒体体系结构。它包括一系列多媒体操作系统扩展(就像Windows里的DLL被执行)、一个全面的API、文件格式和一系列用户应用比如说QuickTimePlayer,theQuickTimeActiveXcontrol和theQuickTimebrowserplug-in。QuickTime是一个完全的多媒体体系结构而不仅仅是一个媒体播放器。它支持创建、产生和传送各种广泛的媒体文件。QuickTime提供了对于整个进程的端到端的支持:实时的捕获媒体信号、有步骤的合成媒体信号、输入输出媒体当前媒体和编辑、合成、压缩、传输用户的重放。QuickTime的体系结构是由灵活的工具集和插件组件构成的。为了支持全面的多媒体任务,QuickTimeAPI包括采集工具集(如电影工具箱,图象压缩管理器,序列截图器等)和QuickTime流API。电影工具箱用来初始化QuickTime:实时的打开、播放、编辑和保存电影文件;图象压缩器是独立于设9备和驱动压缩的压缩和解压缩图象数据;序列截图器是一种从一些实时的数据源(比如视频采集卡或者音频输入)捕获和记录采样的组件框架;QuickTime流API是用来可以使用标准流协议(比如RTP,RTSP)来发送和接收实时流数据。此外还有一些其他的工具集,如QuickTime虚拟区,精灵助手工具箱和有线电影API。不同的工具集通常分享数据类型和范例设计,使得进行后续开发变的简单。当想进入QuickTime通常自动处理的任务时许多工具集是非常有用的。例如;当要用到电影工具箱来播放电影时,它可能不需用户和流API或者图形压缩管理器来交互就能打开实时流数据和解压缩一系列的图片,但是要检查流的丢包或者确定图片每个时间的解压缩情况就可以使用恰当的工具集来实现。QuickTime的体系结构广泛的使用组件,使得它模块化、灵活和可扩展。一个QuickTime的组件可以分享到已被定义的API的源代码。可以把新的组件加入到QuickTime里并当在实际应用到它时会被自动加载,这主要是因为它和现有存在的普通版本类型响应的是同一个API。例如当QuickTime工作在一些媒体类型(音频、视频、文本、精灵、Flash、3D模块、图片虚拟社区和其他)时,每一个媒体类型都被媒体处理组件所支持,组件所支持的媒体数目和类型在不断的增加,用户可以通过创建一新的媒体处理组件来增加新的媒体类型给QuickTime。(2)RealNetworks公司的RealMedia技术RealNetworks公司是世界领先的网上流式音视频解决方案的提供者,提供从制作端、服务器端到客户端的所有产品。其在20世纪90年代中期首先推出了流媒体技术,并随着互联网的急速发展而壮大了自身,在市场上处于主动地位,并拥有最多的用户数量,它的客户端播放器RealPlayer的全球注册人数已经超过了1.6亿人。RealNetworks公司是世界领先的网上流式视音频解决方案的提供者,提供从制作端、服务器端到客户端的所有产品。RealNetworks公司最新的网上流式视音频解决方案叫RealSystemIQ,RealSystemIQ容易安装,在高、低带宽条件下均可提供良好的视音频质量,但价格较贵。RealMedia通过基于SMIL并结合自己的RealPix和RealText技术来达到一定的交互能力和媒体控制能力,不过相比QuickTime来说还有一段距离。下面介绍一下RealMedia技术的特点:a.RealVideo代表了影像编码技术从拨号上网到宽带网的量的飞跃。b.Macintosh版本现在完全支持实时广播;VBR(variablebitrate)影像压缩。这个特征使影像数字信号编解码器,在工作中能根据被编码内容的不同自动调整比特律,改善了窄带和宽带影像的品质;c.TwoPassVideo影像压缩。双认证编码在对输入的影像编码前,会分析影像数据。在第一次认证时将对整个影像片断进行分析,寻找过渡和复杂之处,在第二次认证时,根据第一次认证得到的分析数据对影像片断进行编码。把VBR(有效位寄存器)和双认证编码技术结合,对互联网上宽带视频质量的改善起到了不可低估的作用;d.RealVideo预过滤.双预过滤技术的引入,为宽带RealVideo过滤了许多细节上的不足之处;e.交织过滤技术用在对NTSC或PAL格式的影像编码处,此技术将会过滤“所谓的人为因素”;f.反转电视电影。电影通常以每秒24帧(fps)的速率进行拍摄。当一部电影以30fps转变成数字影像时,额外的帧通过合并或复制被加入进来。film-to-video变换过程被称为电视电影反转。电视电影过滤器在这个过程中寻找合适的帧并把他们加入到整个过程中,这样就消除了冗余编码并且提高了被编码影像的质量;g.带宽仿真。RealProducerPlus捆绑了一个宽带模拟器。这是一个Realplayer的插件,它允许创作人员在虚拟RealServer时可以测试真实世界的带宽情况和信息损耗情况。h.RealMedia编辑器允许改变开始和结束的时间,把文件粘贴到一起,观察流属性,预览任何Real视音频文件。(3)Microsoft公司的WindowsMedia技术Microsoft是三家之中最后进入这个市场的,但利用其操作系统的便利很快便取得了一定的市场份额。WindowsMedia是Microsoft提出的流媒体传播方案,其主要目的是在Internet和Intranet上实现音频、视频等多媒体流的传输。WindowsMedia技术是一个能适应多种网络带宽条件的流式多媒体信息发布平台,提供密切结合的一系列服务和工具用以创造、管理、广播和接收流媒体内容,包括了流媒体的制作、发布、播放和管理的一整套解决方案。WindowsMedia的关键核心是MMS协议和ASF数据格式,MMS用于网络传输控制,ASF则用于媒体内容和编码方案的打包。另外,WindowsMedia还提供了开发工具包(SDK)供二次开发使用。微软的流视频解决方案在微软视窗平台上是免费的,制作端与播放器的视音频质量都上佳,而且易于使用,但目前在整体解决方案方面和RealNetworks的产品还有差距。WindowsMedia由MediaTools,MediaServer和MediaPlayer等工具构成。MediaTools是整个方案的重要组成部分,它提供了一系列的工具帮助用户生成ASF格式的多媒体流,分创建工具和编辑工具两种,创建工具主要用于生成ASF格式的多媒体流,包括MediaEncoder,Author,VidToASF,WavTbASF,Presenter五个工具;编辑工具主要对ASF格式的多媒体流信息进行编辑与管理,包括后期制作工具ASFIndexer与ASFChop,以及对ASF流进行检查并改正错误的ASFCheckoMediaServer可以保证文件的保密性,不被下载,并使每个使用者都能以最佳的影片品质浏览网页,具有多种文件发布形式和监控管理功能。MediaPlayer则提供强大的流信息播放功能。WindowsMedia的核心是ASF(AdvancedSystemsFormat)。ASF是一个独立于编码方式的在网络上实时传播多媒体的技术标准,Microsoft希望用ASF取代QuickTime之类的技术标准以及WAV,AVI之类的文件扩展名,并打算用ASF作为将来的Windows版本中所有多媒体内容的标准文件格式。ASF也是一种数据格式,音频、视频、图像以及控制命令脚本等多媒体信息通过这种格式,以网络数据包的形式传输,实现流式多媒体内容发布。其中,在网络上传输的内容就称为ASF流(ASFStream)。ASF支持任意的压缩、解压缩编码方式,并可以使用任何一种底层网络传输协议,如RTP,RTSP,TCP,RTCP,UDP等,具有很大灵活性。Microsoft打算将ASF用作将来作为Windows版本中多媒体内容的标准文件格式,这无疑将对Internet特别是流式技术的应用和发展产生重大影响。嵌入式图形用户界面图形用户界面是指采用图形显示方式来完成用户与机器的信息交换,借助计算机图形学技术使人机交互能够大量利用颜色、形状等视觉信息,发挥人的形象感知和形象思维的潜能,提高了信息传递的效率。目前已出现了很多基于Linux的嵌入式系统。嵌入式系统对GUI有着特殊的要求:由于嵌入式系统实时性要求非常高,对GUI的要求也高。这些系统一般不希望建立在庞大臃肿的、非常消耗系统资源的操作系统和GUI之上,比如Windows或XWindow。因此,这些系统对轻型GUI的需求更加突出。另外,嵌入式系统往往是一种定制设备,它们对GUI的需求也必须是可定制的。所以,嵌入式系统对GUI的基本要求包括轻型、占用资源少、高性能、高可靠性和可配置。从用户的观点来看,图形用户界面(GUI)是系统的一个最至关重要的方面:用户通过GUI与系统进行交互,所以GUI应该易于使用并且非常可靠。(1)几种常见的GUI系统在嵌入式Linux下有很多图形界面系统GUI,包括Qt/Embedded,MiniGUI,Microwindows和GTK+等。a.Qt/EmbeddedQt/Embedded是著名的Qt库开发商TrollTech发布的面向嵌入式系统的Qt版本。因为Qt是KDE等项目使用的GUI支持库,所以有许多基于Qt的XWindow程序可以非常方便地移植到Qt/Embedded版本上。不过,Qt/Embedded存在一些问题值得注意:首先,该系统采用两种条款发布,如果要开发商业程序,就必须向TrollTech交纳授权费用。其次,Qt/Embedded是一个C++函数库,当Qt/Embedded裁剪到最小630kB,但这时的Qt/Embedded库已经基本上失去了使用价值,低的程序效率、大的资源消耗也对运行Qt/Embedded的硬件提出了更高的要求。第三,Qt/Embedded库目前主要针对手持式信息终端,因为对硬件加速支持的匮乏,很难应用到对图形速度、功能和效率要求较高的嵌入式系统当中,比如机顶盒、游戏终端等等。第四,Qt/Embedded的结构过于复杂,很难进行底层的扩充、定制和移植。b.MiniGUIMiniGUI是由清华大学魏永明主持开发的,并由许多自由软件开发人员支持的一个自由软件项目,其目标是为基于Linux的实时嵌入式系统提供一个轻量级的图形用户界面支持系统。MiniGUI体系结构是分层设计的,在最底层,图形抽象层(GAL)和输入抽象层(IAL)提供底层图形接口以及输入接口,如鼠标和键盘的驱动;中间层是MiniGUI的核心层,其中包括了窗口系统必不可少的各个模块;最顶层的API是提供给用户的编程接口。与MicroWindows、Qt/Embedded等GUI相比,MiniGUI最显著特点是占用资源小和可移植性好。但是,MiniGUI还存在诸多不足。譬如,它还缺乏开发应用程序的集成开发环境,以及一些必要的应用程序,如浏览器等一些Internet工具。同时,这些不足也在不同程度上阻碍着MiniGUI的推广和应用。c.MicroWindows/NanoXMicroWindows是一个开放源码的嵌入式GUI软件,由CenturySoftware公司主持开发,目的是把图形视窗环境引入到运行Linux的小型设备和平台上,它有许多针对现代图形视窗环境的功能部件。MicroWindows体系结构是基于客户机/服务器的,并且具有分层设计,在最底层,屏幕和输入设备驱动程序与实际硬件交互;在中间层,可移植的图形引擎提供对线的绘制、区域的填充、多边形的裁剪14以及颜色模型的支持;在最上层,实现了可以用来开发图形应用程序的多种API函数。目前,MicroWindows支持两种API函数:MicroWindowsAPI和Nano-XAPI。MicroWindowsAPI适用于所有Win32和WinCE的应用程序。Nano-X是MicroWindows支持的类XAPI,沿用XWindows中的XlibAPI。与Xlib实现不同,Nano-X仍在每个客户机上同步运行,这意味着一旦发送了客户机请求包,服务器在为另一个客户机提供服务之前一直等待,直到整个包都到达为止。这使服务器代码非常简单,而运行的速度仍非常快。但是,Nano-X联网功能部件至今没有经过适当地调整(特别是网络透明性),并且MicroWindows性能不高,特别在图形引擎中有许多低效的算法,所以也还没有太多现成的应用程序可用。d.GTK+GTK+是建立在Xwindow和Glib库上的轻量级高级图形库,旨在为应用程序提供一套与平台无关的图形用户界面接口。Xwindow是一种图形用户界面系统,它为应用程序提供了丰富的作图资源。它有经过精简的Xlib类库,去掉了许多对设备的检测过程,占用资源少且稳定性和移植性好。其主要功能特点有稳定可靠、灵活、提供了事件驱动和信号/回调函数的消息传递机制、支持多类资源文件等优点。GTK+与其依赖库的关系如图2.2所示。其中,Glib是Linux系统下最常用的轻量级的C语言函数库,它提供了C常用的数据结构定义、处理函数、宏、可移植的封装和一些运行时机能,如事件循环、线程、动态调用、对象系统等的API;Xlib是TinyX的底层函数库,是用来控制显示的底层图形库,它提供了丰富的作图资源;Gdk是建立在Xlib上的针对图形图象类的封装,具有良好的移植性;GTK+即是建立在Xlib和GDK上的面向对象的高级类库。应用程序主要采用GTK+编写,但是也可以直接调用GDK,Xlib和Glib的有关函数。GTK+系统使用事件驱动和信号回调机制作为应用程序的创建构架。当用户对界面控件做出某种操作即会产生一个事件。此时程序会收到消息并通知该控件有事件发生,控件即会产生特定信号并根据此信号调用相应回调函数执行功能处理。GTK+程序控制权传递基于“事件”和“信号”机制。gtk_main()函数是GTK+主处理循环,当程序运行到这里时,GTK+进入等待状态,直到界面控件对象发生了某种事件(如鼠标点击、键盘输入、焦点转移等),这些事件都由支持系统收集,将其以事先约定的格式翻译为特定的消息并发送。GTK+主循环捕获到事件后通知该控件并产生特定信号,此时控制权就转让给了相应的函数调用,由事先与该控件及信号建立关联的所谓“回调函数”对其处理。回调函数即是用于实现功能处理的代码。整个GTK+程序就一直处于“收到事件、发出信号、处理信号”的循环中,直到关闭的消息传来退出循环,结束程序。e.信号处理函数信号处理函数又叫回调函数,它是GTK+程序的主体部分,应用程序实际所做的工作大部分都发生在信号处理函数中,设计这些函数也是编程者的主要工作之一。回调函数的主要任务就是接收信号并实现功能,它具有以下形式:voidfunc(GtkWidget*widget,gpointercallback_data);其中,widget是指向发出信号的控件指针,callback_data是指向要传递给回调函数的用户附加数据。由于回调函数是与控件以及事件信号一一对应的,因此当操作界面较为复杂控件信号较多时,回调函数的个数也会有很多。特定控件发出了特定信号后应用程序需要知道调用哪个回调函数来处理信号,因此编程者必须创建这二者之间的关联关系,GTK+系统称之为信号连接器。用以连接信号和回调函数的信号连接器创建函数如下:gintgtk_signal_connect(GtkObject*object,gchar*name,GtkSignalFuncfunc,19gpointerfunc_data);其中,object是发出的信号的控件指针;name是发出的信号名称,为字符串形式,用双引号引起来;func是发出信号后要调用的函数名,即回调函数名,需要用G_CALLBACK宏来转换;func_data是要传递给回调函数的用户附加数据,它的值类型为gpointer,如果不是这一类型需要强制转换,如果没有参数则为NULL。这里只能传递一个参数,如果有多个参数可以先将它们定义为一个结构体,再将此结构体作为参数传递过去。这样当控件object发出了信号name后,程序即会调用回调函数func来处理信号。播放器的设计流程设计播放器的系统结构由于嵌入式Linux媒体播放器的设计既要满足对特殊嵌入式系统的要求,又要做到功能强大、界面友好、简单可用,经过分析关键要做到以下几点:第一要支持Linux系统;第二点是播放器的整体结构基于分层设计,使各个功能模块层次结构清晰,条理清楚;第三点是扩展的解码器接口,可以方便的添加对解码格式和解码协议的扩展功能;第四点是播放器框架不基于某种特定的架构,以增强其移植性;最后是要具有友好的图形用户界面,操作简单方便。通过使用C语言开发来支持嵌入式Linux系统;采用GTK+作为GUI来提供强大的用户界面;采用FFMpeg开源解码库来完成解码工作,它支持多种音频和视频编解码标准,功能十分强大,并且实现一个预先定义好的的解码器接口来增强对多种格式媒体文件的解码扩展性;利用SDL来完成对音视频的输出,消除对架构的依赖,保证了良好的可移植性。图形用户界面模块接收到用户的播放指令之后,就调用输入模块的相应函数从本地文件或者网络流媒体文件取得已压缩数据,然后将它送到相应的解码器,解码之后取得的未经压缩的数据再将其传递给实现回放操作的功能块。另外再加上负责处理与用户交互的图形用户界面,衔接各个部分良好工作的控制管理功能,所以经过分析之后将播放器划分为输入、输出、插件接口、解码器四个模块。从功能上,它们各自所执行的功能是互相独立的;从另一方面来看,他们又是相互紧密联系的。可以将音频视频的解码程序以插件的形式封装在解码器模块中,对不同格式的媒体文件可以使用解码器模块中封装的对应的解码器插件。同时,为了调用的方便,可以在插件接口模块和解码器模块之间采用一套统一的解码器封装接口。播放器主程序只需要调用接口函数就可以控制媒体数据的播放了,根本不需要了解媒体数据的格式及解码算法,这使得播放器的主程序与解码器模块具有相对独立性。当需要增加一种新的媒体播放类型时,只需要按照封装接口,编写要添加的解码器插件即可,而不需要对播放器的主程序做任何改动,这就使得播放器的可扩展性增强。只要在解码器选择方面,可以将解码器种的所有解码插件通过注册函数注册到插件接口模块上,这样,就可以根据输入文件的扩展名和文件的头信息选择合适的解码器,之后实现媒体数据的播放。界面设计图形用户界面窗口以Qt/Embedded为基础开发,通过调用Qt/Embedded提供的类库根据需要设计可以管理多媒体文件的基本窗口,包括打开、删除、显示文件长度、显示播放时间等窗口,以及为方便用户设定的管理播放列表、进行播放控制的窗口,这些都是直接和用户打交道的,由于采用Qt/Embedded最为广泛使用的GUI,可移植性得到了保证。本程序的主界面分别是由用户播放控制区域和视频图像显示区域组成。包括的窗口部件包口:菜单栏、按钮栏、进度条、视频播放界面、文件添加界面等。用户播放控制区域主要包括播放控制按钮和弹出菜单,是由GTK+来负责创建控件,设置控件属性并显示窗体,主要的功能包括打开文件、打开URL、播放、停止、暂停、播放位置导航、音量调节等。视频图像显示区域通过SDL来完成图像的显示。在界面的布局上可以自行调整,也可以采用布局管理器方式,这里简单介绍一下布局管理器方式,它为窗口部件提供了有感知的默认值,对子窗口部件的大小和位置做出适当的调整。所以布局管理器方式是对设计图形化用户界面、组织管理界面窗口部件是最好的方法。布局管理器方式主要有四种管理器:水平布局管理器(QHBoxLayout),按水平的方向组织管理窗口部件;垂直布局管理器(QVBoxLayout),按垂直方向管理窗口部件;网格布局管理器(QGridLayout),按二位网格方式组织管理窗口部件;站布局管理器(QStackedLayout),按照一种类似于栈的方式组织管理窗口部件,在某一时刻只有一种窗口部件是可见的。在本程序中界面的设计采用了基本的水平布局管理器和垂直布局管理器。模块设计输入模块输入模块主要是响应用户通过图形界面发出的文件打开命令,主要是对用户指定的文件进行读取和解析,将获得文件的长度、播放时间、编码格式等内容,结合MIME的处理,显示预先设计的窗口中。它将获得待播放文件的文件路径和文件名。在此之后,它将首先判断文件的路径是否合法,文件是否为空,如果文件路径不合发或文件为空,输入模块将退出执行,其他模块和界面将没有变化。如果文件路径合法同时文件不为空,它将开始对播放进行初始化,初始化结束后它将向插件接口模块发出信号,通过其查找该文件的可用解码器,为文件解码做好准备。输出模块输出模块主要功能是将通过解码器解码之后的音频和视频数据送到输出设备输出。根据输出内容的不同可划分为音频数据和视频数据。这两个部分基本上是相互独立输出的。之后他们分别调用音频解码器和视频解码器进行解码。通过插件接口模块的同步控制让它们在说输出时保持同步。再分别通过音频和视频输出设备输出。视频输出的主要步骤:1.根据屏幕尺寸创建两个对象,一个用于存放当前帧,一个用于旋转帧;2.检查解码以后的视频数据是否已经准备就绪;3.判断当前帧是否可见,若不可见直接等待可输出的下一帧;4.获取视频画面的长和宽,以便来设置输出还的长宽比,如果文件画面尺寸比软件的画面大,程序会自动适应文件的画面尺寸,当用户选择全屏播放时,会按照比例把画面扩大至全屏,当然用户也可以用拖拽来自定义播放画面的大小。5.把等待输出的区域上空清空,并且为创建的对象分配区域。6.将准备好的帧发送到步骤5分配好的区域,以便输出到显示设备上。插件接口模块插件接口模块通过输出文件的扩展名和文件的头部信息来判断该输入文件是否被播放器所支持;对解码模块种的所有解码器进行注册;能够获取播放文件的信息。能够停止播放文件,并做出相应的处理;能够调用解码器对音频采样数据进行读取,能够调用解码器对视频帧进行读取等。插件接口调用主要是把所有对解码器的操作整合到一个统一的开放式接口当中,根据上一部分解析出的文件信息区查找相应的解码器插件并调用,如果没有找到可用的解码器可以返回信息提醒用户添加相应的插件。通过实现这样的接口可以使播放器的扩展性大大提高,因此本部分是播放器的核心。由此该模块实现了两种接口函数,一种是用于处理网络流媒体数据的网络传输协议接口,另一种是负责处理本地媒体文件的接口。本地文件接口主要负责从存放在本地文件系统中的媒体文件中读取媒体数据,经过对数据进行简单的分析之后,再交由音视频解码模块进一步的处理;网络流媒体传输接口则负责实现网络流协议的客户端协议部分,将待实现的网络传输协议按照统一的接口进行封装就可以扩展其处理更多种协议的功能,所以具有一定的扩展性。另外需要一个系统主控模块,主要功能是过图形用户界面模块为用户提供一个播放器的控制接口,另一方面负责协调管理图形用户界面、音视频解码、数据访问这三大模块良好的协同工作。播放器在播放过程种会涉及到几种播放状态的转换,包括播放、暂停、停止,在播放流媒体数据时还会涉及到超时的状态,通过系统管理主控模块对其它几个模块的协调调度,实现播放状态的转换。解码库模块解码库模块的主要作用是对音频和视频的已压缩数据进行解码。解码库又含解码器和分离器,用于对各种多媒体文件进行解码。。解码器就是对音频视频数据流进行解码的组件,分离器就是把文件流中的数据分离为音频视频数据流的组件,音频数据和视频数据是分开解码的,二者缺一不可。该模块采用统一的接口将所有解码器的程序进行封装,也采用动态加载的方式实现各自数据的解码。播放器功能的实现界面的详细开发过程:通过定义QLable的对象制作播放窗口;定义QListWidget的对象控件制作播放列表;定义QPushButton的对象制作按钮;定义QSlider的对象制作声音控制条和播放进度控制条。设置界面大小#include<QtGui>#include<QtWidgets/QtWidgets>#include"movieForm.h"intmain(intargc,char**argv){QApplicationapp(argc,argv);QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));MovieForm*movieForm=newMovieForm;movieForm->show();returnapp.exec();}resize(720,480);//界面大小setWindowTitle("Mplayer");//设置窗口标题为Mplayerview=newQLabel("",this);view->setGeometry(QRect(30,30,480,335));timeLabel=newQLabel(this);timeLabel->setGeometry(QRect(30,370,200,20));//添加文件栏percentLabel=newQLabel(this);percentLabel->setGeometry(QRect(180,370,50,20));//控制栏声明槽函数voidnext();voidpre();voidpause();voidstop();voidchangeVolume(int);voidsetSpeed();voiddataRecieve();voidcurrent(int);voidjumpByTime();voidsureBtnClicked();voidplayListItem(QListWidgetItem*);voidadd();voiddel();声明及添加按钮:QPushButton*p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024至2030年中国热风循环烘箱行业投资前景及策略咨询研究报告
- 2024至2030年中国涂层铝行业投资前景及策略咨询研究报告
- 2024年三极插头项目可行性研究报告
- 医院运营部年终总结
- 2024至2030年中国国标阀门行业投资前景及策略咨询研究报告
- 2024至2030年中国咖啡磨行业投资前景及策略咨询研究报告
- 2024至2030年斜边机磨轮项目投资价值分析报告
- 2024至2030年中国分离式切割工具行业投资前景及策略咨询研究报告
- 2024至2030年双向预调式扭矩扳手项目投资价值分析报告
- 2024至2030年中国五分类血细胞分析仪行业投资前景及策略咨询研究报告
- 金属冶炼知识培训
- 2024-2025学年度广东省春季高考英语模拟试卷(解析版) - 副本
- 商会内部管理制度
- 2024年物业转让协议书范本格式
- 幼儿园小班健康《打针吃药我不怕》课件
- 广州英语小学六年级英语六上册作文范文1-6单元
- 2025届上海市宝山区行知实验生物高一上期末教学质量检测模拟试题含解析
- 三甲级综合医院绩效工资分配与考核实施方案
- 学术道德与学术规范考试答案(参考)-3
- 期末考试-2024-2025学年语文四年级上册统编版
- 《司马光》公开课一等奖创新教案
评论
0/150
提交评论