好文档 - 专业文书写作范文服务资料分享网站

视频播放器设计

天下 分享 时间: 加入收藏 我要投稿 点赞

视频播放器设计

1 需求分析

由于计算机的普及,极大地改变了人们的生活。随之带来了开发各种软件的需 求。家用型计算机主要用于家用软件、学习软件、游戏软件和多媒体和多媒体软件,以及播放CD、VCD、DVD、MP3等多媒体信息。然而多媒体播放器的开发仍然不能满足人们的需求,多媒体文件格式多样,但却没有一款播放器能够满足所有格式的解码。人们渴望解码能力更强大,功能更完备的多媒体播放器。

“多媒体”是一种新型的信息处理与传播技术。有人认为它是信息及其传输媒介方面的一场根本革命。人们对新技术的渴望和欢迎、新奇感和占有欲、宣传热情和赞美态度,是发自内心的。特别是计算机多媒体技术的功能,令人大开眼界,惊叹不已。它在商业、信息检索、文化娱乐和教育等方面的应用效果明显,前景广阔。

由多媒体播放器的开发现状看来,并没有哪一款播放器能适应所有多媒体文件的解读,随着视频、音频的迅猛发展,媒体文件的格式层出不穷,由过往美国在线(AOL)公司的Nullsoft部门开发的Winamp独占鳌头,到Real Networks公司的Real Player和微软公司的Windows Media Player风靡全球,再到如今播放器开发的百花齐放的竞争时代,多媒体播放器的开发经历了许多风浪和变化,但是,仍然没有出现全能的播放器,始终没有跨越编码格式的局限,随着多媒体技术的不断发展,人们对多媒体软件的要求也不断高涨,所以对多媒体软件的开发也成为当今计算机开发的重要课题。目前的音频、视频格式繁多,研制格式覆盖面广的多媒体播放器前景非常广泛。 随着计算机、家电、通信等技术的不断发展,多媒体技术有着广泛的开发前景,尤其是多媒体播放器的开发,开发格式覆盖面更广,兼容性更好,功能更完备的播放器势在必行。本文主要采用C++ Builder2009作为开发工具,设计并实现一个多媒体播放器。可播放MP3,AVI,WMV,WMA,RM,RMVB,SWF等多种格式的多媒体文件,并且能够控制播放,暂停,停止,快进,后退,音量控制的调节,选择上一曲,选择下一曲,图像的显示,文件的计时,列表文件的添减操作等多种播放控制功能,界面简明,操作简单。

2 系统总体设计

2.1DirectShow概述

DirectShow是一种通过自定义或内置的大量的Filter(过滤器)来处理多媒体数据的体系结构。这些Filter大致分三类:Source Filter(源过滤器)、Transform Filter(转换过滤器)、Render Filter(呈现过滤器)。源过滤器主要负责获取数据,数据源可以是文件、网络、计算机采集卡或数字摄像机里的,然后数据向下传输到Transform Filter,它主要负责数据的格式转换,然后继续向下传输到Render Filter,它主要负责数据的最终去向,将数据送给显卡声卡进行播放或输出变成文件存储起来,见图2-1。

应用程序命令DirectShow过滤器图表管理器Filters Graph Manager应用程序源过滤器SourceFilters转换过滤器TransformFilters呈现过滤器RenderFilters应用程序事件音视频采集设备各种软硬件解码器声卡显卡

图2-1 DirectShow开发应用程序原理图

过滤器Filter是建立在COM技术基础上的,每个Filter本身就是一个COM组件,各个Filter集合组成过滤器图(Filter.Graph),DirectShow提供Filter Graph Manager组件来管理整个过滤器图,比如Filter间的连接和数据流动。Filter之间通过Pin(针脚)连接。

更多感性认识DirectShow,可以DirectX SDK中的自带的实用的程序

GraphEdit,位于安装目录\\Bin\\DXUtils\\graphedt.exe。GraphEdit是构造Filter Graph Manager的可视化工具,在GraphEdit中可以很方便地设计出过滤器图,并验证其可行性。比如:播放一个典型的Demo1.mpg文件(将文件拖动到GraphEdit窗口)所自动构建的Filter Graph。见图2-2。

MPEG Audio DecoderDemo.mpgMPEG-1 Stream SplitterMPEG Video DecoderVideo RendererDefault DirectSound Device图2-2 MPEG文件播放的Filter Graph

如图2所示,箭头方向即是数据的流动,可以看到:MPEG-1 Stream Splitter属于Source Filters,负责接收源文件数据;MPEG Audio Decoder、MPEG Video Decoder属于Transform Filters;分别负责视频、音频的解码;Default DirectSound Device、Video Renderer属于Render Filters,分别负责对视频显示和音频播放。执行菜单Graph->Play,可以看到播放的影音文件。在Graph->Insert Filters可以看到DirectShow提供的大量的支持基本应用的Filter。 2.2软件的总体架构

AVI视频RMVB视频 视频指针解码主界面用户 图2-3 软件架构

2.3 详细设计与实现

下面在C++ Builder中,利用DirectShow技术设计媒体播放器,介绍了

DirectShow程序的一般编写方法。以两种方法实现:一种是直接用DirectX SDK;另一种是用基于DirectShow技术的第三方控件包DsPack。

2.3.1 直接用Direct X SDK中的DirectShow技术的媒体播放器。

用DirectShow编写播放器,可以说主要包括三步: ①创建一个Filter Graph Manager组件。

②根据实际的应用,创建一条完整的链路。比如播放一个本地文件:m_FilterGraph->RenderFile(“Demo1.mpg”,NULL);

③调用Filter Graph Manager(或某个Filter)上的各个接口方法进行控制。并完成Filter Gramph Manager与应用程序的事件交互。比如IMediaControl接口方法Run()、Stop()来控制媒体的播放与停止。

在本实例中,第一步创建一个Filter Graph Manager组件,由自定义的封装类CDXGraph来完成,它的实现文件是CDXGraph.cpp和CDXGraph.h。第二三步要实现与CDXGraph之问的事件交互。由主窗口MainForm(MainUnit.cpp和MainUnit.h)完成。

该程序部分主要代码如下:

//定义基本接口。IGraphBuilder是最重要的接口,用于构造Filter graph;IMediaControl播放控制接口,控制播放、停止、暂停等;IMediaEventEx:应用程序通过此接口获得播放过程中发生的事件,如播放完毕等。IBasicVideo、IBasicAudio分别是图像和声音控制接口;IVideoWindow视频窗口控制接口;IMediaSeeking用于媒体数据流的定位,提供对播放的精确控制,如获得当前播放位置等。

IGraphBuilder *mGraph;

IMediaControl *mMediaControl; IMediaEVentEx *mEvent;

IBasicVideo *mBasicVideo; IBasicAudio *mBasicAudio; IVideoWindow *mVideoWindow; IMediaSeeking *mSeeking;

//用API函数初始化COM组件库CoInitialize(NULL);

//创建Filter graph对象,得到IGraphBuilder接口的接口指针mGrph HRESULT hr=CoCreateInstance(CLSID_FilteGraph,NULL,

CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void * *)&mGraph);

//用QueryInterface()函数获取接口指针

hr = mGraph -> QueryInterface(IID_IMediaControl, (void * *)&mMediaControl);

hr = mGraph -> QueryInterface(IID_IMediaEventEx, (void * *)&mEvent);

hr = mGraph -> QueryInterface(IID_IBasicVideo, (void * *)&mBasicVideo);

hr = mGraph -> QueryInterface(IID_IBasicAudio, (void * *)&mBasicAudio);

hr = mGraph -> QueryInterface(IID_Ⅳideowindow,

(void * *)&mVideowindow);

hf = mGraph -> QueryInterface(IID_lMediaSeeking, (void * *)&mseeking);

//连接输入输出Pin针脚,连接各个Filter

hr=mGraph -> ConnectDirect(inOutputPin,inInputPin,inMediaTyp); //IGraphBuilder接口的方法RenderFile来连接给定的媒体文件,完成Filter Graph的构建。

m_FilterGraph -> RenderFile(m_SourceFile.c_str()); //设置视频窗口并设置消息通知窗口

m_FilteGraph -> SetDisplaywindow(Panell ->Handle); m_FilteGraph -> SetNotifyWindow(this ->Handle); //开始播放

m_FilteGraph ->Run(); ??

//关闭COM组件库,释放资源 CoUtlinitialize();

2.3.2 基于DirectShow技术的第三方控件包DSPack的媒体播放器

Dspack2.34是C++ Builder中用于做DirectShow开发的免费VCL控件。下载地址:http://www.progdigy.com/。DSPack的安装可以参考相关文档。

图2-4组件面板上的DSPack2.34

Dspack2.34中有七个组件:FilterGraph、VideoWindow、SampleGrabber、Filter、ASFWriter、DSTrackBar、DSVideoWindowEx2。见图5-1。

FilterGraph组件基本对应于DirectShow中的Filter Graph Manager,Filter Graph的创建和控制由它完成。Filter组件可以充当DirectShow中的各种Filter,VideoWindow组件相当于是一个RenderingFilter,用来显示采集到的视频图像。其它各组件的详细说明可以参照DSPack安装目录下的帮助文档help.chm[2-3]。

程序由一个主窗体MainForm组成。MainForm窗体上放置FilterGraph组件,属性Name命名为FilterGraph,Mode属性为gmNormal;放置VideoWindow组件,

FilterGraph属性设置为FilterGraph;放置DSTrackBar组件,用于显示播放进度;其它放置0penDialog、MainMenu、四个Button组件,Caption分别设置为打开、播放、暂停、停止。

MainForm中主要代码如下:

Buttonl的0nclick事件添加如下代码: if(0penDialog -> Execute())

|FilterGraph -> Active = TRUE;//初始化各个Filter,并建立FilterGraph FilterGraph -> RenderFile(OpenDialog ->FileNalm);

//播放文件名给FilterGraph

}

Button2的OnClick事件添加如下代码:

FilterGraph -> Play(); //控制FilterGraph的播放 Button3、Button4的0nclick事件分别添加如下代码: FilterGraph -> Paus(); //播放暂停 FilterGraph -> Stop(); //播放停止 VideoWindw的OnDblClick双击事件添加代码:

VideoWindow -> FullScreen =! VideoWindow ->FullScreen;//全屏播放 MainForm的OnCloseQuery事件添加如下代码:

FiherGraph -> Active = FALsE;//释放各个Filter

本程序开发环境WindowsXP + DirectX9.O + DSPack2.34。本程序编译后成功运行。

3 测试与维护

3.1 创建和测试应用程序

为了确保本系统能够正常运行,需要在开发完成之后做一次较全面的测试。现将具体操作及过程举例说明如下:

创建和测试应用程序应是交替进行的,既要注意开发的效率也要注意它的稳定性。每编写一个模块,就要对这个模块进行测试,看它能否根据特定的要求工作。及早发现问题,及早解决,否则到最后再来测试的话,难度会大大增加。 3.2 程序改进

本软件没有考虑到删除播放列表中文件在ListBox中的索引号小于当前值的时候,删除之后不能把光标移动到当前播放文件。

本软件没有提供解码更新,这是本软件以后要着重改的地方。 3.3测试方法

一般来说,对程序测试有两种测试方法:如果已经知道了软件系统应具有的功能,可通过测试来对每个功能是否都能正常使用;如果知道程序的内部工作过程,可以通过测试来检测程序内部是否按照规格说明书的规定正常进行。前一种方法称为黑盒测试,后一种方法称为白盒子测试。黑盒测试又称为功能测试,白盒子测试又称为结构测试。[4]

本系统采用黑盒测试,以下以播放WMV文件为例子。 界面如下:

视频播放器设计

视频播放器设计1需求分析由于计算机的普及,极大地改变了人们的生活。随之带来了开发各种软件的需求。家用型计算机主要用于家用软件、学习软件、游戏软件和多媒体和多媒体软件,以及播放CD、VCD、DVD、MP3等多媒体信息。然而多媒体播放器的开发仍然不能满足人们的需求,多媒体文件格式多样,但却没有一款播放器能够满足所有格式的解码。人们渴望解码能力更
推荐度:
点击下载文档文档为doc格式
65z396gcmi8qp201384o
领取福利

微信扫码领取福利

微信扫码分享