多媒体播放器设计

更新时间:2024-06-16 15:04:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

xxxxx学院

本科毕业设计(论文)

题 目: 多媒体播放器设计 学生姓名: 学号: 系(部): 数学与计算机科学系 专业:计算机科学与技术 入学时间: 201 年 月 导师姓名: 职称/学位: 教授 导师所在单位:

I

多媒体播放器设计

摘 要

本文主要是开发了一款简单的多媒体播放器。可以播放多种格式的音频、视频文件,该播放器实现了的基本功能包括:音频视频文件的打开、添加到菜单、媒体的播放、音量大小的调节、播放时间的拖动、暂停播放、停止等。使之成为一款简易的媒体播放设备,能够完美的播放市面上大多数的音频、视频文件。在毕业设计中,系统开发平台为Windows XP操作系统,程序设计环境采用Visual Studio 2010。程序通过调试运行,初步实现了设计目标,本程序是基于MFC集成开发环境,利用directshow sdk实现媒体播放的功能的,除了基本的播放控制外,还具有全屏播放、静音等实用功能。

关键词:多媒体;播放器;directshow sdk

II

The Design and Implementation of Multimedia Player

Abstract

This article is developed a simple multimedia player. It can play multiple formats of audio,video files, 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 media 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 functions 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

III

目 录

第一章 绪 论 ........................................................... 1

1.1引言 ............................................................... 1 1.2系统设计的目的和意义 ............................................... 1 1.3研究背景 ........................................................... 2 1.4 论文主要研究内容及论文结构安排 ..................................... 4 第二章 开发平台介绍和软件的初步设计 ....................................... 5

2.1开发平台的介绍 ..................................................... 5 2.2软件的需求分析和模块设计 ........................................... 5

2.2.1 软件的需求分析 ............................................... 5 2.2.2软件的模块设计 ................................................ 6

第三章 多媒体播放器软件设计 ............................................... 7

3.1开发环境配置 ....................................................... 7 3.2实现GRAPHEDIT模拟 ................................................. 8 3.3 DIRECTSHOW接口实现函数说明 ........................................ 8 3.4模块实现函数说明 ................................................... 9 3.5主要变量声明 ...................................................... 10 3.6设计多媒体播放器的界面 ............................................ 11 3.7播放器模块设计 .................................................... 11 第四章 程序实现结果 ...................................................... 18

4.1程序运行结果演示 .................................................. 18 结束语: ................................................................. 19 参考文献 ................................................................. 20 致 谢 ................................................................. 21

IV

多媒体播放器设计

第一章 绪 论

1.1引言

多媒体就是多重媒体的意思,可以理解为直接作用于人感官的文字、图形、图像、动画、声音和视频等各种媒体的统称,即多种信息载体的表现形式和传递方式。我们所提到的多媒体技术,就是利用电脑把文字、图形、影象、动画、声音及视频等媒体信息都数位化,并将其整合在一定的交互式界面上,使电脑具有交互展示不同媒体形态的能力。它极大的改变了人们获取信息的传统方法,符合人们在信息时代的阅读方式。

在当今信息社会,以多媒体为特征的信息技术和信息产业的发展及应用对人类社会产生的影响和作用愈来愈明显,愈来愈重要。多媒体能改变信息的包装,实现知识信息数字化,为人们获得知识信息提供极大的方便和无穷的乐趣。友善的人机界面、多种多样的多媒体教学软件、诱人的电子游艺节目、身临其境的多媒体导购系统、五花八门的信息家电和高效方便的网上查询等等,无不渗透着多媒体的作用,它引导人们进入了一个有声有色的世界。同时,多媒体的发展和应用,极大地推动了各行各业的相互渗透和飞速发展,大大改变了人类社会的工作环境和生活方式。可毫不夸张地说,多媒体产业的形成和发展,不仅引起了计算机工业的一次革命,也正在深刻地影响人类社会发生巨大的变革。

多媒体技术的发展在很大程度上依靠于多媒体软件开发的水平。目前,不管是支撑多媒体系统的系统软件,还是管理和开发软件,以及多媒体的应用软件都在能力和数量上还难以满足多媒体飞速发展的需要。特别是多媒体应用软件的缺乏一直是制约多媒体产业发展的瓶颈问题,因此己成为多媒体研究和开发的关键问题。如何制作和设计出大量高质量的多媒体应用软件是计算机从业人员所面临的迫切课题,也是广大人民群众所关心的事情。多媒体播放器的设计是一门集计算机技术和数字多媒体技术于一体的综合设计。随着中国计算机技术、宽带网络技术的发展,越来越多的人开始重视多媒体播放器的发展与应用。

1.2系统设计的目的和意义

这个课程设计的目的就是制作一个能够播放音频、视频文件的播放器,并使它具备一些简单的操作处理功能,如播放暂停的控制,音量的调节,视频的全屏播放,视频进度的调节等等。将这个小型播放软件做得尽量的小巧、实用。

多媒体技术是当今信息技术领域发展最快、最活跃的技术,是新一代电子技术发展和竞争的焦点。多媒体技术融计算机、声音、文本、图像、动画、视频和通信等多种功能于一体,借助日益普及的高速信息网,可实现计算机的全球联网

1

和信息资源共享,因此被广泛应用在咨询服务、图书、教育、通信、军事、金融、医疗等诸多行业,并正潜移默化地改变着我们生活的面貌。

多媒体技术已经成为当今比较热门的研究课题,特别是伴随着多媒体技术的网络化,使得多媒体技术的发展前景无限广阔,因此掌握多媒体及多媒体技术的相关知识,了解多媒体技术当前的发展状况及未来的发展前景,并能熟练地进行多媒体技术的开发,对于当前即将毕业的大学生来讲,是很有发展前途的。 基于此,我选择了此课题——多媒体播放器的设计与实现,期望通过对此课题的研究与开发,能深入了解多媒体技术,特别是掌握多媒体技术在媒体播放器中的应用。

1.3研究背景

本设计采用的Microsoft Visual 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的模型来管理整个数据流的处理过程,运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。这样使在多媒体数据库管理系统(MDBMS)中多媒体数据的存取变得更加方便。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等,为多媒体流的捕捉和回放提供了强有力的支持。

ActiveMovie,开发代号 Quartz,这个由 Geraint Davies 为微软公司设计的 DirectShow 的前身,在 Windows 3.0 时代,是作为一种对当时最流行的媒体平台 QuickTime 的回应而开发的。ActiveMovie 最早的出现是被附加在 Windows 95 上面的并且需要系统安装了IE3.0 。它当时的使命是作为 IE 的附件播放在其窗口内的媒体文件,正如当时 QuickTime 为 Netscape 以及 IE 提供的服务那样,它的另一个功能是作为 Windows 视频技术(VFW,Video For Windows)的一个替换,特别地为在 VFW 架构中难于处理的MPEG(移动图象专家组格式文件)文件提供辅助处理。

在 1998 年,大致在 DirectX 5 年代的时候,ActiveMovie 被重命名为 DirectShow(反映了微软公司在那时正在努力加强“直接地”在一个通常的取名系统之下与硬件合作的技术)并且被包含为 \DirectMedia SDK\的一部份。在 DirectX 的 7 版中,DirectShow 变成了 DirectX SDK 主要组成部分而且如同

2

DirectInput 等其它 DirectX APIs 一样被给予了它自己的位置。甚至之后, DirectShow 被主要用来接收来自像一个手提摄像机这样的电视输入装置的数据,而且它从文件中显示数据的能力被广泛用在 Windows Media Player 上面。 从 2005 年四月起,DirectShow 被从 DirectX SDK 移除,必须单独下载Extra包才能得以支持,之后DirectShow的文档和示例被转移到Windows SDK,DirectShow也正式成为Windows的一个组件。然而,在编译某些 DirectShow 的示例时,DirectX SDK 仍然是必需的。

本次设计出来的多媒体播放器主要支持avi、wmv、flv、rmvb和mkv几种网络上常见的视频格式,对此做简要介绍。

Avi的英文全称为Audio Video Interleaved,即音频视频交错格式。它于1992年被Microsoft公司推出,随Windows3.1一起被人们所认识和熟知。所谓“音频视频交错”,就是可以将视频和音频交织在一起进行同步播放。这种视频格式的优点是图像质量好,可以跨多个平台使用,但是其缺点是体积过于庞大,而且更加糟糕的是压缩标准不统一,因此经常会遇到高版本Windows媒体播放器播放不了采用早期编码编辑的AVI格式视频,而低版本Windows媒体播放器又播放不了采用最新编码编辑的AVI格式视频。其实解决的方法也非常简单,我们将在后面的视频转换、视频修复部分中给出解决的方案。

Rmvb是一种由RM视频格式升级延伸出的新视频格式,它的先进之处在于RMVB视频格式打破了原先RM格式那种平均压缩采样的方式,在保证平均压缩比的基础上合理利用比特率资源,就是说静止和动作场面少的画面场景采用较低的编码速率,这样可以留出更多的带宽空间,而这些带宽会在出现快速运动的画面场景时被利用。这样在保证了静止画面质量的前提下,大幅地提高了运动图像的画面质量,从而图像质量和文件大小之间就达到了微妙的平衡。

FLV 是FLASH VIDEO的简称,FLV流媒体格式是随着Flash MX的推出发展而来的视频格式。由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上很好的使用等缺点。

WMV(Windows Media Video)是微软推出的一种流媒体格式,它是在“同门”的ASF(AdvancedStreamFormat)格式升级延伸来得。在同等视频质量下,WMV格式的文件可以边下载边播放,因此很适合在网上播放和传输。

MKV不是一种压缩格式,而是Matroska的一种媒体文件,Matroska是一种新的多媒体封装格式,也称多媒体容器 (Multimedia Container)。它可将多种不同编码的视频及16条以上不同格式的音频和不同语言的字幕流封装到一个Matroska Media文件当中。MKV最大的特点就是能容纳多种不同类型编码的视频、

3

音频及字幕流。

了解了以上的相关知识,使得开发多媒体播放软件有了一个更加清晰的思路。

1.4 论文主要研究内容及论文结构安排

本毕业设计是制作一个可播放目前主流媒体格式的多媒体播放器,其基本功能应具有媒体播放、音量调节、播放进度选择、暂停、停止以及抓图等,使之成为一款简易的媒体播放设备,能够完美的播放市面上大多数的音频、视频文件。 论文的结构安排: 第一章 绪论介绍研究背景,目的和意义等;第二章 开发工具介绍,软件的需求分析和模块设计;第三章 多媒体播放器软件设计; 第五章 播放器实现结果演示;最后是结束语以及参考文献和附录的相关内容。

4

第二章 开发平台介绍和软件的初步设计

2.1开发平台的介绍

Visual Studio是微软公司推出的开发环境。是目前最流行的Windows平台应用程序开发环境。Visual Studio 2010版本于2010年4月12日上市,其集成开发环境(IDE)的界面被重新设计和组织,变得更加简单明了。Visual Studio 2010同时带来了NET Framework 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,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量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等常见的视频格式。根据这些要求,需要有相应的软/硬件来支持,硬件方面的要求是计算机要有声卡和

5

显卡,软件方面的要求有:windows xp操作系统、vs2010、directshow sdk开发包、ffdshow编解码软件以及各种视频格式解码器。

视频编解码器,是指一个能够对数字视频进行压缩或者解压缩的程序或者设备。通常这种压缩属于有损数据压缩。

ffdshow是一套免费的编解码软件,可支持H.264、FLV、WMV、MPEG-1、MPEG-2以及MPEG-4等格式视频档。ffdshow本身并不包含媒体播放器,但各种媒体播放器都可以使用ffdshow进行解码。

2.2.2软件的模块设计

多媒体播放器:打开模块、播放模块、暂停模块、停止模块、抓图模块、退出模块、拖拽模块、菜单模块。如图1:

图1: 多媒体播放器模块设计

打开模块:打开目标文件,如音频、视频。 退出模块:关闭播放器。 播放模块:播放音频、视频。

暂停模块:暂时停止正在播放的音/视频文件。 停止模块:结束当前视频的播放。 抓图模块:对视频进行截图保存。

拖拽模块:拖拽音/视频的进度条,控制音量的大小与视频的进度。

菜单模块:设置右键快捷菜单,菜单中包括有对视频播放速率的控制以及全屏、静音等功能。

6

第三章 多媒体播放器软件设计

3.1开发环境配置

在开发之前我们需要在vs2010中搭建directshow sdk开发包。 首先我们将下载好的directshow sdk安装到本机上。 接着我们打开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。

7

3.2实现GraphEdit模拟

实际使用Directshow播放器,首先需要使用GraphEdit来模拟实现,验证插入滤波器的运行特点,体会滤波器的操作过程,为播放器能够正常播放视频做好保障。

在使用graphedit进行模拟实现视频播放的过程中,我们发现无法正常建立滤波器链表。

进行了相关知识的了解之后,我才知道这是由于没有安装相应的解码器。如图3所示,我安装了相应的解码器。

图3:.安装解码器

如图4所示,在安装了解码器之后,则能正常的建立滤波器链表了。

图4 建立滤波器链表

3.3 directshow接口实现函数说明

Directshow有关的接口和方法主要封装在CDXGraph类中,这个类也是本设计中两个重要的类之一。以下就是该类中所包含的主要方法以及作用:

8

函数名 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) 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 获取视频的结束位置 *outPosition) 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类,它是本设计中两个重要的类中的另外一个,它是在建立MediaPlayer工程时由MFC建立的一个对话框的类,在该对话框上进行的操作函数即可实现程序所需要的所有功能,其实现函数则是调用CDXGraph类的相关函数,从而完成各项具体功能。各个模块的具体实现函数描述如表2:

9

模块名称 打开模块 播放模块 暂停模块 停止模块 实现函数 void CMediaPlayerDlg::OnBnClickedButtonOpen() void CMediaPlayerDlg::OnBnClickedButtonPlay() void CMediaPlayerDlg::OnBnClickedButtonPause() void CMediaPlayerDlg::OnBnClickedButtonStop() 抓图模块 void CMediaPlayerDlg::OnBnClickedButtonGrasp() 退出模块 void CMediaPlayerDlg::OnBnClickedButtonExit() 拖拽模块 void CMediaPlayerDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 菜单模块 void CMediaPlayerDlg::OnMenuOpenfile() void CMediaPlayerDlg::OnMenuHalfrate() void CMediaPlayerDlg::OnMenuNormalrate() void CMediaPlayerDlg::OnMenuDoublerate() void CMediaPlayerDlg::OnMenuFullscreen() void CMediaPlayerDlg::OnMenuAlwaysontop() void CMediaPlayerDlg::OnMenuMute() void CMediaPlayerDlg::OnMenuClosefile() void CMediaPlayerDlg::OnMenuPlay() void CMediaPlayerDlg::OnMenuStop() void CMediaPlayerDlg::OnMenuGrabimage() void CMediaPlayerDlg::OnMenuExit() 表2:各个模块及其实现函数

3.5主要变量声明

程序中用到得主要控件有:6个按钮控件,一个图像控件,两个进度条控件。 控件名称 IDC_BUTTON_OPEN 变量类型 CButton 变量名 m_Open 打开 说明 10

IDC_BUTTON_PLAY IDC_BUTTON_PAUSE IDC_BUTTON_STOP IDC_BUTTON_GRASP IDC_BUTTO_EXIT IDC_SLIDER_PLAY CButton CButton CButton CButton CButton CSliderCtrl m_Play m_Pause m_Stop m_Grap m_Exit m_sliderPlayer m_siderVolume m_videoWindow 播放 暂停 停止 抓图 退出 视频进度条 音量进度条 图像控件 IDC_SLIDER_VOLUME CSliderCtrl IDC_VIDEO_WINDOW CStatic 表3:程序中的主要变量

3.6设计多媒体播放器的界面 播放器主界面设计如图5:

图5:播放器主界面

3.7播放器模块设计

为界面添加Picture Control图像控件,两个进度条控件以及打开、播放、

11

暂停、停止、抓图、退出等按钮控件。

下面对各个模块的实现函数及其代码做简要分析:

(1)单击播放器界面中的“打开”按钮,即可打开要播放的媒体文件。在下述代码中,将以只读方式打开要播放的文件,并且过滤了流媒体文件的格式,获取了媒体的路径和文件名。

void CMediaPlayerDlg::OnBnClickedButtonOpen() {

CString strFilter = _T(\VI File (*.avi) | *.avi|\

strFilter += \ strFilter += \ strFilter += \

strFilter += \ //编辑下拉选项框 CFileDialog

dlg(TRUE,NULL,NULL,OFN_PATHMUSTEXIST|OFN_HIDEREADONLY, strFilter, this); //设置打开文件对话框

if (dlg.DoModal() == IDOK)//当用户打开文件时,做以下行为 { } }

(2)单击“播放”按钮后,开始选择播放的媒体文件。同时在标题栏中显示播放速率和媒体文件名,具体代码如下:

void CMediaPlayerDlg::OnBnClickedButtonPlay() {

if (m_pFilterGraph) //如果CDXGraph对象已创建成功,则执行以下代码 {

SetWindowText(_T(\倍速播放 \设置窗口标题m_pFilterGraph->Run(); //播放视频文件

m_pFilterGraph->ChangeAudioVolume(m_volume); //改变音量 栏文本内容

CreateGraph();创建链表,连接滤波器

m_sourceFile = dlg.GetPathName();//获取文件所在的路径名

m_mediaFileName =GetFileTitleFromFileName(m_sourceFile,1);//获取

文件名称

12

}

m_sliderVolume.SetPos(m_volume); //设置音量进度条的位置 if (m_playerTimer == 0) //设置定时器 { } }

(3)点击“暂停”按钮,暂停播放视频。 void CMediaPlayerDlg::OnBnClickedButtonPause()

m_playerTimer = SetTimer(SLIDER_TIMER, 100, NULL);

{ 码 { } }

(4)点击“停止”按钮,停止播放视频。 void CMediaPlayerDlg::OnBnClickedButtonStop() { 码 { } }

(5)点击“退出”按钮,退出程序。

void CMediaPlayerDlg::OnBnClickedButtonExit() {

CDialog::OnOK();//关闭窗口 OnBnClickedButtonStop();//停止播放 CoUninitialize();//关闭程序的所有线程

m_pFilterGraph->Stop();//停止播放视频

if (m_pFilterGraph != NULL)//如果CDXGraph对象不为空,则执行代m_pFilterGraph->Pause();//暂停播放视频

if (m_pFilterGraph != NULL)//如果CDXGraph对象不为空,则执行代

13

}

(6)点击“抓图”按钮,实现视频截图功能,并且将图片保存到软件的同一目录下。

void CMediaPlayerDlg::OnBnClickedButtonGrasp() {

static int c = 0;

TCHAR szFilename[MAX_PATH]; DWORD dwPathLen = 0;

if((dwPathLen=::GetModuleFileName(::AfxGetInstanceHandle(),szFilename, MAX_PATH ))== 0)//得到程序整个路径名长度 {

return; }

for( int i=dwPathLen-1; i>=0; i--)//获取图片保存的目录 {

if(('\\\\' == szFilename[i]) || ('/' == szFilename[i])) {

break; } else {

szFilename[i] = '\\0'; }

}

//设置图片保存的完整路径名称 CString str;

str.Format(_T(\

CString strTemp;

strTemp.Format(_T(\ str += strTemp + _T(\ c++;

TCHAR *p=str.GetBuffer(str.GetLength()); str.ReleaseBuffer();

//进行抓图,并且将图片放在指定路径下 if (m_pFilterGraph != NULL)

14

{ } }

(7)实现拖拽功能,使得手动拖动进度条控件,能够控制音量的大小以及视频的进度。

void CMediaPlayerDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {

if(pScrollBar->GetSafeHwnd()==m_sliderPlayer.GetSafeHwnd()) //如果拖动消息来自视频进度条,则执行代码

{ 长度 置

}

else if(pScrollBar->GetSafeHwnd()==m_sliderVolume.GetSafeHwnd())//如果拖动消息来自音量进度条 量

}

{if (m_pFilterGraph != NULL)

{

m_volume = m_sliderVolume.GetPos();//获取音量进度条位置 m_pFilterGraph->ChangeAudioVolume(m_volume);//改变当前音}

double pos = duration * m_sliderPlayer.GetPos()/1000.0;//计算得到m_pFilterGraph->SetCurrentPosition(pos);//设置当前进度条的位

进度条位置

if (m_pFilterGraph != NULL)//CDXGraph对象不为空 {

double duration =1.0;//定义事件长度对象

m_pFilterGraph->GetDuration(&duration);//获取流媒体文件时间

if (m_pFilterGraph->SnapshotBitmap(p)) { }else

MessageBox(_T(\抓图失败!\

15

}

} else { }

CDialog::OnHScroll(nSBCode, nPos, pScrollBar);

(8)设置静音或非静音模式 void CMediaPlayerDlg::OnMenuMute() { { } }

(9)设置全屏播放模式。

void CMediaPlayerDlg::OnMenuFullscreen() { { {

m_pFilterGraph->SetFullScreen(TRUE);//设置为全屏模式 flag = 1;//设置信号量为真

m_pFilterGraph->SetFullScreen(FALSE);//关闭全屏模式 if (!flag)//判断信号量的值是否为真,即判断当前是否为全屏 static int flag=0; //设置信号量 if (m_pFilterGraph != NULL)

static int flag=0;//设置信号量

if (!flag)//判断信号量是否为真,即判断当前是否为静音模式 { { }

m_pFilterGraph->UnMute();//设置为非静音模式 flag = 0;设置信号量为假

m_pFilterGraph->Mute();//设置为静音模式 flag = 1;//设置信号量为真

if (m_pFilterGraph != NULL)//CDXGraph对象不为空

}else

}else{

16

}

}

flag = 0;//设置信号量为假

}

(10)设置置顶播放模式,但用户将播放器设置成置顶播放模式后,播放器就不会被其他窗口所覆盖。

void CMediaPlayerDlg::OnMenuAlwaysontop() {

static int flag=0; 设置信号量

if (!flag)//判断信号量是否为真,即判断当前是否为置顶模式 {

::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSI ZE);//设置窗口为置顶

flag = 1;//设置信号量为真 } else { } }

(11)播放速率的控制,以下为半速播放视频的代码,正常速率播放和两倍速率播放视频的代码相似,这里就不在重复讲述。

void CMediaPlayerDlg::OnMenuHalfrate() {

if (m_pFilterGraph)//如果CDXGraph对象不为空,则执行代码 m_pFilterGraph->SetPlaybackRate(0.5);//将播放速率设为1/2;

SetWindowText(_T(\倍速播放 \设置窗口标题文本 }

}

17

::SetWindowPos(m_hWnd,HWND_NOTOPMOST,0,0, 0, 0, SWP_NOSIZE flag = 0;//设置信号量为假

| SWP_NOMOVE);//设置窗口为非置顶

{

第四章 程序实现结果

4.1程序运行结果演示

1.双击play.exe可执行文件,自动进入播放器主界面,程序主界面如图6:

图6:播放器运行界面

2.单击“打开”按钮,弹出打开文件对话框,如图7。在文件类型下拉列

表中,可以选择打开某种格式的文件,基本上网络上流行的主流媒体格式都可以打开播放,选择一个媒体文件后单击打开。

18

图7:打开视频文件对话框

3.单击“打开”后返回程序主界面。

4.单击“播放”按钮,开始播放文件,在播放过程中,可通过单击进度条自由选择播放进度。在播放过程中,可以通过“暂停”、“停止”、“全屏”,“抓图”等按钮达到相应的播放控制功能。

5.最后可以单击“退出”按钮,退出程序。

在这次的毕业设计中,我通过Microsoft Visual Studio 2010开发工具,设计制作了一个多媒体播放器。该播放器虽然简单小巧,但基本功能齐全,能够实现全屏、抓图等功能,并且能够播放网络上大多数常见的媒体格式。虽然设计过程充满困难,但获得的成果让人感到欣喜。通过这次的设计,我不仅学习到了如何利用微软的开发平台开发用户界面程序,还学习到许许多多多媒体相关的重要知识,这对我今后继续学习将起到重要作用。

19

参考文献

[1] 张海藩. 软件工程导论(第5版)[M]. 清华大学出版社, 2008 [2] 史济民. 软件工程—原理、方法与应用[M]. 高等教育出版社, 2002 [3] 郑人杰. 实用软件工程. 清华大学出版社[M], 2002

[5] 王建民, 张宏壮. 基于Qt的嵌入式媒体播放器系统的设计[D]. 微计算

机信息, 2008, 24(7)

[6] 王亚荣, 顾卫江. C++Builder中基于DirectShow的媒体播放器的设计与

实现[D]. 计算机与数字工程, 2007, 35(4)

[7] 钱冬云. 基于Delphi的新型多媒体播放器的制作[J]. 浙江工贸职业技

术学院学报, 2007, 7(2)

[8] 王咸伟. 在Delphi中利用MediaPlayer组件进行多媒体编程[D]. 计算机

时代, 1997, 2

[9] David Simon. Visual C++ 6 编程宝典[M]. 北京电子工业出版社, 2005 [10]宇鹏. Visual C++实践与提高---ActiveX篇[M]. 北京中国铁道出版社,

2001

[11]管西京,深入体验Visual C++项目开发[M],清华大学出版社,2011

20

致 谢

在整个论文的写作过程中,我首先要感谢我的论文指导老师方老师。他为我的论文写作的安排计划上提供了合理的建议,同时在我开题报告的拟写、论文的设计上都做出了悉心的指导,以及他提供给我的大量资料都对我的设计起到了莫大的帮助。其次,我要感谢本次论文所参考书籍的作者以及网上有关资料的提供者,因为他们无形的帮助,才会有这篇论文的完成。

衷心的谢谢你们!

21

本文来源:https://www.bwwdw.com/article/ei03.html

Top