首页 基于QT多媒体播放器设计

基于QT多媒体播放器设计

举报
开通vip

基于QT多媒体播放器设计本科毕业论文(设计)(2013届)题目:多媒体播放器的设计学院:机电与信息工程学院专业:电子信息工程学生姓名:yu学号:20906021075指导教师:xxx职称(学位):工程师合作导师:xxx职称(学位):讲师完成时间:2013年月日成绩:黄山学院教务处制学位论文原创性声明兹呈交的学位论文,是本人在指导老师指导下独立完成的研究成果。本人在论文写作中参考的其他个人或集体的研究成果,均在文中以明确方式标明。本人依法享有和承担由此论文而产生的权利和责任。声明人(签名):年月日目录摘要1英文摘要21引言32Qt设计简介3...

基于QT多媒体播放器设计
本科毕业 论文 政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载 (设计)(2013届) 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 目:多媒体播放器的设计学院:机电与信息 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 学院专业:电子信息工程学生姓名:yu学号:20906021075指导教师:xxx职称(学位):工程师合作导师:xxx职称(学位):讲师完成时间:2013年月日成绩:黄山学院教务处制学位论文原创性声明兹呈交的学位论文,是本人在指导老师指导下独立完成的研究成果。本人在论文写作中参考的其他个人或集体的研究成果,均在文中以明确方式标明。本人依法享有和承担由此论文而产生的权利和责任。声明人(签名):年月日目录摘要1英文摘要21引言32Qt设计简介32.1研究背景32.2设计的目的和意义32.3论文的主要 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 和设计目标43多媒体播放器的设计43.1软件架构设计43.2播放器实现总体设计53.2.1音视频播放系统 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 53.2.2音视频实现原理63.3播放器设计中基本函数接口74多媒体播放器的实现84.1播放器界面设计84.1.1界面UI设计84.1.2界面外观设计94.2播放器功能设计104.2.1基本功能设计104.2.2播放器播放文件选择114.3音视频播放设计测试及其效果12总结13参考文献13附录14多媒体播放器的设计机电与信息学院电子信息工程xxx(20906021075)指导老师:xxx(工程师)摘要:目前常见的多媒体播放器多种多样,各具特色。但都存在一些缺点,例如使用的内容空间较大、播放文件格式支持少和界面不友好等等。QT因其功能的强大和移植性强的有点逐渐广泛使用在GUI系统开发中。因此在Linux系统嵌入式环境下基于QT的多媒体播放器设计具有实用价值。本设计是在Linux下使用QT技术进行GUI设计,利用QTcreator软件编程实现一个图形界面,完成一个简单的多媒体播放器的设计。该设计基于QT集成开发环境,利用系统的函数接口来编程、具有体积小、支持的播放格式多、系统占用资源少、支持播放列表编程等功能。关键词:多媒体;播放器;嵌入式;QT;GUI设计TheDesignofMultimediaPlayerYuZeQingDirector:SunGaoXin(Dept.ofelectricalandInformation,HuangShanuniversity,HuangshanChina245041)Abstract:Thecommonmultimediaplayerhaveavarietyofdifferentfeaturesatpresent.Buttherearesomedisadvantages,Suchastakingupalotofresource,lesssupportformatandit’sinterfacebloated.ButQTwithitspowerfulfunctionsandgoodportabilityhasbecomeawidelyusedGUIsystems.ThereforemultimediaplayerbasedonQTembeddedLinuxsystemhasbecomingameaningfulthings.Inthisarticle,theGUIdesignofLinuxgraphicalinterfacebasedonQT,Forexample,ItusetheQTcreatorsoftwareprogrammingasimplemultimediaplayer.TheplayerMplayercommandinterfacebasedonQTintegrateddevelopmentevvironment.ThisMplayerissmall,butitsupportmuchplaybackfileformats,occupylesssystemresources,supportforplaylistsandsomeotherfunctions.KeyWords:Embedded;Qt;MediaPlayer;multimedia;GUIdesign1引言嵌入式以及其技术是在计算机、半导体、电子产品技术和数字图像处理等技术在个领域、行业应用在具体产品开发的技术。在当今数字技术、信息技术和网络技术高速发达的时代里,嵌入式技术在各领域。各行业都得到了广泛的应用。随着嵌入式产品设备的不断更新,Linux在嵌入式中因其内核微小、设计模块化在一定程度上满足了嵌入式产品设备的要求,并慢慢获得很多开发者的赞同,特别是在电子消费类产品、汽车行业及工业控制领域、无线通讯终端、网络产品、路由器和交换机中的使用。为了在不同的系统中都能发挥到作用,人们可以对其系统进行开发,尤其是在应用领域的开发和使用。在当今市场上便捷式播放器有很多,如:MP3、MP4等产品。其功能比较单调,文件播放格式支持的非常少,使用起来会有许多的不方便。为了解决市场上常见产品的一些不足,本设计就使用QT工具来实现一个多媒体播放器,在Linux环境下,此播放器不尽支持格式多样、同时还设计了友好的用户使用界面。从外观和功能上来说满足了用户的基本要求。2Qt设计简介2.1研究背景由于Linux系统内核对各种产品设备都具有支持性,因此,该系统内核能使用于路由器、机顶盒、手机、平板电脑、POS系统以及工业控制等软件信息类产品开发。此次设计主要是在Linux环境下使用Qt工具实现的多媒体播放器设计。这也是本文需要先从Linux系统说起的必要所在。随着芯片使用技术的快速发展,嵌入式系统的开发的使用增多、其性能得到提高,功能也慢慢丰富起来。嵌入式系统应用领域和行业带给人们的日常生活方便,慢慢地改变了人们的生活方式,提高人们的生活质量。在工业领域,消费类电子产业,更新换代的速度进一步的加快,市场的总体需求量进一步扩大。在早期MP3随身听成功后取得巨大的市场,此后支持视频功能便捷式播放器逐渐得到消费者的青睐,成为继MP3之后的有一成功和突破。因MP3的缘故,人们一直以来将这中多媒体播放器称为MP4。新一代MP4的开发有着广阔的前景和市场潜力,从而使得很多的开发商所看好并加大投入进行研发,最后把其推向市场产生价值。随着嵌入式系统的流行和其独特的优点得到了许多开发者的喜爱。使得嵌入式系统开发在当今IT行业成为主流思想。同时在消费类电子产业快速发展的情况下,对于多媒体播放器的需求更加多样。各大开发公司都着力于开发Linux环境下的多媒体播放器。在我国,随着电子产业和IT行业的逐渐成熟。对嵌入式开发的需求量也不断的增加,对于播放器的开发需求也在不断的开发和进步。2.2设计的目的和意义目前,嵌入式系统是在一个快速发展的时代,激烈的竞争,这种竞争和发展在未来几年将继续发展和激烈。嵌入式系统市场和技术的发展很快,国外技术发展的步伐更加成熟,市场基本形成。国内的发展速度也很快,市场有很大的潜力。在国外的一些发达国家,高水平的硬件,尤其是在嵌入式CPU的处理能力上,从原来的8位到16位再到32位,发展速度很快。掌上电脑、智能设备等新产品的涌入市场,使得产业规模进一步扩大和发展。国内的嵌入式硬件需求基本是靠进口来满足,技术相对较弱。但是,如今国内外都有自己推出的嵌入式系统,都在为自己在这个产业争取一份额而努力。而其中Linux以其公开的系统内核源代码而得到广泛的重视和使用,发展前景非常乐观。在国内,大型的嵌入式系统非常少,今后的开发重点可能转向基于Internet的各种信息和嵌入式操作系统领域,包括Internet、网上交易、Iphone和平板电脑等。在这样的时代环境下,本文就实现了在嵌入式系统下基于Qt的多媒体播放器的实现,基本实现了一个便捷式的多媒体播放器的设计。2.3论文的主要内容和设计目标本文就是基于Linux操作系统运用Qt开发工具来实现一个便捷式的多媒体播放器。首先运用Qt的C++GUI编程实现此多媒体播放器的外观和外形设计,基本实现一个多媒体播放器的外形和框架。其次,在Qt工具中运用一些类、槽函数的使用来实现播放列表和播放功能、以及多格式化的支持功能。最终目标是实现一个方便易用的便捷式多媒体播放器,我们可以利用此播放器进行一些视频、音乐的播放。同时要实现多格式的支持。由于此播放器是基于Linux操作系统的,其移植性强可以在我们所需要的设备上进行相应的移植,增大了此播放器的应用功能。3多媒体播放器的设计3.1软件架构设计嵌入式多媒体播放器软件架构设计如图3-1所示。本设计主要使用C++编程来支持Linux系统环境,通过Qt作为GUI开发播放器的用户界面设计,应用层使用通过调用系统的函数接口来支持。此种设计保证了播放器在Linux环境下的可移植性和可扩展性,增大了软件的实用性。用户图形界面操作窗口使用Qt工具来开发,通过Qt提供的图形库来设计多媒体播放器的管理、应用基本窗口,主要实现打开、播放、暂停、停止功能的按键设计。同时在软件内部实现对于这些功能的支持和实现。还有对用户设定的播放列表、播放文件的选择等功能的支持。而这些设计都是基于Qt作为GUI设计的,因此移植性得到了基本的保证。用户输入主要是用户选择播放文件,播放器软件对其进行读取,根据设计的功能来实现相应的响应,做出用户指定的处理。如:选择播放文件、对按钮的输入、打开、关闭等操作。也就是说在用户界面所能进行的一切操作都是属于用户输入,只要设计中设计了处理方式,播放器都会给出相应的响应。系统函数接口的调用主要是为了实现上层软件结构和下层结构之间的联系功能。在此播放器设计中,其主要是提供底层函数调用接口和解码器调用。通过这些函数接口使得可以把跟解码有关的函数集中起来,通过函数接口来调用。播放器根据播放文件的不同选择不同的解码器,如果找不到所需的解码器则通过这些函数反馈信息提示用户。通过函数接口的使用使得设计的可延续性得到保证。文件解码和输出时解码器进行解码后对于音视频文件数据流的输出。在QT设计中对于内核帧缓冲区是可以直接操作的。所以可以把解码后的数据通过帧缓冲区输送到输出设备上去,完成整个设计的解码输出功能。SHAPE\*MERGEFORMAT图3-1嵌入式媒体播放器软件架构3.2播放器实现总体设计3.2.1音视频播放系统流程播放器播放文件系统流程如图3-2所示:音视频文件首先从输入模块通过用户操作读入数据。通过读入数据的文件头,输入模块做一定的处理,获取相应的信息,如:播放文件的编码类型、文件的长度等信息。再判断播放器是否支持播放此文件。如果可以,则函数接口调用分离器对音视频信号进行分离。音频数据流和视频数据流分别通过音频队列和视频队列进行排队等候。再通过对应的音频、视频解码器进行解码操作。再把解码后的音频信号和视频信号进行整合处理,实现同步输出到缓冲,再分别从相应模块输出。设计中,音视频数据流的读入、解码、输出都是在Qt中使用多线程的方式来实现的,即在解码的同时不断读入数据流进入缓冲区等待解码,这样使用缓冲区的功能来提高解码的效率。由于播放文件的格式不同使用的解码器不同,当输入模块读取用户指定的播放文件时。只有格式与解码器相匹配才能正确打开。而在输入模块中主要完成对数据的读取,其最后还是把原始的音视频数据传到了缓存中。实际打开这些文件的是通过接口函数调用解码器进行的。用户通过界面操作选择播放文件进行打开操作指令,输入模块接收用户操作信号来得到播放文件的文件名、文件格式等基本信息。同时检查文件名以及文件格式等是否合法,播放文件是否是空档文件等。之后函数接口才开始调用启用解码器进行解码操作。通过函数接口调用初始化函数对播放器进行初始化,为文件的解码和播放做好预先准备。输出模块主要包括两部分,即音频输出部分和视频输出部分。这都是根据输出的内容来划分的。显而易见,输出为音频则通过音频模块,若为视频则经过视频模块。其功能就是为解码后音视频信号的输出做服务。这两个部分再设计上也是独立分开的。虽然解码后会对其进行同步处理,但同步后输出的介质不同。音频信号通过音频输出通道再通过外部的喇叭等音频输出器输出,而视频信号则通过视频通道输出。通过函数接口调用来控制音视频的同步。保持较为理想的音视频同步播放效果。SHAPE\*MERGEFORMAT图3-2播放器系统流程3.2.2音视频实现原理本实现原理围绕主从媒体流为中心,主媒体流为视频流,从媒体流为音频流。其中视频信号的解码速度保持不变,通过系统时钟确定实际的时间。为了能使音视频同步,必须调整音频的输出速度。通过选择一个线性递增的本地系统时钟作为参考(LSCR)。作用于视频解码器和音频解码器中。然后依据各帧的值比对本地时钟的参考值。即在生成输出数据流时在每个数据库块上标记开始时间和结束时间。播放这些数据时,依据数据块上的时间来播放。由于在播放过程中,仅仅对于早到或者晚到事务数据块做处理,这样处理存在很多的不同,是远远不够的。所以为了有效的调节控制多媒体播放器的性能,再设计中加入反馈机制,通过反馈当前播放数据的播放状态来实现反馈机制。若音频信号滞后,则反馈通知加快音频的解码速度。若为视频信号滞后则反馈通知音频信号减慢解码速度来等待视频信号的同步。若其中任何一方滞后太多则直接跳转到下一帧执行。在分离器的分离下,数据流分解为音频数据和视频数据。通过对应的解码器解码后,通过比对当前系统的系统时钟,获得准确的显示时间再进行比对。若二者同步则输出,不同步则音频信号进行等待或跳帧处理,直到处理后达到同步才会输出。3.3播放器设计中基本函数接口函数接口模块是真个播放器设计中的一大重点,其中包含了解码器的调用和底层函数的调用。在应用层功能实现和底层调用中起到一个通道的作用。同时也连接上了输入和输出模块,使得数据流可以从输入到输出进行流动,保证播放信号的流动性和连续性。函数接口模块的几个重要的接口:1)检查播放文件是否可支持boolisFileSupported(constQString&filename)通过判断文件的后缀名来断定播放器是否支持需要播放的文件,如果支持播放返回真,反之则返回假。可以识别的文件类型有MP3、MP4、MPG、RMVB等。如何使用新的解码器增加了文件格式的支持,只需要将新支持的文件类型名添加到函数的支持列表中。2)播放文件的信息函数constQString&fileInfo()用于获得需要播放音视频文件的基本信息并将其保存在一常量字符串中,这些便于其他函数去调用和使用相关信息。与音视频相关的信息主要包括:音视频的格式、音视频的频率、播放时间、音视频通道等。3)音频处理函数boolaudioReadSamples(short*output,intchannels,longsamples,long&samplesRead,int)音频的处理工作也是本设计中必须借用的一个函数接口,其也包括利用解码器对音频数据进行处理以及读取。函数中的参数output表示输出文件的指针,channels表示音频处理的通道数,samples表示音频采样处理中的采样数。函数的整体功能由解码器来支持和完成。4)视频帧处理函数boolvideoReadScaledFrame(unsignedchar**output_rows,int,int,intin_w,intin_h,intout_w,intout_h,ColorFormatfmt,int)调用解码器对视频帧进行处理和读取,是播放器设计中视频处理部分的核心。参数数output_rows表示输出列地址的指针,in_h、in_w、out_h、out_w分别表示输入和输出帧的高度和宽度,fmt表示使用的色彩模式,是否执行成功由返回值来确定。如果返回值为真则执行成功,反之则执行不成功。5)处理音视频同步函数:intSync(File*fp,intauIndex,structtimeval*vtime)此函数中fp为一文件描述符,用于程序中使用文件的操作代号。vtime表示播放视频文件的帧头时间,以及auIndex表示的是当前播放文件的音频部分的帧数目,标示播放所到帧的位置。通过参数可以计算当前帧与期望帧之间的间距,通过间距来完成对音视频播放的跳转。此设计中的跳转功能也是基于这一基本原理实现的。同时此函数还会将这个int型差值返回给音频解码器使用,让音频解码器跳转音频的帧时间,如此反复的循环,来达到我们满意并较好的音视频同步效果。此函数的主要作用是在播放器播放视频的过程中同时启动一个线程来供音频使用,以此来达到音频、视频同步播放的功能。同时函数返回值为我们希望到达位置与当前位置的一个差值,这样更利于解码器对其数据的使用。此函数为播放器设计过程中一个核心函数,起到的作用也是非常大的。在函数接口调用中还有一些其他比较重要的函数,例如用来注册的函数voidpluginInit()、用来改变事件处理的函数voidchangeEvent(QEvent*e)、查找文件函数boolseek(longpos)、初始化待播文件函数voidfileInit()、清空音视频数据函数flushAudioPackets()和flushVideoPackets()等等。在函数接口系统中还有许多的函数,上面所涉及到的是本次设计中比较重要的几个接口函数。4多媒体播放器的实现4.1播放器界面设计此多媒体播放器界面设计主要包含界面UI设计和外观设计,界面UI设计是在Qt中利用已有的图形库图形进行拖放形成的一个简单而简洁的播放器界面。主界面的外观设计主要是对UI设计的一个升华,如对界面按钮的格式列表,以及界面UI的美工化等等。4.1.1界面UI设计播放器设计首先要解决的是界面问题。有两种方法,一种是比较老套而传统的,即把mplayer界面代码化,通过修改里面的代码来编写界面,这样我们做的界面就可以和mplayer设计在一体。但对于图形化的界面设计采用代码编写可以说是比较痛苦而且效率很低的,同时写出的界面不一定有想想中的美观。而且修改起来比较繁琐和麻烦;第二种方法就是mplayer所谓的UI模式。使用Qt工具来实现,外观界面可以通过其图形库直接进行拖放和排列,同时还可以使用格式表来对其进行美化。通过Qt的UI设计出来的外观界面不仅美观而且方便。实现同样的一个界面所需的时间大大减少,大大的提高了图形化软件设计中的效率。在两种方法的对比之下我相信没有一个设计者会选择采用代码编写界面而不使用Qt的UI界面设计。但以前也有很多的图形化软件的设计是采用代码编写的图形化界面,这些都是基于人们对于类似于Qt的一些图形库使用和了解较少。有了像Qt这样的图形库以后,更大的方便了我们日常开发的需要。改变了面对图形化软件开发时的种种困难因素和重复劳动。本播放器的UI设计图形如图4-1所示。图4-1ui界面设计图4-2播放器主界面效果4.1.2界面外观设计播放器开启后首先看到的是用户操作界面,即播放器的主窗口界面,这部分的界面主要是供用户使用。在图像化界面中用户可以直观的使用播放器相关功能而不用去考虑内部是如何进行的。如从界面按钮中可以完成的播放、暂停、停止等基本操作,不用去考虑如何实现的而可以直接使用。生成文件最终以ui格式保存。生成的UI模式下的播放器界面为Qt下手动拖放并按播放器外观进行布局生成的。也是最初的播放器界面设计,在此界面下可以对界面进行修改。不过在此界面下无任何播放器的功能,仅仅是一个图形框而已。而播放器的用户界面为UI设计后有Qt编译后形成的图形化界面,即播放器的外观界面。此界面的设计也是在UI模式下对播放器外观的设计,可用一些美工手段进行加工,如使用样式表等对界面和界面按钮的美化等。编译后的界面外观如图4-2。4.2播放器功能设计此部分主要解决播放器设计中对于播放器的一些基本功能的实现,主要涉及到的基本功能包括暂停、播放、停止、快进快退拖拉、全频播放功能等。在Qt图形化设计的后面加以程序的开发来实现这些功能。4.2.1基本功能设计1、暂停功能以下代码是针对于播放器的暂停功能设计的:voidVideoWidget::mypause(){m_MediaObject->pause();}按下pause按钮通过槽函数启动上面代码,如果此时播放器处于播放状态则暂停播放功能,如果此时处于暂停状态则立即恢复播放状态。2、获取播放文件的总时间和当前播放进度voidVideoWidget::myplay(){qWarning("Play");m_MediaObject->play();}通过如下代码即可读出我们需要的信息:connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(back_message_slots()));当process可以有信息读取时,发出信号,通过槽函数back_message_slots来读取相应的信息。voidMPlayer::back_message_slots(){while(process->canReadLine()){3、播放、停止功能voidVideoWidget::myplay(){qWarning("Play");m_MediaObject->play();}voidVideoWidget::mystop(){m_MediaObject->stop();}4、播放器界面初始化voidVideoWidget::sizeHint(){resize(320,240);}5、静音功能下面代码即可实现快进功能:process->write("mute0");//开启静音process->write("mute1");//关闭静音6、全屏化功能voidVideoWidget::setFullScreen(boolf){m_VideoWidget->setFullScreen(f);}7、鼠标双击窗口全屏化功能voidMyVideoWiget::mouseDoubleClickEvent(QMouseEvent*){if(isFullScreen()){exitFullScreen();move(0,0);resize(parentWidget()->size());}else{enterFullScreen();}}此代码主要是连接鼠标的操作,实现对鼠标的控制。当双击鼠标时如果界面不是全屏即可实现播放器界面的全屏化,如果双击时已经是全屏模式,则双击后回到初始状态。4.2.2播放器播放文件选择打开播放器后显示主界面,在主页面上可点击选择Open打开视频音乐文件的选择列表。点击想要看的视频和想听的音乐等点击即可加入播放。播放文件的指向存储目录可在代码中修改。也可在显示的图形界面中手动选择目录,本论文的初始化目录为home/yu/media。此目录的设置可在代码设计中修改。文件列表中主要显示信息有播放文件名、文件大小、修改日期等。此列表显示出来后,可手动选择其他目录可识别的文件进行播放,但重启播放器后文件列表恢复原样。播放列表单选择如下图4-3所示。图4-3播放文件选择列表图4-4视频播放效果4.3音视频播放设计测试及其效果该模块式此设计的主要工作模块,要完成的东西很多,如要完成播放文件的添加、播放文件目录的切换、播放文件、暂停文件、停止播放等。在此设计中使用QlistWidget空间来支持播放文件列表。使用QWidget来支持播放视窗的设计,而把音视频控制在视窗内的函数为setWid(ui.playscreen->WinId())。用Qslider类来实现播放进度条的设计,播放视频中可拖动进度条来实现播放进度的进退和选择功能。播放效果如图4-4所示。通过测试可以知道播放器功能正常。打开、播放、暂停、停止、以及一些播放文件列表的选择基本功能都实现。另外对于播放屏幕的拉升、缩放以及全屏播放等功能也正常。播放视频文件中能达到音视频同步的效果,播放画面流畅,能正常使用快进快退等拖拉操作等。通过测试,本设计已完成设计任务的要求。总结本论文到此已基本完成设计所期望达到的目标,其创新有点在于此播放器是基于嵌入式Linux的播放器,具有良好的可移植性。本设计围绕所要实现的功能设计为核心,实现了播放器的基本功能,同时简洁明了,占用空间小,适用于小型电子设备中的音视频播放功能。其次,此播放器不光简洁、占用空间内存少、执行速度快,同时其具有强大的功能。如:一般播放器的基本功能以及多格式的支持。在设计中对于图形化软件的编写,本文使用Qt的GUI设计,充分体现出了Qt图形库在图形化软件设计中的优越性。在操作使用方便的同时而又不缺乏美观。此外本次设计还存在一些不足的地方,例如,缺乏艺术设计能力、界面外观的美化不够完美。参考文献[1]余雷.基于RFID电子标签的物联网物流管理系统[J].微计算机信息,2006:233-235.[2]王亚民,陈青,刘畅生等.组态软件设计与开发[M].西安:西安电子科技大学出版社,2003:90-120.[3]彭宣戈.一种嵌入式Internet接口系统[J].微计算机信息,2005:8-9.[4]王建民.基于Qt的嵌入式媒体播放器系统的设计[C].微计算机信息,2000,17(1):84-86.[5]W.RichardStevens,StephenA.Rago.UNIX环境高级编程[M],第二版.北京:人民邮电出版社,2006:45-99.[6]刘军良,潘刚,李平等.基于ARM的嵌入式Linux图形化终端设计[A].第25届中国控制会议论文集(下册)[C],2006,25(2):30-45.[7]蔡志明,卢传富,李立夏等.精通QT4编程背景[M].电子工业出版社,2008:45-86.[8]叶顺流.基于ARM的嵌入式LINUX研究与实现[M].重庆大学出版社,2005:34-46.[8]袁野,王宏远.一种嵌入式系统GUI的设计[J].计算机数字与工程,2006,34:103-105.[9]魏永明.实时嵌入式LINUX系统上GUI的发展与展望[J].微型电脑世界,2000:7-9.[10]邹思轶.嵌入式LINUX设计与应用[M].北京:清华大学出版社,2002:12-34.[11]WangH.IntelligentAgentsintheNuclearIndustry[J].IEEEComputer,1997(15):11-50.[12]JanM.Rabaey.QtReferenceDocumentation2.3.7[J].2001,12(1):12-23.附录:设计代码1、头文件videowidget.h#ifndefVIDEOWIDGET_H#defineVIDEOWIDGET_H#include<QWidget>#include<phonon>classMyVideoWiget:publicPhonon::VideoWidget{public:MyVideoWiget(QWidget*parent=0);protected:voidmouseDoubleClickEvent(QMouseEvent*);};classVideoWidget:publicQWidget{Q_OBJECTpublic:VideoWidget(QWidget*);voidsizeHint();protected:voidresizeEvent(QResizeEvent*);signals:voidnextVideo();voidstateChanged(Phonon::Statenewstate,Phonon::Stateoldstate);voidtick(qint64);publicslots:voidsetFile(QString);voidsetFiles(QStringList);voidmyplay();voidmypause();voidmystop();voidmynext();voidmyseek(qint64);voidsetScaleMode(Phonon::VideoWidget::ScaleMode);voidsetAspectRatio(Phonon::VideoWidget::AspectRatio);voidsetHue(qreal);voidsetBrightness(qreal);voidsetSaturation(qreal);voidsetContrast(qreal);voidsetFullScreen(bool);Phonon::StategetState();qint64getCurTotalTime();qint64getCurTime();voidclearAllVideo();boolisSeekable();voidsetMuted(bool);private:QStringmediafilename;Phonon::MediaObject*m_MediaObject;Phonon::AudioOutput*m_AudioOutput;MyVideoWiget*m_VideoWidget;};#endif2、videowidget.cpp#include"videowidget.h"#include<QResizeEvent>MyVideoWiget::MyVideoWiget(QWidget*parent):Phonon::VideoWidget(parent){}voidMyVideoWiget::mouseDoubleClickEvent(QMouseEvent*){if(isFullScreen()){exitFullScreen();move(0,0);resize(parentWidget()->size());}else{enterFullScreen();}}VideoWidget::VideoWidget(QWidget*parent):QWidget(parent){setAutoFillBackground(true);QPalettebpal;QColorarrowcolor=Qt::black;bpal.setBrush(QPalette::Window,arrowcolor);setPalette(bpal);m_MediaObject=newPhonon::MediaObject(this);m_VideoWidget=newMyVideoWiget(this);Phonon::createPath(m_MediaObject,m_VideoWidget);m_AudioOutput=newPhonon::AudioOutput(Phonon::VideoCategory,this);Phonon::createPath(m_MediaObject,m_AudioOutput);connect(m_MediaObject,SIGNAL(aboutToFinish()),this,SIGNAL(nextVideo()));connect(m_MediaObject,SIGNAL(stateChanged(Phonon::State,Phonon::State)),this,SIGNAL(stateChanged(Phonon::State,Phonon::State)));connect(m_MediaObject,SIGNAL(tick(qint64)),this,SIGNAL(tick(qint64)));m_MediaObject->setTickInterval(1000);}voidVideoWidget::sizeHint(){resize(320,240);}voidVideoWidget::resizeEvent(QResizeEvent*e){m_VideoWidget->resize(e->size());}voidVideoWidget::setFile(QStringfilename){mediafilename=filename;m_MediaObject->setCurrentSource(Phonon::MediaSource(mediafilename));}voidVideoWidget::myplay(){qWarning("Play");m_MediaObject->play();}voidVideoWidget::mypause(){m_MediaObject->pause();}voidVideoWidget::mystop(){m_MediaObject->stop();}voidVideoWidget::setScaleMode(Phonon::VideoWidget::ScaleModes){m_VideoWidget->setScaleMode(s);}voidVideoWidget::setAspectRatio(Phonon::VideoWidget::AspectRatioa){m_VideoWidget->setAspectRatio(a);}voidVideoWidget::setHue(qrealh){m_VideoWidget->setHue(h);}voidVideoWidget::setBrightness(qrealb){m_VideoWidget->setBrightness(b);}voidVideoWidget::setContrast(qrealc){m_VideoWidget->setContrast(c);}voidVideoWidget::setSaturation(qreals){m_VideoWidget->setSaturation(s);}voidVideoWidget::setFullScreen(boolf){m_VideoWidget->setFullScreen(f);}Phonon::StateVideoWidget::getState(){returnm_MediaObject->state();}voidVideoWidget::clearAllVideo(){m_MediaObject->clear();}voidVideoWidget::setFiles(QStringListlist){QList<Phonon::MediaSource>tmplist;for(inti=0;i<list.count();i++){tmplist<<Phonon::MediaSource(list.at(i));}m_MediaObject->enqueue(tmplist);}voidVideoWidget::mynext(){QList<Phonon::MediaSource>tmplist=m_MediaObject->queue();Phonon::MediaSourcecur_m=m_MediaObject->currentSource();for(inti=0;i<tmplist.count();i++){if(cur_m==tmplist.at(i)){m_MediaObject->stop();m_MediaObject->setCurrentSource(tmplist.at(i+1));m_MediaObject->play();break;}}}voidVideoWidget::myseek(qint64m){m_MediaObject->seek(m);}qint64VideoWidget::getCurTotalTime(){returnm_MediaObject->totalTime();}qint64VideoWidget::getCurTime(){returnm_MediaObject->currentTime();}boolVideoWidget::isSeekable(){returnm_MediaObject->isSeekable();}voidVideoWidget::setMuted(boolb){m_AudioOutput->setMuted(b);}3、widget.h#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>#include<QFileDialog>#include"videowidget.h"namespaceUi{classWidget;}classWidget:publicQWidget{Q_OBJECTpublic:Widget(QWidget*parent=0);~Widget();protected:voidchangeEvent(QEvent*e);private:Ui::Widget*ui;QStringListmedialist;intcur_index;privateslots:voidon_horizontalSlider_sliderMoved(intposition);voidon_pushButton_4_clicked();voidon_pushButton_2_clicked();voidon_pushButton_3_clicked();voidon_pushButton_clicked();voidnextVideo();voidupdateTotalTime(Phonon::Statenewstate,Phonon::Stateoldstate);voidupdateTick(qint64);voidon_pushButton_5_clicked();};#endif4、widget.cpp#include"widget.h"#include"ui_widget.h"Widget::Widget(QWidget*parent):QWidget(parent),ui(newUi::Widget){ui->setupUi(this);connect(ui->widget,SIGNAL(nextVideo()),this,SLOT(nextVideo()));connect(ui->widget,SIGNAL(stateChanged(Phonon::State,Phonon::State)),this,SLOT(updateTotalTime(Phonon::State,Phonon::State)));onnect(ui->widget,SIGNAL(tick(qint64)),this,SLOT(updateTick(qint64)));cur_index=0;}Widget::~Widget(){deleteui;}voidWidget::changeEvent(QEvent*e){QWidget::changeEvent(e);switch(e->type()){caseQEvent::LanguageChange:ui->retranslateUi(this);break;default:break;}}voidWidget::on_pushButton_clicked(){if(ui->widget->getState()==Phonon::PausedState){ui->widget->myplay();}elseif(ui->widget->getState()==Phonon::StoppedState){ui->widget->setFile(medialist.at(0));ui->widget->myplay();}}voidWidget::on_pushButton_3_clicked(){ui->widget->mypause();}voidWidget::on_pushButton_2_clicked(){ui->widget->mystop();}voidWidget::nextVideo(){cur_index++;if(cur_index<medialist.count()){ui->widget->mystop();ui->widget->setFile(medialist.at(cur_index));ui->widget->myplay();}}voidWidget::on_pushButton_4_clicked(){QStringselectedFilter;QStringListtmplist;tmplist=QFileDialog::getOpenFileNames(this,"OpenMediaFiles...","/home/yu/media",tr("AllFiles(*);;MpgFiles(*.mpg)"),&selectedFilter);if(tmplist.count()>=1){medialist=tmplist;ui->widget->mystop();ui->widget->setFile(medialist.at(0));ui->widget->myplay();}}voidWidget::updateTotalTime(Phonon::Statenewstate,Phonon::Stateoldstate){qWarning("StateChange");if((newstate==Phonon::PlayingState)&&(oldstate!=Phonon::PausedState)){qWarning(tr("setRange:%1").arg(ui->widget->getCurTotalTime()).toAscii());ui->horizontalSlider->setRange(0,ui->widget->getCurTotalTime());ui->horizontalSlider->setValue(0);}}voidWidget::updateTick(qint64m){qWarning(tr("tick:%1").arg(m).toAscii());ui->horizontalSlider->setValue(m);}voidWidget::on_horizontalSlider_sliderMoved(intposition){qWarning("Seek");if(ui->widget->isSeekable())ui->widget->myseek(position);elseqWarning("Cannotseek");ui->widget->myseek(position);}5、main.cpp#include<QtGui/QApplication>#include"widget.h"intmain(intargc,char*argv[]){QApplicationa(argc,argv);a.setApplicationName("MediaPlayer");Widgetw;w.show();returna.exec();}用户图形用户界面用户输入函数接口调用文件解码和输出帧缓冲输出设备QT视频输入缓冲区输入模块音视频分离音频音频解码视频视频输出视频解码视频声音音频输出音视频同步10
本文档为【基于QT多媒体播放器设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥16.9 已有0 人下载
最新资料
资料动态
专题动态
is_704284
暂无简介~
格式:doc
大小:362KB
软件:Word
页数:0
分类:公务员考试
上传时间:2020-07-18
浏览量:4