多媒体播放器的设计_第1页
多媒体播放器的设计_第2页
多媒体播放器的设计_第3页
多媒体播放器的设计_第4页
多媒体播放器的设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/目录1vb简介………………12多媒体播放器的开发设计…………22。1设计要求…………22.2设计方案…………22.3基本原理…………33设计方案的实现……………………54程序代码……………55运行结果……………106心得体会……………137参考资料……………141VB简介Visual意为可视的、可见的,指的是开发像Windows操作系统的图形用户界面(GraphicUserInterface,GUI)的方法,它与其他编程软件不同的是不需要编写大量代码去描述界面元素的外观和位置,只要把预先建立好的对象拖放到屏幕上相应的位置即可。应该说,这是一次质的飞跃,是一次编程技术的革命。Basic实际上是一个短语的缩写,这个短语就是Beginners'All-PurposeSymbolicInstructionCode,其中文意思为“初学者通用符号指令代码”。VisualBasic6有学习版、专业版和企业版三种版本,以满足不同的开发需要。学习版适用于普通学习者及大多数使用VisualBasic开发一般Windows应用程序的人员;专业版适用于计算机专业开发人员,包括了学习版的全部内容功能以及Internet控件开发工具之类的高级特性;企业版除包含专业版全部的内容外,还有自动化构件管理器等工具,使得专业编程人员能够开发功能强大的组骨子里分布式应用程序。随着版本的提高,VisualBasic的功能也越来越强。自从5。0版,VisualBasic推出了中文版,与前个版本相比,其功能有了很大提升.但是,功能再强大,VisualBasic仍然有一个缺点:在没有MSVBVM**。DLL的计算机上必须安装所需的DLL文件(同样VisualC++在没有MSVCRT*。DLL情况下亦无法运行)。不过在Windows2000之后,这个DLL就被预置到操作系统中了,一般来说,程序如果只使用了VB内部的控件和对象,基本上不会有太大的问题.在21世纪初,Microsoft公司推出VisualStudio.NET2003,它与VisualBasic之间有了重大变化,VisualStudio为各种编程工具做了一个平台,Visua可在这种平台上运行。相对于传统VB,有很大的不同。VB。Net首次使用.Net构架进行可视化编程,并且能很好地与COM构架兼容,VisualStudio.NET2003应用.NETFramework1.1。2005年VisualStudio2005则运用了NET2.0的技术,更加的方便了程序员的工作。可是新的程序对系统配置要求也较高,需要微软.NetFramework2.0以上的.Net构架支持。2007年12月,微软(Microsoft)推出了VisualStudio2008Beta2发生了重大的变化(见附图)在代码输入的时候,可以比VB2005快很多,在非特殊的情况下,VB2008都会自动开启自动完成关键字这个命令而且支持最新的.NETFramework3。5SP1Beta微软开发了一系列有关VB的脚本语言:VisualBasicforApplications,即VBA,包含在微软的应用程序中(比如MicrosoftOffice),以及类似WordPerfectOffice这样第三方的产品里面。VBA这样嵌入在各种应用程序中看起来有些矛盾,但是它的功能和VB一样强大.VBScript是ASP的默认语言,还可以用在Windows脚本编写(ShellScript)和网页编码(HTML)中.尽管它的语法类似于VB,但是它却是一种完全不同的语言。VBS不使用VB运行库运行,而是由Windows脚本宿主(wscript。exe—MicrosoftWindowsBasedScriptHost)解释执行。这两种语言之中的不同点影响ASP网站的表现。当微软准备开发一种新的编程工具的时候,第一决定就是利用最抢手的VB6来进行修改,或者就是重新组建工程开发新工具。微软后来开发了VB的继任者VisualBasic。NET,同时也是。NET平台的一部分。VB.NET编程语言是一种真正的面向对象编程语言(VB4—VB6只能称为基于对象而不是面向对象,最明显的特征就是VB4—VB6都不支持类的继承),和传统VisualBasic并不完全兼容.[2]2多媒体播放器的开发设计2.1设计要求内容:多媒体播放器是根据计算机用户使用系统时的实际需求而开发,完全能够实现用户对计算机多媒体文件的查询和播放.要求:根据多媒体播放器的要求,要求系统具有以下功能:选取多媒体文件;播放多媒体文件;停止播放多媒体文件;打开字幕功能;关闭字幕功能;打开CD驱动器功能;关闭CD驱动器功能;添加播放列表功能。2.2设计方案WindowsMediaPlayer控件(msdxm.ocx)支持的文件类型比较丰富,可以播放WAV、MID、MP3、WMA、AIF、ASF、MPEG、MPG、AVI、MOV、DAT、RMI等多媒体文件。在VB6.0SP5下利用这个控件实现自动连续循环播放以及启动时自动从上次退出时的文件处继续播放多媒体文件的技术。多媒体技术的基本工作原理是:多媒体终端通过不同接入层网络(固定NGN、移动NGN、Internet),接入传输层IP分组网络,在控制层IMS/SoftSwitch等SIPProxy设备的控制下,通过业务层的逻辑控制实现多媒体业务及应用。其结构下图所示:图1多媒体结构图MPlayer是一款开源的多媒体播放器,以GNU通用公共许可证发布。此款软件可在各主流作业系统使用,例如Linux和其他类Unix作业系统、微软的视窗系统及苹果电脑的MacOSX系统。MPlayer是建基于命令行界面,在各作业系统可选择安装不同的图形界面。MPlayer是Linux上的最强大的电影播放器(也能跑在许多其它Unixs上,甚至非x86CPU上)。如今它也有了在微软视窗操作系统和苹果MacOS中的版本。它能使用众多的本地的,XAnim,RealPlayer,和Win32DLL编解码器,播放大多数MPEG,VOB,AVI,OGG,VIVO,ASF/WMV,QT/MOV,FLI,RM,NuppelVideo,yuv4mpeg,FILM,RoQ文件.你还能观看VideoCD,SVCD,DVD,3ivx,RealMedia,和DivX格式的电影(你根本不需要avifile库)。MPlayer的另一个大的特色是广泛的输出设备支持。它可以在X11,Xv,DGA,OpenGL,SVGAlib,fbdev,AAlib,DirectFB下工作,而且你也能使用GGI和SDL(由此可以使用他们支持的各种驱动模式)和一些低级的硬件相关的驱动模式(比如Matrox,3Dfx和Radeon,Mach64,Permedia3).他们大多数支持软件或者硬件缩放,因此能在全屏下观赏电影。MPlayer还支持通过硬件MPEG解码卡显示,诸如DVB和DXR3与Hollywood+。可以使用European/ISO8859—1,2(匈牙利语,英语,捷克语等等),西里尔语,韩语的字体的清晰放大并且反锯齿的字幕(支持10种格式),和onscreendisplay(OSD)。MPlayer是Linux上一款非常优秀的电影播放器,能够播放大多数视频文件,如MPEG,VOB,AVI,OGG,VIVO,ASF/WMV,QT/MOV,FLI,RM,NuppelVideo,yuv4mpeg,FILM,RoQ等。而且它的另一个优点是可移植性好,现在常用的微软的Windows平台和苹果的Mac平台都有它的身影.不仅如此,Mplayer还可以移植到很多非X86的平台上。2。3基本原理MCI(媒体控制接口)是Microsoft公司为实现Windows系统下设备无关性而提供的媒体控制接口标准。用户可以方便地使用MCI控制标准的多媒体设备。MCI包含在Windows多媒体扩展的MMSYSTEM模块中,用来协调事件间以及MCI设备驱动程序间的通讯,提供了与设备无关的接口属性。通常应用程序是通过指定一个MCI设备类型来区分MCI设备,设备类型指明了当前实际使用设备的物理类型,不同的设备类型使用不同的控件属性来进行描述(见附表1)。从使用的控制方式上来说,MCI设备分为复合和简单两类。一个简单MCI设备并不需要设备元素。例如,CD音频和音碟机就是在一个已经安装好了的硬盘上工作的,它们不需要应用程序为其操作的媒体内容提供任何信息.但对于复合的MCI设备,就需要应用程序提供设备元素,即一个包含全部路径名的源数据文件或目的文件。VisualBasic语言的CustomControl(用户控制部件)概念体现了当今软件设计的发展潮流--面向对象技术,编程者可以在VisualBasic的工具箱(Toolbox)中嵌入各式各样五花八门的用户控件,每个用户控制部件都有一定的属性和操作方法,编程者通过属性的设置和方法的控制完成特定的功能。为了方便地控制多媒体,在专业版VisualBasic工具箱中提供了一个用于多媒体目的的用户控件—-MCI。OCX。多媒体MCI控件MCI.OCX专用于对多媒体控制接口MCI设备的多媒体数据文件实施记录和回放,从目的效果上来说,该控件通过一组按钮来发出种种设备控制命令以实现对诸如:音频面板、MIDI音序器、CD-ROM驱动器、音频CD播放机、录像带播放、录音带录放等设备的控制。在VisualBasic程序设计时,当在表中加入多媒体MCI控件时(在工具箱内双击MCI控件),则出现下列按钮群:向前(Prev)、向后(Next)、播放(Play)、暂停(Pause)、返回(Back)、单步(Step)、停止(Stop)、记录(Record)和出带(Eject)。应用程序对MCI的这组按钮操作非常灵活方便,如当我们打开一个MCI设备后,就可以根据该设备类型的属性随时从控件中选择合适的状态按钮来表示即刻设备的物理状态.所有MCI控件可以有下列几种方式来编程:⑴控件及其各按钮的可见性和使能性;⑵可变或完全对控件进行重新定义;⑶在一个窗口表格中可以同时控制多个设备。在VisualBasic3.0专业版中,多媒体控件MCI。OCX(在VisualBasic3.0和4.0中,多媒体控件的扩展名为。VBX)是作为可选用部件提供的.为了使用它,首先要执行File菜单命令,把Windowssystem目录下的MCI。OCX加入到工具箱(Toolbox)中,这时会在工具箱中出现相应的MCI.OCX图标。如果使用的是VisualBasic4.0版(或5。0版),选择oolsCustomControls菜单或直接键入Ctrl+T,即可出现对话框,在AvailableControls列表框中选中MicrosoftMultimediaControls条目旁边的检查框,同样会在工具箱中出现MCI.OCX图标.

双击工具箱中的多媒体控件MCI.OCX图标,调用MCI。OCX控件之后,表单FORM中将出现一排灰色的媒体控制按钮(九个)。多媒体控件MCI.OCX包含有一组高级的与设备无关的控制命令。在使用该多媒体控件时,首先用OPEN命令打开MCI设备(多媒体设备)并建立一个与之对应的文件,以便来进行录或放等操作(但是对诸如CDAudio、VCR和录像带不能使用相应文件)。一旦设备打开成功,就可以向它发出各种操作命令(见附表的按钮命令)来完成指定的工作任务。最后记住,要用Close命令来关闭设备和数据文件。ﻫ使用MCI.OCX来进行多媒体应用程序开发是很方便的,因为大多数属性都是容易理解的,其中Command属性尤为重要,它是在运行过程中向多媒体设备发命令.格式为:

mand=cmdstring$

其中,cmdstring$变量是如下可执行命令名:Open、Close、Play、Pause、Stop、Back、Step、Prev、Next、Seek、Record、Eject、Sound和Save。一旦给其命令设置,它就立刻执行,所发生的错误存在Error属性中。

下面以播放DEMO.WAV(波形文件)文件为例,说明VisualBasic多媒体应用程序设计步骤。

首先,创建一个包含有多媒体控件(MCI.OCX)的表格(Form),于是屏幕上显示出形状类似录音机的控制键,不过这时多媒体控制部件是不能马上拿来用的(各键呈灰色),须通过程序代码来改变键的状态。

其次,在Form_Load过程中,插入相应程序代码。如下ﻫSubForm_Load()ﻫ‘在发出OPEN命令前要设置多媒体设备的属性ﻫForm1.MMControl1.Notify=FalseﻫForm1.MMControl1.Wait=True

Form1.MMControl1.Shareable=False

Form1.MMControl1.DeviceType="WaveAudio"ﻫForm1。MMControl1。"c:windowss

Mmdatademo.wav"

mand=”Open"

EndSub3设计方案的实现3。1自动连续循环播放多个文件通过对通用对话框控件(COMDLG32.OCX)的有关属性进行设置,可实现按选择的文件类型在列表框中显示符合条件的文件,用户可在该列表框中显示符合条件的文件,用户可在该列表框中选择一个文件,或选择连续或不连续的几个文件,若选择了多个文件,则按顺序连续循环播放。开始播放后,组合框和窗体的标题栏同时显示正在播放文件的文件名。3.2自动记忆播放目录和正在播放的文件的路径退出播放器时,程序自动将用户选择的目录保存到Windows的注册表中,以便下次选择要播放的文件时,在打开对话框中,直接显示的是上次选择的目录。同时,自动将用户选择的文件清单保存到文件中,以便下次启动该程序时,可以直接从退出时正在播放的那个文件开始继续播放,这样就能实现每次启动播放器,首先播放的是上次退出时播放的那个文件。这样做就使程序具有了记忆功能。3.3用户自定义播放顺序单击下一首按钮,开始播放下一个文件,单击上一首按钮,开始播放上一个文件。单击暂停按钮,则播放器暂停播放,同时暂停按钮变为开始按钮,单击开始按钮,播放器从暂停处继续播放,同时开始按钮恢复为暂停按钮。单击组合框右边的下拉箭头,可以看到正在播放的文件列表,要想换一个文件播放,直接单击文件名即可。用户也可以直接打开播放列表文件,用文本编辑器编辑播放文件的顺序.程序代码4。1界面布局设计新建一个窗体Forml,在上面画一个组合框Combol,设置其Style属性2—DropdownList,画五个命令按钮(打开、暂停、关闭、上一首、下一首),一个通用对话框(CommonDialog)控件,一个媒体播放器(WindowsMediaPlayer)控件.调整好控件在窗体中的位置。4。2系统初始化PrivateDeclareFunctionGetSystemDirectoryLib″Kernel32″Alias″GetSystemDirectoryA″(ByValpBufferAsString,ByValnSizeAsLong)AsLong返回Win2dows\system所在的文件夹PrivateWinSysPathAsStringPrivateSelectFName(1000)AsStringPrivateSelectNumAsInteger,NextPlayingAsIntegerPrivatePreviousPathAsString此变量保存用户上次选择的目录,其值保存在Windows注册表中4.3自动从上次退出时的文件处继续播放要实现此功能,可以在窗体的Load事件中编写如下代码:Dimtmp1AsStringDimtmp2AsIntegerMediaPlayer1.AutoRewind=TrueMediaPlayer1.AutoStart=TrueMediaPlayer1.ShowStatusBar=TrueMediaPlayer1。ShowDisplay=TrueMediaPlayer1.AutoSize=FalseCombo1.Locked=FalsePreviousPath=GetSetting(″MyPlayer″,″PlayMM″,″LastPath″,″NoData″)以下代码将上次选择的多媒体文件(保存在WinSysPath中)读出来,放SelectFName数组中,并开始播放tmp1=Space(260)tmp2=GetSystemDirectory(tmp1,Len(tmp1))WinSysPath=Left(tmp1,tmp2)WinSysPath=WingSysPath+″\Inventory.txt″Inventory.txt文件保存正在播放文件的列表。OnErrorGoToErrhandlerSelectNum=0NextPlaying=-1OpenWinSysPathForInputAs#1DoWhileNotEOF(1)LineInput#1,SelectFName(SelectNum)\ComboL.AddltemMid(SelectFName(Select2Num),InStrRev(SelectFName(SelectNum),″\N)+1)SelectNum=SelectNum+1LoopClose#1MediaPlayerlEndOfStream(0&)Errhandler:IfCombol.ListCount=0Then′Inventory.txt文件不存在或播放列表为空Combol。List(0)=“没有可选项目”EndIfCombol.Listlndex=04。4选择播放序列PrivateSubCommand1Click()DimFNameAsStringDimiAsInteger,jAsIntegerDimThePathAsStringDimtmpAsStringCommonDialog1。CancelError=TrueOnErrorGoToErrhandler允许多选,所有选择的文件名之间用空格分隔,保存在中CommonDialogl。Flags=cdlOFNAllowMultiselectCommonDialogl.InitDir=IIf(PreviousPath=″o2Data″,″C:\WINDOWS″,PreviousPath)CommonDialogl。Filter=″3。mpeg|3.mpeg|3.mpg|3.mpg|3.avi|33.AVI|3。wav|3。WAV|3.mid|3。MID|3。mp3|3。MP3|3。mov|3.MOV|3.dat|3.DAT|3.RMI|3.rmi|3。3|3.3″CommonDialogl.Max=32767当同时选择许多文件时默认的260放不下,故要大点,这是最大的值CommonDialog1.ShowOpenFName=CommonDialogl。下面代码将选择的若干文件名分开,放在数组SelectFName中IfInStr(FName,Chr(32))=0Then′若只选择一个文件,FName中没有空格,否则文件名之间用空格分隔,若文件在根日录,则路径形如E:\,否则形如E:\abc\123SelectNum=1SelectFName(0)=FNameThePath=Left(Fname,InStrRev(Fname,″\″)—1)ElseThePath=Left(FName,InStr(FName,Chr(32))-1)+″\″FName=Mid(Fname,InStr(Fname,Chr(32))+1)SelectNum=0J=1tmp=Space(0)Fori=1ToLen(FName)IfMid(FName,i,1)=Chr(32)ThenSelectFName(SelectNum)=ThePath+tmpSelectNum=SelectNum+1tmp=Space(0)Elsetmp=tmp+Mid(FName,i,1)EndIfNextiSelectFName(SelectNum)=ThePath+tmpSelectNum=SelectNum+1EndIf’分隔结束Combol.ClearFori=0ToSelectNum-1此循环将选中的文件显示在组合框中Combol.AddltemMid(SelectFName(i),In2StrRev(SelectFName(i),″\″)+1)NextiCombol.Listlndex=0NextPlaying=0Me.Caption=Combol.TextMediaPlayerl。=SelectFName(0)SaveSetting″MyPlayer″,″PlayMM″,″LastPath″,″ThePath″Errhandler:EndSub4。5暂停播放PrivateSubCommand2Click()IfCommand2.Caption=“暂停”ThenCommand2.Caption=“开始”MediaPlayerl.StopElseCommand2.Caption=“暂停”MediaPlayerl.PlayEndIfEndSub4.6关闭播放器退出之前,将用户选中的文件保存起来,以便下一次启动该程序时,可以直接从保存时的文件开始继续播放,为了做到这一点,在将播放列表写入文件时,必须让正在播放的那个文件首先写入文件中,然后是它后面的,到底后再绕回来,按这个顺序写入。因为程序启动后,是按文件电的列表顺序从前向后进行播放的,故每次启动都省先播放的是退出之前播放的那个文件。PrivateSubCommand3Click()DimtmplAsIntegerOnErrorGoToErrhandlertmp1=0OpenWinSysPathForOutputAs#1DoWhiletmpl〈SelectNumPrint#1,SelectFName(NextPlaying)tmp1=tmp1+1NextPlaying=(NextPlaying+1)ModSelect2NumLoopClose#IErrhandler:UnloadMeEndSub4。7上一首PrivateSubCommandoClick(yNextPlaying=IIf(NextPlaying-1〈0,Select2Num—2,NextPlaying—2)MediaPlayerl-EndOfStream(0&)EndSub4.8下一首PrivateSubCommandsClick()MediaPlayerlEndOfStream(0&)EndSub4.9在组合框中选择播放文件PrivateSubCombolClick()NextPlaying=Combol.Listlndex-1MediaPlayerlEndOfStream(0&)EndSub4。10卸载播放器PrivateSubFormQueryUnload(CancelAsInte2ger,UnloadModeAsInteger)Command3ClickEndSub4.11切换文件PrivateSubMediaPlayerl-EndOfStream(ByVal2ResultAsLong)播放文件结束时触发此事件OnErrorGoToErrhandlerNextPlaying=(NextPlaying+1)ModSelectNumMediaPlayerl.=SelectFName(NextPlaying)Combol.Listlndex=NextPlayingMe.Caption=Combol.TextCommand2。Enabled=TrueCommand2.Caption=“暂停”Errhandler:EndSub//DynSplitView2。cpp:implementationfile//5运行结果Mplayer是我们所设计的多媒体播放器的核心,它支持的视频格式直接影响到整个播放器的性能。下面将从这方面入手,对它的性能进行必要的测试.Mplayer的解码库是它支持的视频格式的决定因素。在X86平台的Linux操作系统中,Mplayer拥有丰富的解码库,但是很大一部分都是以非开源的形式提供的。所以将Mplayer移植到OMAP3530平台后,仅仅有为数不多的几个开源的库可以继续使用.移植以后的Mplayer的视频解码器包括FFmpegDivX/libavcodec、libmpeg2和XviD等比较常用的库,可以支持H263、MJPEG、RV10、DivX3、DivX4、DivX5、MP41、MP42、WMV1、WMV2、HuffYUV以及MPEG和AVI编码格式编码的视频流。而通俗的讲,常见的媒体类型,除了RM格式和QuickTime格式以外,移植后的Mplayer基本都可以支持的。下面是播放各种格式视频的截图:图2播放flv格式视频图3播放avi格式视频图4播放mpeg格式视频图5播放mpg格式视频6心得体会学习VB程序设计的方法保持良好的学习心态,要有自信,自强,积极主动学习.克服畏难情绪,树立学好程序设计的信心要有良好的学习习惯。VB程序设计的入门学习并不难,但却是一个十分重要的过程,因为程序设计思想就在这时形成的,良好的程序设计习惯也在这个阶段养成。学习程序设计要注重理解一些重要的概念。VB程序设计本身并不复杂,翻开一本程序设计学习的书籍,看到的无非就是变量,函数,条件语句,循环语句等概念.但要真正能进行程序设计,需要深入理解这些概念.因此,在程序入门阶段还是应该重视概念的学习.程序设计入门阶段要经常自己动手抄写或编写一些小程序,亲自动手进

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论