《多媒体播放器设计(共25页).doc》由会员分享,可在线阅读,更多相关《多媒体播放器设计(共25页).doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上xxxxx学院本科毕业设计(论文)题目: 多媒体播放器设计 学生姓名: 学号: 系(部):数学与计算机科学系 专业:计算机科学与技术 入学时间: 201年 月导师姓名: 职称/学位: 教授 导师所在单位: 多媒体播放器设计摘 要本文主要是开发了一款简单的多媒体播放器。可以播放多种格式的音频、视频文件,该播放器实现了的基本功能包括:音频视频文件的打开、添加到菜单、媒体的播放、音量大小的调节、播放时间的拖动、暂停播放、停止等。使之成为一款简易的媒体播放设备,能够完美的播放市面上大多数的音频、视频文件。在毕业设计中,系统开发平台为Windows XP操作系统,程序设计环境采
2、用Visual Studio 2010。程序通过调试运行,初步实现了设计目标,本程序是基于MFC集成开发环境,利用directshow sdk实现媒体播放的功能的,除了基本的播放控制外,还具有全屏播放、静音等实用功能。关键词:多媒体;播放器;directshow sdkThe Design and Implementation of Multimedia Player Abstract This article is developed a simple multimedia player. It can play multiple formats of audio,video files,
3、The players realize the basic functions include that open the Audio and video files, addto the menu, and media playback, adjust the volume size, play time, drag, pause, stop and so on.Making it a simple media player device, most audio or video files in the market can be played perfectly by this medi
4、a player. In the Graduation, The System Development Platform is Windows XP, The Programming Environment is Visual Studio2010.Program by commissioning,Initial design goals achieved, the program is based on MFC.Integrated Development Environment. Using the directshow sdk control to achieve the functio
5、ns of media player. In addition to the basic playback controls, It also has many other utility functions, such as playing Full Screen,Mute and so on.Keywords: multimedia; player;directshow sdk 目 录专心-专注-专业多媒体播放器设计第一章 绪 论1.1引言多媒体就是多重媒体的意思,可以理解为直接作用于人感官的文字、图形、图像、动画、声音和视频等各种媒体的统称,即多种信息载体的表现形式和传递方式。我们所提到
6、的多媒体技术,就是利用电脑把文字、图形、影象、动画、声音及视频等媒体信息都数位化,并将其整合在一定的交互式界面上,使电脑具有交互展示不同媒体形态的能力。它极大的改变了人们获取信息的传统方法,符合人们在信息时代的阅读方式。在当今信息社会,以多媒体为特征的信息技术和信息产业的发展及应用对人类社会产生的影响和作用愈来愈明显,愈来愈重要。多媒体能改变信息的包装,实现知识信息数字化,为人们获得知识信息提供极大的方便和无穷的乐趣。友善的人机界面、多种多样的多媒体教学软件、诱人的电子游艺节目、身临其境的多媒体导购系统、五花八门的信息家电和高效方便的网上查询等等,无不渗透着多媒体的作用,它引导人们进入了一个有
7、声有色的世界。同时,多媒体的发展和应用,极大地推动了各行各业的相互渗透和飞速发展,大大改变了人类社会的工作环境和生活方式。可毫不夸张地说,多媒体产业的形成和发展,不仅引起了计算机工业的一次革命,也正在深刻地影响人类社会发生巨大的变革。多媒体技术的发展在很大程度上依靠于多媒体软件开发的水平。目前,不管是支撑多媒体系统的系统软件,还是管理和开发软件,以及多媒体的应用软件都在能力和数量上还难以满足多媒体飞速发展的需要。特别是多媒体应用软件的缺乏一直是制约多媒体产业发展的瓶颈问题,因此己成为多媒体研究和开发的关键问题。如何制作和设计出大量高质量的多媒体应用软件是计算机从业人员所面临的迫切课题,也是广大
8、人民群众所关心的事情。多媒体播放器的设计是一门集计算机技术和数字多媒体技术于一体的综合设计。随着中国计算机技术、宽带网络技术的发展,越来越多的人开始重视多媒体播放器的发展与应用。 1.2系统设计的目的和意义这个课程设计的目的就是制作一个能够播放音频、视频文件的播放器,并使它具备一些简单的操作处理功能,如播放暂停的控制,音量的调节,视频的全屏播放,视频进度的调节等等。将这个小型播放软件做得尽量的小巧、实用。多媒体技术是当今信息技术领域发展最快、最活跃的技术,是新一代电子技术发展和竞争的焦点。多媒体技术融计算机、声音、文本、图像、动画、视频和通信等多种功能于一体,借助日益普及的高速信息网,可实现计
9、算机的全球联网和信息资源共享,因此被广泛应用在咨询服务、图书、教育、通信、军事、金融、医疗等诸多行业,并正潜移默化地改变着我们生活的面貌。多媒体技术已经成为当今比较热门的研究课题,特别是伴随着多媒体技术的网络化,使得多媒体技术的发展前景无限广阔,因此掌握多媒体及多媒体技术的相关知识,了解多媒体技术当前的发展状况及未来的发展前景,并能熟练地进行多媒体技术的开发,对于当前即将毕业的大学生来讲,是很有发展前途的。基于此,我选择了此课题多媒体播放器的设计与实现,期望通过对此课题的研究与开发,能深入了解多媒体技术,特别是掌握多媒体技术在媒体播放器中的应用。1.3研究背景本设计采用的Microsoft V
10、isual Studio 2010是微软公司发布的Microsoft Visual Studio软件开发工具的较新版本,此开发软件支持C#、VB.NET、C+、ASP.NET等多种编程语言,功能非常强大。由于本设计要实现音频和视频解码,所以要用到directshow sdk开发包。DirectShow是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM(Component Object Model)的流媒体处理的开发包,与DirectX开发包一起发布。DirectShow使用一种叫Filter Graph的模型来管理整个数据流的处理过程,运用Di
11、rectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。这样使在多媒体数据库管理系统(MDBMS)中多媒体数据的存取变得更加方便。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等,为多媒体流的捕捉和回放提供了强有力的支持。ActiveMovie,开发代号 Quartz,这个由 Geraint Davies 为微软公司设计的 DirectShow 的前身,在 Windows 3.0 时代,是作为一种对当时最流行的媒体平台 QuickTime 的回应而开发的。ActiveMovie 最早的出现是被附加在 Wi
12、ndows 95 上面的并且需要系统安装了IE3.0 。它当时的使命是作为 IE 的附件播放在其窗口内的媒体文件,正如当时 QuickTime 为 Netscape 以及 IE 提供的服务那样,它的另一个功能是作为 Windows 视频技术(VFW,Video For Windows)的一个替换,特别地为在 VFW 架构中难于处理的MPEG(移动图象专家组格式文件)文件提供辅助处理。在 1998 年,大致在 DirectX 5 年代的时候,ActiveMovie 被重命名为 DirectShow(反映了微软公司在那时正在努力加强“直接地”在一个通常的取名系统之下与硬件合作的技术)并且被包含为
13、DirectMedia SDK 的一部份。在 DirectX 的 7 版中,DirectShow 变成了 DirectX SDK 主要组成部分而且如同 DirectInput 等其它 DirectX APIs 一样被给予了它自己的位置。甚至之后, DirectShow 被主要用来接收来自像一个手提摄像机这样的电视输入装置的数据,而且它从文件中显示数据的能力被广泛用在 Windows Media Player 上面。 从 2005 年四月起,DirectShow 被从 DirectX SDK 移除,必须单独下载Extra包才能得以支持,之后DirectShow的文档和示例被转移到Windows
14、SDK,DirectShow也正式成为Windows的一个组件。然而,在编译某些 DirectShow 的示例时,DirectX SDK 仍然是必需的。本次设计出来的多媒体播放器主要支持avi、wmv、flv、rmvb和mkv几种网络上常见的视频格式,对此做简要介绍。Avi的英文全称为Audio Video Interleaved,即音频视频交错格式。它于1992年被Microsoft公司推出,随Windows3.1一起被人们所认识和熟知。所谓“音频视频交错”,就是可以将视频和音频交织在一起进行同步播放。这种视频格式的优点是图像质量好,可以跨多个平台使用,但是其缺点是体积过于庞大,而且更加糟糕
15、的是压缩标准不统一,因此经常会遇到高版本Windows媒体播放器播放不了采用早期编码编辑的AVI格式视频,而低版本Windows媒体播放器又播放不了采用最新编码编辑的AVI格式视频。其实解决的方法也非常简单,我们将在后面的视频转换、视频修复部分中给出解决的方案。Rmvb是一种由RM视频格式升级延伸出的新视频格式,它的先进之处在于RMVB视频格式打破了原先RM格式那种平均压缩采样的方式,在保证平均压缩比的基础上合理利用比特率资源,就是说静止和动作场面少的画面场景采用较低的编码速率,这样可以留出更多的带宽空间,而这些带宽会在出现快速运动的画面场景时被利用。这样在保证了静止画面质量的前提下,大幅地提
16、高了运动图像的画面质量,从而图像质量和文件大小之间就达到了微妙的平衡。FLV 是FLASH VIDEO的简称,FLV流媒体格式是随着Flash MX的推出发展而来的视频格式。由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上很好的使用等缺点。WMV(Windows Media Video)是微软推出的一种流媒体格式,它是在“同门”的ASF(AdvancedStreamFormat)格式升级延伸来得。在同等视频质量下,WMV格式的文件可以边下载边播放,因此很适合在网上播放和传输。MKV不是一种压
17、缩格式,而是Matroska的一种媒体文件,Matroska是一种新的多媒体封装格式,也称多媒体容器 (Multimedia Container)。它可将多种不同编码的视频及16条以上不同格式的音频和不同语言的字幕流封装到一个Matroska Media文件当中。MKV最大的特点就是能容纳多种不同类型编码的视频、音频及字幕流。了解了以上的相关知识,使得开发多媒体播放软件有了一个更加清晰的思路。1.4 论文主要研究内容及论文结构安排 本毕业设计是制作一个可播放目前主流媒体格式的多媒体播放器,其基本功能应具有媒体播放、音量调节、播放进度选择、暂停、停止以及抓图等,使之成为一款简易的媒体播放设备,能
18、够完美的播放市面上大多数的音频、视频文件。 论文的结构安排: 第一章 绪论介绍研究背景,目的和意义等;第二章 开发工具介绍,软件的需求分析和模块设计;第三章 多媒体播放器软件设计; 第五章 播放器实现结果演示;最后是结束语以及参考文献和附录的相关内容。第二章 开发平台介绍和软件的初步设计2.1开发平台的介绍Visual Studio是微软公司推出的开发环境。是目前最流行的Windows平台应用程序开发环境。Visual Studio 2010版本于2010年4月12日上市,其集成开发环境(IDE)的界面被重新设计和组织,变得更加简单明了。Visual Studio 2010同时带来了NET F
19、ramework 4.0、Microsoft Visual Studio 2010 CTP( Community Technology Preview-CTP),并且支持开发面向Windows 7的应用程序。除了Microsoft SQL Server,它还支持 IBM DB2和Oracle数据库。在vs2010开发平台上开发用户界面应用程序,我们需要用到mfc类库。MFC(Microsoft Foundation Classes),是一个微软公司提供的类库(class libraries),以C+类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
20、其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。MFC是WinAPI与C+的结合。API,即微软提供的Windows下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方(如我是一方,微软是一方,Borland就是第三方)的编程语言来进行对Windows下应用程序的开发,使这些被开发出来的应用程序能在Windows下运行,比如VB、VC+、Java、Delhpi。编程语言函数本质上全部源于API,因此用它们开发出来的应用程序都能工作在Windows的消息机制和绘图里,遵守Windows作为一个操作系
21、统的内部实现,这其实也是一种必要。微软如果不提供API,这个世上对Windows编程的工作就不会存在,微软的产品就会迅速从时尚变成垃圾。上面说到MFC是微软对API函数的专用C+封装,这种结合一方面让用户使用微软的专业C+ SDK来进行Windows下应用程序的开发变得容易,因为MFC是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在Windows下用C+ & MFC编制软件时的大量内节,如应用程序实现消息的处理、设备环境绘图,这种结合是以方便为目的的,必定要付出一定代价(这是微软的一向作风),因此就造成了MFC对类封装中的一定程度的的冗余和迂回,但这是可以接受的。2.2软件的需求
22、分析和模块设计2.2.1 软件的需求分析本软件要实现的基本功能是实现音视频文件的播放,要求实现的控制功能是打开、播放、暂停、音量调节、播放进度的控制、全屏播放、抓图、结束、退出等功能,而且要求能够播放rmvb、avi、flv、mkv等常见的视频格式。根据这些要求,需要有相应的软/硬件来支持,硬件方面的要求是计算机要有声卡和显卡,软件方面的要求有:windows xp操作系统、vs2010、directshow sdk开发包、ffdshow编解码软件以及各种视频格式解码器。视频编解码器,是指一个能够对数字视频进行压缩或者解压缩的程序或者设备。通常这种压缩属于有损数据压缩。ffdshow是一套免费
23、的编解码软件,可支持H.264、FLV、WMV、MPEG-1、MPEG-2以及MPEG-4等格式视频档。ffdshow本身并不包含媒体播放器,但各种媒体播放器都可以使用ffdshow进行解码。2.2.2软件的模块设计多媒体播放器:打开模块、播放模块、暂停模块、停止模块、抓图模块、退出模块、拖拽模块、菜单模块。如图1:图1: 多媒体播放器模块设计打开模块:打开目标文件,如音频、视频。退出模块:关闭播放器。播放模块:播放音频、视频。暂停模块:暂时停止正在播放的音/视频文件。停止模块:结束当前视频的播放。抓图模块:对视频进行截图保存。拖拽模块:拖拽音/视频的进度条,控制音量的大小与视频的进度。菜单模
24、块:设置右键快捷菜单,菜单中包括有对视频播放速率的控制以及全屏、静音等功能。第三章 多媒体播放器软件设计3.1开发环境配置在开发之前我们需要在vs2010中搭建directshow sdk开发包。首先我们将下载好的directshow sdk安装到本机上。接着我们打开directshow的sdk安装目录:C:/DX90SDK/Samples/C+/DirectShow/,在里面找到一个叫baseclasses的工程。双击baseclasses.sln打开,按照提示转换工程,打开后对它进行编译。如图2所示,我们会看到编译失败,提示有很多错误。图2 :编译中的错误我们将项目-属性-配置属性-C/C
25、+- 常规-附加包含目录里面的内容(.,././././include)删掉。接着我们将项目-属性-配置属性-C/C+- 语言-强制For循环范围中的合规性设置为否。再接着我们在项目-属性-配置属性-C/C+- 命令行-其它选项中增加/wd4430选项。最后我们再次编译,发现编译成功。编译成功之后,我们在项目-属性-配置属性-vc+ 目录里选择包含目录然后增加C:DXSDKInclude;C:DXSDKSamplesC+CommonInclude;C:DXSDKSamplesC+DirectShowBaseClasses,在库目录中增加C:DXSDKLib。3.2实现GraphEdit模拟实际
26、使用Directshow播放器,首先需要使用GraphEdit来模拟实现,验证插入滤波器的运行特点,体会滤波器的操作过程,为播放器能够正常播放视频做好保障。在使用graphedit进行模拟实现视频播放的过程中,我们发现无法正常建立滤波器链表。进行了相关知识的了解之后,我才知道这是由于没有安装相应的解码器。如图3所示,我安装了相应的解码器。图3:.安装解码器如图4所示,在安装了解码器之后,则能正常的建立滤波器链表了。图4 建立滤波器链表3.3 directshow接口实现函数说明Directshow有关的接口和方法主要封装在CDXGraph类中,这个类也是本设计中两个重要的类之一。以下就是该类中
27、所包含的主要方法以及作用:函数名 函数功能Bool CDXGraph:Create(void)生成滤波器链表管理器Bool CDXGraph:QueryInterfaces(void)查询各类接口Bool CDXGraph:RenderFile(TCHAR * inFile)剖析媒体文件Bool CDXGraph:SetDisplayWindow(HWND inWindow)设置显示窗口Bool CDXGraph:SetNotifyWindow(HWND inWindow)设置窗口消息通知Bool CDXGraph:Run(void)播放视频Bool CDXGraph:Stop(void)停止
28、播放Bool CDXGraph:Pause(void)暂停播放Bool CDXGraph:GetDuration(double * outDuration)获取播放时间长度Bool CDXGraph:GetCurrentPosition(double * outPosition)获取当前播放位置Bool CDXGraph:SetCurrentPosition(double inPosition)设置当前播放位置Bool CDXGraph:SetPlaybackRate(double inRate)设置播放速率Bool CDXGraph:GetStopPosition(double *outPo
29、sition)获取视频的结束位置Bool CDXGraph:SetStartStopPosition(double inStart,double inStop)设置视频开始结束位置Bool CDXGraph:Mute( )静音模式Bool CDXGraph:UnMute( )非静音模式Bool CDXGraph:SetFullScreen(BOOL inEnabled)设置全屏Bool CDXGraph:SnapshotBitmap(TCHAR *outFIle)抓图保存表1:CDGraph类中的主要函数及其作用3.4模块实现函数说明实现模块功能的具体函数则均属于CMediaPlayer类,它
30、是本设计中两个重要的类中的另外一个,它是在建立MediaPlayer工程时由MFC建立的一个对话框的类,在该对话框上进行的操作函数即可实现程序所需要的所有功能,其实现函数则是调用CDXGraph类的相关函数,从而完成各项具体功能。各个模块的具体实现函数描述如表2:模块名称 实现函数 打开模块void CMediaPlayerDlg:OnBnClickedButtonOpen() 播放模块void CMediaPlayerDlg:OnBnClickedButtonPlay()暂停模块void CMediaPlayerDlg:OnBnClickedButtonPause()停止模块void CMe
31、diaPlayerDlg:OnBnClickedButtonStop() 抓图模块void CMediaPlayerDlg:OnBnClickedButtonGrasp()退出模块void CMediaPlayerDlg:OnBnClickedButtonExit()拖拽模块void CMediaPlayerDlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)菜单模块void CMediaPlayerDlg:OnMenuOpenfile() void CMediaPlayerDlg:OnMenuHalfrate()void
32、 CMediaPlayerDlg:OnMenuNormalrate()void CMediaPlayerDlg:OnMenuDoublerate()void CMediaPlayerDlg:OnMenuFullscreen()void CMediaPlayerDlg:OnMenuAlwaysontop()void CMediaPlayerDlg:OnMenuMute()void CMediaPlayerDlg:OnMenuClosefile()void CMediaPlayerDlg:OnMenuPlay()void CMediaPlayerDlg:OnMenuStop()void CMedi
33、aPlayerDlg:OnMenuGrabimage()void CMediaPlayerDlg:OnMenuExit()表2:各个模块及其实现函数3.5主要变量声明程序中用到得主要控件有:6个按钮控件,一个图像控件,两个进度条控件。控件名称变量类型变量名说明IDC_BUTTON_OPENCButtonm_Open打开IDC_BUTTON_PLAYCButtonm_Play播放IDC_BUTTON_PAUSECButtonm_Pause暂停IDC_BUTTON_STOPCButtonm_Stop停止IDC_BUTTON_GRASPCButtonm_Grap抓图IDC_BUTTO_EXITCBu
34、ttonm_Exit退出IDC_SLIDER_PLAYCSliderCtrlm_sliderPlayer视频进度条IDC_SLIDER_VOLUMECSliderCtrlm_siderVolume音量进度条IDC_VIDEO_WINDOWCStaticm_videoWindow图像控件表3:程序中的主要变量3.6设计多媒体播放器的界面播放器主界面设计如图5:图5:播放器主界面3.7播放器模块设计为界面添加Picture Control图像控件,两个进度条控件以及打开、播放、暂停、停止、抓图、退出等按钮控件。下面对各个模块的实现函数及其代码做简要分析:(1)单击播放器界面中的“打开”按钮,即可打
35、开要播放的媒体文件。在下述代码中,将以只读方式打开要播放的文件,并且过滤了流媒体文件的格式,获取了媒体的路径和文件名。void CMediaPlayerDlg:OnBnClickedButtonOpen() CString strFilter = _T(AVI File (*.avi) | *.avi|); strFilter += MPEG File (*.mpg; *.mpeg) | *.mpg; *.mpeg|; strFilter += MP3 File (*.mp3) | *.mp3|; strFilter += WMA File (*.wma) | *.wma|; strFilte
36、r += All File (*.*) | *.*|; /编辑下拉选项框CFileDialog dlg(TRUE,NULL,NULL,OFN_PATHMUSTEXIST|OFN_HIDEREADONLY, strFilter, this); /设置打开文件对话框 if (dlg.DoModal() = IDOK)/当用户打开文件时,做以下行为m_sourceFile = dlg.GetPathName();/获取文件所在的路径名m_mediaFileName =GetFileTitleFromFileName(m_sourceFile,1);/获取文件名称CreateGraph();创建链表,
37、连接滤波器(2)单击“播放”按钮后,开始选择播放的媒体文件。同时在标题栏中显示播放速率和媒体文件名,具体代码如下:void CMediaPlayerDlg:OnBnClickedButtonPlay() if (m_pFilterGraph) /如果CDXGraph对象已创建成功,则执行以下代码 SetWindowText(_T(1倍速播放 ) + m_mediaFileName); /设置窗口标题栏文本内容m_pFilterGraph-Run(); /播放视频文件m_pFilterGraph-ChangeAudioVolume(m_volume); /改变音量m_sliderVolume.S
38、etPos(m_volume); /设置音量进度条的位置if (m_playerTimer = 0) /设置定时器m_playerTimer = SetTimer(SLIDER_TIMER, 100, NULL); (3)点击“暂停”按钮,暂停播放视频。void CMediaPlayerDlg:OnBnClickedButtonPause()if (m_pFilterGraph != NULL)/如果CDXGraph对象不为空,则执行代码m_pFilterGraph-Pause();/暂停播放视频 (4)点击“停止”按钮,停止播放视频。void CMediaPlayerDlg:OnBnClic
39、kedButtonStop()if (m_pFilterGraph != NULL)/如果CDXGraph对象不为空,则执行代码m_pFilterGraph-Stop();/停止播放视频 (5)点击“退出”按钮,退出程序。void CMediaPlayerDlg:OnBnClickedButtonExit() OnBnClickedButtonStop();/停止播放 CoUninitialize();/关闭程序的所有线程 CDialog:OnOK();/关闭窗口(6)点击“抓图”按钮,实现视频截图功能,并且将图片保存到软件的同一目录下。 void CMediaPlayerDlg:OnBnCl
40、ickedButtonGrasp() static int c = 0; TCHAR szFilenameMAX_PATH; DWORD dwPathLen = 0; if(dwPathLen=:GetModuleFileName(:AfxGetInstanceHandle(),szFilename, MAX_PATH )= 0)/得到程序整个路径名长度 return; for( int i=dwPathLen-1; i=0; i-)/获取图片保存的目录 if( = szFilenamei) | (/ = szFilenamei) break; else szFilenamei = 0; /设
41、置图片保存的完整路径名称CString str;str.Format(_T(%s),szFilename);CString strTemp;strTemp.Format(_T(%d),c);str += strTemp + _T(.bmp);c+;TCHAR *p=str.GetBuffer(str.GetLength();str.ReleaseBuffer();/进行抓图,并且将图片放在指定路径下if (m_pFilterGraph != NULL)if (m_pFilterGraph-SnapshotBitmap(p)elseMessageBox(_T(抓图失败!); (7)实现拖拽功能,
42、使得手动拖动进度条控件,能够控制音量的大小以及视频的进度。void CMediaPlayerDlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)if(pScrollBar-GetSafeHwnd()=m_sliderPlayer.GetSafeHwnd()/如果拖动消息来自视频进度条,则执行代码if (m_pFilterGraph != NULL)/CDXGraph对象不为空double duration =1.0;/定义事件长度对象m_pFilterGraph-GetDuration(&duration);/获取流媒体文
43、件时间长度double pos = duration * m_sliderPlayer.GetPos()/1000.0;/计算得到进度条位置m_pFilterGraph-SetCurrentPosition(pos);/设置当前进度条的位置else if(pScrollBar-GetSafeHwnd()=m_sliderVolume.GetSafeHwnd()/如果拖动消息来自音量进度条if (m_pFilterGraph != NULL)m_volume = m_sliderVolume.GetPos();/获取音量进度条位置m_pFilterGraph-ChangeAudioVolume(
44、m_volume);/改变当前音量 elseCDialog:OnHScroll(nSBCode, nPos, pScrollBar);(8)设置静音或非静音模式void CMediaPlayerDlg:OnMenuMute()if (m_pFilterGraph != NULL)/CDXGraph对象不为空 static int flag=0;/设置信号量if (!flag)/判断信号量是否为真,即判断当前是否为静音模式m_pFilterGraph-Mute();/设置为静音模式flag = 1;/设置信号量为真elsem_pFilterGraph-UnMute();/设置为非静音模式flag = 0;设置信号量为假 (9)设置全屏播放模式。 void CMediaPlayerDlg:OnMenuFullscreen()static int flag=0; /设置信号量 if (m_pFilterGraph != NULL) if (!flag)/判断信号量的值是否为真,即判断当前是否为全屏m_pFilterGraph-SetFullScreen(TRUE);/设置为全屏模式flag = 1;/设置信号量为真elsem_pFilterGraph-SetFullScreen(FALSE);/关闭全屏模式flag = 0;/设置