基于qt的嵌入式多媒体播放系统.docx

上传人:b****6 文档编号:4766667 上传时间:2022-12-08 格式:DOCX 页数:41 大小:1.29MB
下载 相关 举报
基于qt的嵌入式多媒体播放系统.docx_第1页
第1页 / 共41页
基于qt的嵌入式多媒体播放系统.docx_第2页
第2页 / 共41页
基于qt的嵌入式多媒体播放系统.docx_第3页
第3页 / 共41页
基于qt的嵌入式多媒体播放系统.docx_第4页
第4页 / 共41页
基于qt的嵌入式多媒体播放系统.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

基于qt的嵌入式多媒体播放系统.docx

《基于qt的嵌入式多媒体播放系统.docx》由会员分享,可在线阅读,更多相关《基于qt的嵌入式多媒体播放系统.docx(41页珍藏版)》请在冰豆网上搜索。

基于qt的嵌入式多媒体播放系统.docx

基于qt的嵌入式多媒体播放系统

基于Qt的嵌入式多媒体播放系统

 

当前社会,随着相关技术的发展以及经济的发展和精神文明水平的提高,越来越多的人越来越注意到了精神生活的享受。

视频、音乐是人们首选的选择;也因为科学技术的发展,越来越多的嵌入式设备进入了人们的生活,它的体积越来越小巧,而功能越来越强大,功能也越来越丰富。

市场上的多媒体播放设备也越来越多,价格也越来越便宜、美观。

如此丰富的产品让人应接不暇,不知如何购买,所以很多人往往是注重外观的美观和嵌入在其中的软件操作体验,而对其倾心购买。

所以说良好的用户体验不仅仅可以提高市场的占有率,而且也是一种产品文化的体验以及技术水平的体现。

受不受欢迎也反映出了社会精神文化的一种体现。

随着精神文明的建设,人们的操作体验上越来越苛刻,功能上也越来越严格,不仅要良好地品质,还要良好地体验。

然而岁月无情的向前行进,新生一代终将取代上一辈的前辈,年轻人朝气蓬勃,对精神享受的程度也高于上一辈,所以当前对嵌入式设备的需求也越来越大。

本课程设计以当前对嵌入式多媒体设备需求量大为背景,提出了一个基于QT的适用于嵌入式设备的多媒体播放系统的架构设计方案。

论文给出了一种嵌入式系统中音频视频同步的解决方案,有效的提高了嵌入式多媒体播放系统的音频视频同步性能,在此基础上设计并实现了基于linux/Qt的嵌入式多媒体播放器,实现了基于Qt的嵌入式多媒体播放器系统。

在本课程设计中,我们基于linux平台,提出了基于著名的mplayer播放器上在Slave模式下,给用户一个良好的操作界面,实现对mplayer的相关功能的操作,比如暂停、快进、上下曲的切换等功能。

关键词:

Qt;多媒体播放器;嵌入式

 

ABSTRACT

 

Society,withthedevelopmentofrelatedtechnologies,aswellaseconomicdeve-lopmentandraisethelevelofspiritualcivilization,moreandmorepeopleareincreasinglyawareofthespiritofenjoymentoflife.Video,musicisthepreferredch-oiceofthepeople;butalsobecauseofthedevelopmentofscienceandtechnology,moreandmoreembeddeddevicesintopeople'slives,it'smorecompactsize,whilethemorepowerful,moreandmorefunctionsrich.Alsomoreandmoremultimediadevicesonthemarket,pricesaregettingcheaper,andbeautiful.Sorichpeoplecouldattend,Idonotknowhowtobuy,soalotofpeopletendtofocusontheappearanceofthebeautifulandembeddedsoftwareoperatingexperience,itscordialbuy.Soagooduserexperiencenotonlycanimprovemarketshare,butal-soaproductofculturalexperienceandtheembodimentofthetechnicallevel.Arepopularalsoreflectsareflectionofthesocialspiritoftheculture.Withtheconstructionofspiritualcivilization,moreandmoredemandingontheoperatingexperienceofthepeoplefunctionmoreandmorestrict,notonlytogoodquality,butalsoagoodexperience.However,yearsofrelentlessforwardmarch,theyoungergenerationwilleventuallyreplacetheoldergenerationofpredecessors,vibrantyoungpeopleenjoythespiritofthedegreeisalsohigherthanthepreviousgeneration,sotheneedsofembeddeddevicesisgrowing.

Thiscourseisdesignedtopresentthebackground,aQT-basedontheapplicationofembeddeddevices,multimediaplaybacksystemarchitecturedesignofembed-dedmultimediadevicesdemandgreatly.Thepapergivesthesynchronizationofaudioandvideoinanembeddedsystemsolutions,effectivelyraisingtheembed-dedmultimediaplaybackaudioandvideosynchronizationperformance,designedandimplementedbasedontheembeddedlinux/QtbasedmultimediaplayertoachieveasystemofembeddedmultimediaplayerbasedonQt.Thiscourseisdesignedbasedonthelinuxplatform,raisedbasedonthefamousmplayerplayerintheSlavemode,givingusersagooduserinterfaceoperatingmplayerrelatedfunctions,suchaspause,fastforward,upanddownsongswitchingandotherfunctions

Keywords:

theQt;embeddedLinux;mediaplayer

 

目录

摘要I

ABSTRACTII

目录1

1引言1

2嵌入式多媒体播放器系统的设计2

3插件接口模块和解码库模块4

3.1插件接口模块设计4

3.1.1文件特性函数4

3.1.2获取文件信息函数4

3.1.3读取音频采样函数4

3.1.4视频帧函数4

3.1.5音视频同步函数4

3.2解码库模块5

4嵌入式多媒体播放器系统的实现6

4.1数据流程的总体设计6

4.2嵌入式音频视频同步设计7

5多媒体播放系统在PC端的实现9

5.1mplayer的安装9

5.2PC端环境的搭建11

5.3mplayer项目工程的建立与开发13

5.3.1mplayer工程的建立13

5.3.2mplayer实现原理20

5.3.3mplayer界面UI搭建22

5.3.4mplayer代码编写22

5.3.5mplayer工程编译22

5.3.6mplayer运行和功能介绍22

6总结22

参考文献22

致谢22

附录22

 

1引言

 

随着用户要求的不断提高,越来越多的嵌入式设备使用的功能强大、价格低廉的嵌入式linux作为操作系统并开始采用较为复杂的图形界面。

Linux的强大与稳定,在嵌入式领域赫赫有名,更由于其开源的特性,从而节约了不少的开发成本,和丰富的可裁剪、可定制性。

嵌入式linux设备要求低,硬件设备上没有硬件开发的局限性,从而在开发中可以实现最优的性能和性价比。

Qt以其强大地功能、良好地可移植性逐渐成为一种被广泛使用的GUI系统。

正是由于嵌入式操作系统及其相应图形界面的不断发展,嵌入式软件的开发显得越来越重要。

其中嵌入式多媒体播放器由于能满足人们的视听享受已经逐渐成为了系统中不可或缺的重要组成部分,在嵌入式系统开发多媒体播放器已经成为一个技术热点,当前许多嵌入式产品中都包含多媒体播放器。

并且随着Qt的开源,基于Qt开发的程序成本大大降低,Qt的稳定性以及功能的多样性提升了一个水平,满足了嵌入式设备价格低廉,功能强大的特性,同时Qt强大的开发功能和可移植性,实现了多平台的兼容性,可以很快移植到其他的平台上,从而节约了开发周期和成本,促进了嵌入式设备的开发水平。

因此基于Qt的嵌入式系统中实现多媒体播放器具有深刻的意义和价值。

 

2嵌入式多媒体播放器系统的设计

 

2.1架构设计

嵌入式多媒体播放器架构设计方案如图1所示。

通过使用纯C++语言来支持嵌入式linux系统,采用Qt/Embedded作为GUI来提供强大的用户界面,实现一个开放式的插件接口来增强扩展性,利用内核帧缓冲来输出,消除对特定架构的依赖,从而保证可移植性。

多媒体播放器属于上层应用程序,位于linux用户空间。

这样设计的目的是为了系统的移植性。

图形用户界面窗口以Qt/Embedded为基础开发,通过调用Qt/Embedded提供的类库根据需要设计可以管理多媒体文件的基本窗口,包括打开、删除、显示文件长度、显示播放时间等窗口,以及为方便用户设定的管理播放列表、进行播放控制的窗口,这些都是直接和用户打交道的。

由于采用了Qt/Embedded最为广泛使用的的GUI,可移植性得到了保证。

文件输入主要是对用户指定的文件进行读取和解析,将获得文件的长度、播放时间、编码格式、音视频帧率、文件标题等内容,结合MIME的处理,显示预先设计的窗口中。

插件接口调用主要是把所有对解码器的操作整合到一个统一的开放式接口当中,根据上一部分解析出的文件信息区查找相应的解码器插件并调用,如果没有找到可用的解码器可以返回信息提醒用户添加相应的插件。

通过实现这样一个接口可以使播放器的扩展性大大提高,因此本部分是多媒体播放器的核心。

文件解码和输出主要负责通过调用解码器对音视频数据流进行解码,然后利用Qt/Embedded可以直接操纵内核帧缓冲FrameBuffer的特性,将解码之后的数据通过FrameBuffer直接送到输出设备输出,避免对DirectShow、OpenGL等特定架构的依赖,进一步增强可移植性。

图1嵌入式多媒体播放器架构图

 

3插件接口模块和解码库模块

 

3.1插件接口模块设计

插件接口模块是整个播放器的核心部分,它封装了对具体解码器的操作,从而在输入和输出模块之间搭建一座桥梁,确保数据的正常流动。

插件接口模块主要提供了以下方法来控制解码器:

3.1.1文件特性函数

boolisFileSupported(constQString&filename);通过检查文件的扩展名来确定待播放的文件是否被播放器支持,若是返回真,否则返回假。

可识别的扩展名有asf、avi、mp2、mp3、mpeg、mpg、ogg、wav等。

如果添加了新的解码器插件以后就可以识别新的文件格式,只需要将其扩展名添加到此函数支持列表中即可。

3.1.2获取文件信息函数

constQSting&fileInfo();用于获取文件的各种信息并将结果保存到一个常量字符串中,便于其他函数调用。

这些信息包括:

播放时间、音频格式、音频比特率、音频通道、音频频率、视频格式、视频比特率、视频高度、视频宽度等。

3.1.3读取音频采样函数

boolaudioReadSamples(short*output,intchannels,longsamples,long&samplesRead,int);调用解码器对音频采样数据进行读取,是音频数据处理的核心部分。

Output表示待输出文件的指针,channels表示通道数,samples表示采样数,samplesRead表示待读取采样数

3.1.4视频帧函数

boolvideaReadScaledFrame(unsignedchar**output_rows,intintin_w,intin_h,intout_w,intout_h,ColorFormatfmt,int);调用解码器对视频帧进行读取,是视频数据处理的核心部分。

参数output_rows表示输出列表的指针,in_w、in_h、out_w、out_h分别表示输入和输出的帧数据的宽度和高度,fmt表示采用的色彩模式,返回值用来判断执行是否成功。

3.1.5音视频同步函数

intSync(File*fp,intauIndes,structtimeval*vtime);fp为打开的多媒体文件指针,vtime为当前正在播放的视频文件的帧头中提取的时间,auIndex指出当前的音频帧计数,即当期播放到了第几帧。

通过这些参数就可以计算出希望跳到的帧数和当前帧数的差值,然后根据这个差值将音频流向前(滞后)或向前(超前)跳即可。

同时Sync函数还会将此差值int反馈给音频解码器,让音频解码器修正数据流的时间戳,如此循环,从而达到较好的音视频同步效果。

此函数的总体思想是在播放视频数据流的同时启动另一个线程,打开对应的音频数据流播放,然后在视频线程中来同步音频数据。

此外还有插件初始化和注册函数voidpluginInit()、文件初始化函数voidfileInit()、查找函数boolseek(longpos)、清空视频数据函数flushVideo-Packets()和清空音频数据函数flushAudioPackets()、获取下一数据包函数MediaPacket*getAnotherPacket(intstream)等,这里就不做详细介绍了。

3.2解码库模块

解码库模块的主要作用是为插件接口模块提供解码器,考虑到播放器的可移植性和扩展性,本系统采用了ffmpeg解码库。

Ffmpeg解码库是linux下的一个开源解码器集合,它支持多种音频和视频解码标准,还支持转文件格式、制作avi等,功能十分强大。

可以在windows下是要使用ffshow插件,linux下的mplayer播放器都是使用ffmpeg解码库。

解码库又包含解码器和分离器。

解码器就是对音视频数据流进行解码的组件,分离器就是把文件流中的数据分离为音频数据流和视频数据流的组件,音频数据和视频数据是分开解码的,所以二者缺一不可。

 

4嵌入式多媒体播放器系统的实现

 

4.1数据流程的总体设计

图2为系统数据流程:

首先输入模块从数据流源(多媒体文件)读入数据,此时它将读入文件头,做一些基本的处理,如读出文件长度,获取此文件的编码类型、比特率,判断能否播放等;然后插件接口模块会调用分离器插件将多媒体切分为视频数据流和音频数据流;在经过视频FIFO和音频FIFO,排序处理;最后送入视、音频解码器调用相应的解码器进行解码,对于音频数据就会进行重采样,对于视频数据就会读取相应的帧,逐帧解码;之后经过采样的音频数据和经过渲染覆盖的视频数据进行音视频同步,再分别通过视、音频输出模块输出。

这其中,数据的读入、分离、解码、输出都是通过Qt提供的类库以多线程同时进行的,在解码的同时程序也在不断地将数据读入缓冲区并排序等待处理,以提高效率。

输入模块的主要功能是将用户指定的多媒体文件读入。

由于不同格式的多媒体文件需要调用不同的解码器才能正常打开,因此考虑到程序的模块化将实际的文件打开工作交给插件接口模块调用相应的解码器进行,输入模块只对文件进行一些基本的处理并对文件内容进行缓存,然后为插件接口模块输送原始数据流。

用户首先通过图形界面选定待播放文件发出打开指令,这将会使输入模块接收到一个信号并通过用户界面传回的信息获得待播放文件的文件路径和文件名。

接下来输入模块会检查文件路径是否合法、文件是否为空,之后会向插件接口模块发出信号,通知插件接口模块查找可用的解码器,为文件解码做好准备。

下一步就是进行调用初始化函数init(),其具体过程下面会详细介绍,最后就是将工作移交给插件接口模块,让它调用对应的文件格式解码器的open()函数。

输出模块的主要功能就是讲通过解码器解码之后的音频、视频数据送到输出设备(如LCD显示屏、扬声器)输出。

根据输出内容的不同可以将输出模块划分为音频输出和视频输出两个子部分。

这两个部分基本上是相互独立输出的,通过插件接口模块的同步控制让它们在输出时保持同步。

视频输出和音频输出稍有不同,它利用Qt/Embedded可以将直接控制FrameBuffer的特性来输出视频数据。

帧缓冲区是显卡上的内存,使用帧缓冲区可以提高绘图的速度和整体性能,与帧缓冲区有关的设备室/dev/vb0(主设备号29,此设备号0)。

图2系统数据流程

4.2嵌入式音频视频同步设计

本方法的基本思想是以视频为主媒体流,音频流为从媒体流,视频的播放速率保持不变,根据本系统时钟确定的实际显示时间,通过调整音频播放速度来达到音视频同步。

整个系统的音视频同步数据流程见图3。

首先选择一个本地系统时钟参考(LSCR),要求本地系统时钟参考上的时间是线性递增的。

然后将LSCR分送到视频解码器和音频解码器,由这两个解码器根据各帧的PTS值对照本地系统时钟参考产生各帧准确的显示或回放的时间。

也就是说,生成输出数据流时依据本地参考时钟上的时间给每个数据块都打上时间戳(一般包括开始时间和结束时间)。

在播放时,读取数据块上的时间戳,同时根据本地系统时间参考上的时间来安排播放。

图3音视频同步数据流程

基于时间戳的播放过程中,仅仅对早到的或晚到的数据块进行等待或快速处理,往往是不够的。

如果想要更加主动并且有效地调节播放性能,就需要引入反馈机制,也就是通过对比音视频的时间戳将当前数据流的播放状态反馈给上层的“源”。

如果音频流滞后,就即时通知音频解码器加快音频流输出,但如果滞后太多,则直接将当前数据丢弃,直接跳到下一帧;如果视频流滞后,就通知音频解码器减慢音频输出速度等待视频流,如之后太多也直接进行跳帧。

数据流首先通过分离器分解为视频数据流和音频数据流,然后经过对应的解码器,同时由本地系统时钟来进行时间戳控制;获得准确显示或回放时间以后进行时间戳比较;若同步则直接输出,不同步则进行音频跳帧或等待,直到同步后输出。

 

5多媒体播放系统在PC端的实现

 

Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面的应用开发框架。

它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。

Qt是面向对象语言,易于扩展,并且允许组件编程。

2008年,奇趣科技被诺基亚公司收购,Qt也因此成为诺基亚旗下的编程语言工具。

Qt支持windows平台、linux/unix平台、macintosh平台、Embedded平台等,所以Qt所开发的应用具有有良好地可移植性。

目前最新的版本是Qt4.7.4。

官方下载地址是:

CentOS:

CentOS(CommunityENTerpriseOperatingSystem)是Linux发行版之一,它是来自于RedHatEnterpriseLinux依照开放源代码规定释出的源代码所编译而成。

由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的RedHatEnterpriseLinux使用。

两者的不同,在于CentOS并不包含封闭源代码软件。

在本项目中,采用的事CentOS5.6。

5.1mplayer的安装

在环境搭建之前我们先要安装mplayer所需的插件和相关的解码库。

首先将MPlayer-1.0rc2.tar.bz2、libmad-0.15.1b.tar.gz拷贝到主机即centOS5.6中,进行如下操作:

#tarxvfzlibmad-0.15.1b.tar.gz

#cdlibmad-0.15.1b

#./configure

#make

#mkdir/lib/lib

#mkdir/lib/include

#cp.libs/libmad.a/lib/lib

#tarxvfjMPlayer-1.0.rc2.tar.bz2

#cdMPlayer-1.0rc2

#./configure--with-extraincdir=/lib/include--with-extralibdir=/lib/lib

#make

#makeinstall

此时可以试着播放一下mp3、avi等文件了

#mplayer–acmad1.mp3

#mplayer–acmad2.avi

下面是运行mplayer后MP3、avi音视频的效果。

图4为mp3音频效果图,图5为avi视频效果图,从结果可以看出我们无法对mplayer进行相关的操作和控制。

图4mplayer播放mp3效果

图5mplayer播放视频效果

从上面的结果可以看出,mplayer虽然可以播放mp3相关的功能但是我们不能对其进行相关的操作,界面不友善,所以我们需要对其进行优化,加上界面实现对多媒体文件进行相关的操作,实现与多媒体文件进行友好的交流

5.2PC端环境的搭建

主机环境:

CentOS5.6

交叉编译工具:

gcc-3.4.5-glibc-2.3.6

主机编译工具:

gcc-4.1.2

本小结主要是介绍如何在CentOS5.6环境中搭建Qt开发环境,将Qt_SDK_Lin32_offline_v1_1_4_en.run软件包拷贝到CentOS

双击即可开始安装。

点击next,选择custom安装如图6所示,选择所需的开发工具,如图7所示,接着点击下一步即可,直到安装完成。

 

图6选择自定义安装方

图7开发工具的选择

现在让我们熟悉我们所要开发的开发环境:

上面的qtopia编译安装完成后,会在咱们前面创建的target目录下生成很

多开发工具。

先看一下供主机端使用的工具

[root@localhostbin]#pwd

/home/linux/Qtopia/target/qtopiacore/host/bin

[root@localhost bin]#ls

assistantlinguistlupdateqmakerccuic

designerlreleasemocqvfbtemplatesuic3

如果系统以前有其它qt开发工具,把环境变量修改一下,保证它们不要和我们这几个工具冲突。

下面可以试一下你的designer了。

#./designer

5.3mplayer项目工程的建立与开发

好像其他开发环境一样,Qt的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1