多媒体播放器设计.docx
- 文档编号:4440997
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:20
- 大小:781.44KB
多媒体播放器设计.docx
《多媒体播放器设计.docx》由会员分享,可在线阅读,更多相关《多媒体播放器设计.docx(20页珍藏版)》请在冰豆网上搜索。
多媒体播放器设计
xxxxx学院
本科毕业设计(论文)
题 目:
多媒体播放器设计
学生姓名:
学号:
系(部):
数学与计算机科学系专业:
计算机科学与技术
入学时间:
201 年 月
导师姓名:
职称/学位:
教授
导师所在单位:
多媒体播放器设计
摘要
本文主要是开发了一款简单的多媒体播放器。
可以播放多种格式的音频、视频文件,该播放器实现了的基本功能包括:
音频视频文件的打开、添加到菜单、媒体的播放、音量大小的调节、播放时间的拖动、暂停播放、停止等。
使之成为一款简易的媒体播放设备,能够完美的播放市面上大多数的音频、视频文件。
在毕业设计中,系统开发平台为WindowsXP操作系统,程序设计环境采用VisualStudio2010。
程序通过调试运行,初步实现了设计目标,本程序是基于MFC集成开发环境,利用directshowsdk实现媒体播放的功能的,除了基本的播放控制外,还具有全屏播放、静音等实用功能。
关键词:
多媒体;播放器;directshowsdk
TheDesignandImplementationofMultimediaPlayer
Abstract
Thisarticleisdevelopedasimplemultimediaplayer.Itcanplaymultipleformatsofaudio,videofiles,TheplayersrealizethebasicfunctionsincludethatopentheAudioandvideofiles,addtothemenu,andmediaplayback,adjustthevolumesize,playtime,drag,pause,stopandsoon.Makingitasimplemediaplayerdevice,mostaudioorvideofilesinthemarketcanbeplayedperfectlybythismediaplayer.IntheGraduation,TheSystemDevelopmentPlatformisWindowsXP,TheProgrammingEnvironmentisVisualStudio2010.Programbycommissioning,Initialdesigngoalsachieved,theprogramisbasedonMFC.IntegratedDevelopmentEnvironment.Usingthedirectshowsdkcontroltoachievethefunctionsofmediaplayer.Inadditiontothebasicplaybackcontrols,Italsohasmanyotherutilityfunctions,suchasplayingFullScreen,Muteandsoon.
Keywords:
multimedia;player;directshowsdk
多媒体播放器设计
第一章绪论
1.1引言
多媒体就是多重媒体的意思,可以理解为直接作用于人感官的文字、图形、图像、动画、声音和视频等各种媒体的统称,即多种信息载体的表现形式和传递方式。
我们所提到的多媒体技术,就是利用电脑把文字、图形、影象、动画、声音及视频等媒体信息都数位化,并将其整合在一定的交互式界面上,使电脑具有交互展示不同媒体形态的能力。
它极大的改变了人们获取信息的传统方法,符合人们在信息时代的阅读方式。
在当今信息社会,以多媒体为特征的信息技术和信息产业的发展及应用对人类社会产生的影响和作用愈来愈明显,愈来愈重要。
多媒体能改变信息的包装,实现知识信息数字化,为人们获得知识信息提供极大的方便和无穷的乐趣。
友善的人机界面、多种多样的多媒体教学软件、诱人的电子游艺节目、身临其境的多媒体导购系统、五花八门的信息家电和高效方便的网上查询等等,无不渗透着多媒体的作用,它引导人们进入了一个有声有色的世界。
同时,多媒体的发展和应用,极大地推动了各行各业的相互渗透和飞速发展,大大改变了人类社会的工作环境和生活方式。
可毫不夸张地说,多媒体产业的形成和发展,不仅引起了计算机工业的一次革命,也正在深刻地影响人类社会发生巨大的变革。
多媒体技术的发展在很大程度上依靠于多媒体软件开发的水平。
目前,不管是支撑多媒体系统的系统软件,还是管理和开发软件,以及多媒体的应用软件都在能力和数量上还难以满足多媒体飞速发展的需要。
特别是多媒体应用软件的缺乏一直是制约多媒体产业发展的瓶颈问题,因此己成为多媒体研究和开发的关键问题。
如何制作和设计出大量高质量的多媒体应用软件是计算机从业人员所面临的迫切课题,也是广大人民群众所关心的事情。
多媒体播放器的设计是一门集计算机技术和数字多媒体技术于一体的综合设计。
随着中国计算机技术、宽带网络技术的发展,越来越多的人开始重视多媒体播放器的发展与应用。
1.2系统设计的目的和意义
这个课程设计的目的就是制作一个能够播放音频、视频文件的播放器,并使它具备一些简单的操作处理功能,如播放暂停的控制,音量的调节,视频的全屏播放,视频进度的调节等等。
将这个小型播放软件做得尽量的小巧、实用。
多媒体技术是当今信息技术领域发展最快、最活跃的技术,是新一代电子技术发展和竞争的焦点。
多媒体技术融计算机、声音、文本、图像、动画、视频和通信等多种功能于一体,借助日益普及的高速信息网,可实现计算机的全球联网和信息资源共享,因此被广泛应用在咨询服务、图书、教育、通信、军事、金融、医疗等诸多行业,并正潜移默化地改变着我们生活的面貌。
多媒体技术已经成为当今比较热门的研究课题,特别是伴随着多媒体技术的网络化,使得多媒体技术的发展前景无限广阔,因此掌握多媒体及多媒体技术的相关知识,了解多媒体技术当前的发展状况及未来的发展前景,并能熟练地进行多媒体技术的开发,对于当前即将毕业的大学生来讲,是很有发展前途的。
基于此,我选择了此课题——多媒体播放器的设计与实现,期望通过对此课题的研究与开发,能深入了解多媒体技术,特别是掌握多媒体技术在媒体播放器中的应用。
1.3研究背景
本设计采用的MicrosoftVisualStudio2010是微软公司发布的MicrosoftVisualStudio软件开发工具的较新版本,此开发软件支持C#、VB.NET、C++、ASP.NET等多种编程语言,功能非常强大。
由于本设计要实现音频和视频解码,所以要用到directshowsdk开发包。
DirectShow是微软公司在ActiveMovie和VideoforWindows的基础上推出的新一代基于COM(ComponentObjectModel)的流媒体处理的开发包,与DirectX开发包一起发布。
DirectShow使用一种叫FilterGraph的模型来管理整个数据流的处理过程,运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。
这样使在多媒体数据库管理系统(MDBMS)中多媒体数据的存取变得更加方便。
它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等,为多媒体流的捕捉和回放提供了强有力的支持。
ActiveMovie,开发代号Quartz,这个由GeraintDavies为微软公司设计的DirectShow的前身,在Windows3.0时代,是作为一种对当时最流行的媒体平台QuickTime的回应而开发的。
ActiveMovie最早的出现是被附加在Windows95上面的并且需要系统安装了IE3.0。
它当时的使命是作为IE的附件播放在其窗口内的媒体文件,正如当时QuickTime为Netscape以及IE提供的服务那样,它的另一个功能是作为Windows视频技术(VFW,VideoForWindows)的一个替换,特别地为在VFW架构中难于处理的MPEG(移动图象专家组格式文件)文件提供辅助处理。
在1998年,大致在DirectX5年代的时候,ActiveMovie被重命名为DirectShow(反映了微软公司在那时正在努力加强“直接地”在一个通常的取名系统之下与硬件合作的技术)并且被包含为"DirectMediaSDK"的一部份。
在DirectX的7版中,DirectShow变成了DirectXSDK主要组成部分而且如同DirectInput等其它DirectXAPIs一样被给予了它自己的位置。
甚至之后,DirectShow被主要用来接收来自像一个手提摄像机这样的电视输入装置的数据,而且它从文件中显示数据的能力被广泛用在WindowsMediaPlayer上面。
从2005年四月起,DirectShow被从DirectXSDK移除,必须单独下载Extra包才能得以支持,之后DirectShow的文档和示例被转移到WindowsSDK,DirectShow也正式成为Windows的一个组件。
然而,在编译某些DirectShow的示例时,DirectXSDK仍然是必需的。
本次设计出来的多媒体播放器主要支持avi、wmv、flv、rmvb和mkv几种网络上常见的视频格式,对此做简要介绍。
Avi的英文全称为AudioVideoInterleaved,即音频视频交错格式。
它于1992年被Microsoft公司推出,随Windows3.1一起被人们所认识和熟知。
所谓“音频视频交错”,就是可以将视频和音频交织在一起进行同步播放。
这种视频格式的优点是图像质量好,可以跨多个平台使用,但是其缺点是体积过于庞大,而且更加糟糕的是压缩标准不统一,因此经常会遇到高版本Windows媒体播放器播放不了采用早期编码编辑的AVI格式视频,而低版本Windows媒体播放器又播放不了采用最新编码编辑的AVI格式视频。
其实解决的方法也非常简单,我们将在后面的视频转换、视频修复部分中给出解决的方案。
Rmvb是一种由RM视频格式升级延伸出的新视频格式,它的先进之处在于RMVB视频格式打破了原先RM格式那种平均压缩采样的方式,在保证平均压缩比的基础上合理利用比特率资源,就是说静止和动作场面少的画面场景采用较低的编码速率,这样可以留出更多的带宽空间,而这些带宽会在出现快速运动的画面场景时被利用。
这样在保证了静止画面质量的前提下,大幅地提高了运动图像的画面质量,从而图像质量和文件大小之间就达到了微妙的平衡。
FLV是FLASHVIDEO的简称,FLV流媒体格式是随着FlashMX的推出发展而来的视频格式。
由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上很好的使用等缺点。
WMV(WindowsMediaVideo)是微软推出的一种流媒体格式,它是在“同门”的ASF(AdvancedStreamFormat)格式升级延伸来得。
在同等视频质量下,WMV格式的文件可以边下载边播放,因此很适合在网上播放和传输。
MKV不是一种压缩格式,而是Matroska的一种媒体文件,Matroska是一种新的多媒体封装格式,也称多媒体容器(MultimediaContainer)。
它可将多种不同编码的视频及16条以上不同格式的音频和不同语言的字幕流封装到一个MatroskaMedia文件当中。
MKV最大的特点就是能容纳多种不同类型编码的视频、音频及字幕流。
了解了以上的相关知识,使得开发多媒体播放软件有了一个更加清晰的思路。
1.4论文主要研究内容及论文结构安排
本毕业设计是制作一个可播放目前主流媒体格式的多媒体播放器,其基本功能应具有媒体播放、音量调节、播放进度选择、暂停、停止以及抓图等,使之成为一款简易的媒体播放设备,能够完美的播放市面上大多数的音频、视频文件。
论文的结构安排:
第一章绪论介绍研究背景,目的和意义等;第二章开发工具介绍,软件的需求分析和模块设计;第三章多媒体播放器软件设计;第五章播放器实现结果演示;最后是结束语以及参考文献和附录的相关内容。
第二章开发平台介绍和软件的初步设计
2.1开发平台的介绍
VisualStudio是微软公司推出的开发环境。
是目前最流行的Windows平台应用程序开发环境。
VisualStudio2010版本于2010年4月12日上市,其集成开发环境(IDE)的界面被重新设计和组织,变得更加简单明了。
VisualStudio2010同时带来了NETFramework4.0、MicrosoftVisualStudio2010CTP(CommunityTechnologyPreview--CTP),并且支持开发面向Windows7的应用程序。
除了MicrosoftSQLServer,它还支持IBMDB2和Oracle数据库。
在vs2010开发平台上开发用户界面应用程序,我们需要用到mfc类库。
MFC(MicrosoftFoundationClasses),是一个微软公司提供的类库(classlibraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
MFC是WinAPI与C++的结合。
API,即微软提供的Windows下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方(如我是一方,微软是一方,Borland就是第三方)的编程语言来进行对Windows下应用程序的开发,使这些被开发出来的应用程序能在Windows下运行,比如VB、VC++、Java、Delhpi。
编程语言函数本质上全部源于API,因此用它们开发出来的应用程序都能工作在Windows的消息机制和绘图里,遵守Windows作为一个操作系统的内部实现,这其实也是一种必要。
微软如果不提供API,这个世上对Windows编程的工作就不会存在,微软的产品就会迅速从时尚变成垃圾。
上面说到MFC是微软对API函数的专用C++封装,这种结合一方面让用户使用微软的专业C++SDK来进行Windows下应用程序的开发变得容易,因为MFC是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在Windows下用C++&MFC编制软件时的大量内节,如应用程序实现消息的处理、设备环境绘图,这种结合是以方便为目的的,必定要付出一定代价(这是微软的一向作风),因此就造成了MFC对类封装中的一定程度的的冗余和迂回,但这是可以接受的。
2.2软件的需求分析和模块设计
2.2.1软件的需求分析
本软件要实现的基本功能是实现音视频文件的播放,要求实现的控制功能是打开、播放、暂停、音量调节、播放进度的控制、全屏播放、抓图、结束、退出等功能,而且要求能够播放rmvb、avi、flv、mkv等常见的视频格式。
根据这些要求,需要有相应的软/硬件来支持,硬件方面的要求是计算机要有声卡和显卡,软件方面的要求有:
windowsxp操作系统、vs2010、directshowsdk开发包、ffdshow编解码软件以及各种视频格式解码器。
视频编解码器,是指一个能够对数字视频进行压缩或者解压缩的程序或者设备。
通常这种压缩属于有损数据压缩。
ffdshow是一套免费的编解码软件,可支持H.264、FLV、WMV、MPEG-1、MPEG-2以及MPEG-4等格式视频档。
ffdshow本身并不包含媒体播放器,但各种媒体播放器都可以使用ffdshow进行解码。
2.2.2软件的模块设计
多媒体播放器:
打开模块、播放模块、暂停模块、停止模块、抓图模块、退出模块、拖拽模块、菜单模块。
如图1:
图1:
多媒体播放器模块设计
打开模块:
打开目标文件,如音频、视频。
退出模块:
关闭播放器。
播放模块:
播放音频、视频。
暂停模块:
暂时停止正在播放的音/视频文件。
停止模块:
结束当前视频的播放。
抓图模块:
对视频进行截图保存。
拖拽模块:
拖拽音/视频的进度条,控制音量的大小与视频的进度。
菜单模块:
设置右键快捷菜单,菜单中包括有对视频播放速率的控制以及全屏、静音等功能。
第三章多媒体播放器软件设计
3.1开发环境配置
在开发之前我们需要在vs2010中搭建directshowsdk开发包。
首先我们将下载好的directshowsdk安装到本机上。
接着我们打开directshow的sdk安装目录:
C:
/DX90SDK/Samples/C++/DirectShow/,在里面找到一个叫baseclasses的工程。
双击baseclasses.sln打开,按照提示转换工程,打开后对它进行编译。
如图2所示,我们会看到编译失败,提示有很多错误。
图2:
编译中的错误
我们将项目->属性->配置属性->C/C++->常规->附加包含目录里面的内容(.,../../../../include)删掉。
接着我们将项目->属性->配置属性->C/C++->语言->强制For循环范围中的合规性设置为否。
再接着我们在项目->属性->配置属性->C/C++->命令行->其它选项中增加/wd4430选项。
最后我们再次编译,发现编译成功。
编译成功之后,我们在项目->属性->配置属性->vc++目录里选择包含目录然后增加C:
\DXSDK\Include;C:
\DXSDK\Samples\C++\Common\Include;C:
\DXSDK\Samples\C++\DirectShow\BaseClasses,在库目录中增加C:
\DXSDK\Lib。
3.2实现GraphEdit模拟
实际使用Directshow播放器,首先需要使用GraphEdit来模拟实现,验证插入滤波器的运行特点,体会滤波器的操作过程,为播放器能够正常播放视频做好保障。
在使用graphedit进行模拟实现视频播放的过程中,我们发现无法正常建立滤波器链表。
进行了相关知识的了解之后,我才知道这是由于没有安装相应的解码器。
如图3所示,我安装了相应的解码器。
图3:
.安装解码器
如图4所示,在安装了解码器之后,则能正常的建立滤波器链表了。
图4建立滤波器链表
3.3directshow接口实现函数说明
Directshow有关的接口和方法主要封装在CDXGraph类中,这个类也是本设计中两个重要的类之一。
以下就是该类中所包含的主要方法以及作用:
函数名
函数功能
BoolCDXGraph:
:
Create(void)
生成滤波器链表管理器
BoolCDXGraph:
:
QueryInterfaces(void)
查询各类接口
BoolCDXGraph:
:
RenderFile(TCHAR*inFile)
剖析媒体文件
BoolCDXGraph:
:
SetDisplayWindow(HWNDinWindow)
设置显示窗口
BoolCDXGraph:
:
SetNotifyWindow(HWNDinWindow)
设置窗口消息通知
BoolCDXGraph:
:
Run(void)
播放视频
BoolCDXGraph:
:
Stop(void)
停止播放
BoolCDXGraph:
:
Pause(void)
暂停播放
BoolCDXGraph:
:
GetDuration(double*outDuration)
获取播放时间长度
BoolCDXGraph:
:
GetCurrentPosition(double*outPosition)
获取当前播放位置
BoolCDXGraph:
:
SetCurrentPosition(doubleinPosition)
设置当前播放位置
BoolCDXGraph:
:
SetPlaybackRate(doubleinRate)
设置播放速率
BoolCDXGraph:
:
GetStopPosition(double*outPosition)
获取视频的结束位置
BoolCDXGraph:
:
SetStartStopPosition(doubleinStart,doubleinStop)
设置视频开始结束位置
BoolCDXGraph:
:
Mute()
静音模式
BoolCDXGraph:
:
UnMute()
非静音模式
BoolCDXGraph:
:
SetFullScreen(BOOLinEnabled)
设置全屏
BoolCDXGraph:
:
SnapshotBitmap(TCHAR*outFIle)
抓图保存
表1:
CDGraph类中的主要函数及其作用
3.4模块实现函数说明
实现模块功能的具体函数则均属于CMediaPlayer类,它是本设计中两个重要的类中的另外一个,它是在建立MediaPlayer工程时由MFC建立的一个对话框的类,在该对话框上进行的操作函数即可实现程序所需要的所有功能,其实现函数则是调用CDXGraph类的相关函数,从而完成各项具体功能。
各个模块的具体实现函数描述如表2:
模块名称
实现函数
打开模块
voidCMediaPlayerDlg:
:
OnBnClickedButtonOpen()
播放模块
voidCMediaPlayerDlg:
:
OnBnClickedButtonPlay()
暂停模块
voidCMediaPlayerDlg:
:
OnBnClickedButtonPause()
停止模块
voidCMediaPlayerDlg:
:
OnBnClickedButtonStop()
抓图模块
voidCMediaPlayerDlg:
:
OnBnClickedButtonGrasp()
退出模块
voidCMediaPlayerDlg:
:
OnBnClickedButtonExit()
拖拽模块
voidCMediaPlayerDlg:
:
OnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)
菜单模块
voidCMediaPlayerDlg:
:
OnMenuOpenfile()
voidCMediaPlayerDlg:
:
OnMenuHalfrate()
voidCMediaPlayerDlg:
:
OnMenuNormalrate()
voidCMediaPlayerDlg:
:
OnMenuDoublerate()
voidCMediaPlayerDlg:
:
OnMenuFullscreen()
voidCMediaPlayerDlg:
:
OnMenuAlwaysontop()
voidCMediaPlayerDlg:
:
OnMenuMute()
voidCMediaPlayerDlg:
:
OnMenuClosefile()
voidCMediaP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多媒体 播放 设计