视频播放器设计分析.pdf

上传人:白大夫 文档编号:5442810 上传时间:2020-05-12 格式:PDF 页数:6 大小:364.05KB
返回 下载 相关 举报
视频播放器设计分析.pdf_第1页
第1页 / 共6页
视频播放器设计分析.pdf_第2页
第2页 / 共6页
视频播放器设计分析.pdf_第3页
第3页 / 共6页
视频播放器设计分析.pdf_第4页
第4页 / 共6页
视频播放器设计分析.pdf_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《视频播放器设计分析.pdf》由会员分享,可在线阅读,更多相关《视频播放器设计分析.pdf(6页珍藏版)》请在三一文库上搜索。

1、视频播放器设计 1 需求分析 由于计算机的普及, 极大地改变了人们的生活。 随之带来了开发各种软件的需 求。家用型计算机主要用于家用软件、 学习软件、游戏软件和多媒体和多媒体软件, 以及播放 CD 、VCD 、DVD 、MP3 等多媒体信息。然而多媒体播放器的开发仍然不能满 足人们的需求, 多媒体文件格式多样, 但却没有一款播放器能够满足所有格式的解 码。人们渴望解码能力更强大,功能更完备的多媒体播放器。 “多媒体”是一种新型的信息处理与传播技术。有人认为它是信息及其传输媒 介方面的一场根本革命。人们对新技术的渴望和欢迎、新奇感和占有欲、宣传热情 和赞美态度,是发自内心的。特别是计算机多媒体技

2、术的功能,令人大开眼界,惊 叹不已。它在商业、信息检索、文化娱乐和教育等方面的应用效果明显,前景广阔。 由多媒体播放器的开发现状看来, 并没有哪一款播放器能适应所有多媒体文件 的解读,随着视频、音频的迅猛发展,媒体文件的格式层出不穷,由过往美国在线 (AOL)公司的 Nullsoft部门开发的 Winamp 独占鳌头,到 Real Networks 公司的 Real Player 和微软公司的 Windows Media Player 风靡全球,再到如今播放器开发的百花 齐放的竞争时代,多媒体播放器的开发经历了许多风浪和变化,但是,仍然没有出 现全能的播放器,始终没有跨越编码格式的局限,随着多

3、媒体技术的不断发展,人 们对多媒体软件的要求也不断高涨, 所以对多媒体软件的开发也成为当今计算机开 发的重要课题。目前的音频、视频格式繁多,研制格式覆盖面广的多媒体播放器前 景非常广泛。 随着计算机、家电、通信等技术的不断发展, 多媒体技术有着广泛的开发前景, 尤其是多媒体播放器的开发,开发格式覆盖面更广,兼容性更好,功能更完备的播 放器势在必行。本文主要采用C+ Builder2009 作为开发工具,设计并实现一个多 媒体播放器。可播放 MP3 ,AVI,WMV,WMA,RM ,RMVB ,SWF 等多种格式的多媒体文 件,并且能够控制播放,暂停, 停止,快进,后退,音量控制的调节,选择上一

4、曲, 选择下一曲,图像的显示,文件的计时,列表文件的添减操作等多种播放控制功能, 界面简明,操作简单。 2 系统总体设计 2.1DirectShow 概述 DirectShow 是一种通过自定义或内置的大量的Filter(过滤器 ) 来处理多媒体 数据的体系结构。这些 Filter大致分三类: Source Filter(源过滤器 ) 、Transform Filter(转换过滤器 )、Render Filter(呈现过滤器 ) 。源过滤器主要负责获取数据, 数据源可以是文件、网络、计算机采集卡或数字摄像机里的,然后数据向下传输到 Transform Filter,它主要负责数据的格式转换,然

5、后继续向下传输到Render Filter,它主要负责数据的最终去向, 将数据送给显卡声卡进行播放或输出变成文 件存储起来,见图 2-1。 DirectShow 应用程序 源过滤器 Source Filters 转换过滤器 Transform Filters 呈现过滤器 Render Filters 过滤器图表管理器 Filters Graph Manager 应用程序应用程序 音视频采集设备各种软硬件解码器声卡显卡 事件命令 图2-1 DirectShow 开发应用程序原理图 过滤器 Filter是建立在 COM 技术基础上的,每个 Filter本身就是一个 COM 组件, 各个Filter

6、集合组成过滤器图 (FilterGraph),DirectShow 提供Filter Graph Manager 组件来管理整个过滤器图,比如Filter间的连接和数据流动。 Filter之间 通过Pin( 针脚) 连接。 更多感性认识 DirectShow ,可以DirectX SDK 中的自带的实用的程序 GraphEdit ,位于安装目录 BinDXUtilsgraphedt.exe。GraphEdit 是构造 Filter Graph Manager的可视化工具,在 GraphEdit 中可以很方便地设计出过滤器图,并验 证其可行性。 比如:播放一个典型的 Demo1.mpg 文件(将

7、文件拖动到 GraphEdit 窗口) 所自动构建的 Filter Graph。见图 2-2。 Demo.mpg MPEG Audio Decoder MPEG-1 Stream Splitter MPEG Video DecoderVideo Renderer Default DirectSound Device 图2-2 MPEG 文件播放的 Filter Graph 如图2所示,箭头方向即是数据的流动,可以看到:MPEG-1 Stream Splitter 属于Source Filters,负责接收源文件数据;MPEG Audio Decoder、MPEG Video Decoder属于

8、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 技术设计媒体播放器,介绍了

9、 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(或某个 Filte

10、r)上的各个接口方法进行控制。并 完成Filter Gramph Manager与应用程序的事件交互。比如IMediaControl 接口方法 Run()、Stop() 来控制媒体的播放与停止。 在本实例中,第一步创建一个Filter Graph Manager组件,由自定义的封装类 CDXGraph 来完成,它的实现文件是 CDXGraph.cpp 和CDXGraph.h 。第二三步要实现与 CDXGraph 之问的事件交互。由主窗口MainForm(MainUnit.cpp 和MainUnit.h) 完成。 该程序部分主要代码如下: / 定义基本接口。 IGraphBuilder 是最重要

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

12、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); / 用Quer

13、yInterface()函数获取接口指针 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 * *)&mBasicAu

14、dio); 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_

15、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 中用于做 Dire

16、ctShow 开发的免费 VCL 控件。下载地 址:http:/ 。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

17、, VideoWindow 组件相当于是一个 RenderingFilter,用来显示采集到的视频图像。 其 它各组件的详细说明可以参照DSPack 安装目录下的帮助文档 help.chm2-3。 程序由一个主窗体 MainForm 组成。 MainForm 窗体上放置 FilterGraph组件,属 性Name 命名为 FilterGraph,Mode 属性为gmNormal ;放置 VideoWindow 组件, FilterGraph属性设置为 FilterGraph;放置 DSTrackBar组件,用于显示播放进度; 其它放置 0penDialog 、MainMenu 、四个 Butt

18、on 组件, Caption 分别设置为打开、播 放、暂停、停止。 MainForm 中主要代码如下: Buttonl 的0nclick 事件添加如下代码: if(0penDialog - Execute() |FilterGraph - Active = TRUE;/ 初始化各个 Filter,并建立 FilterGraph FilterGraph - RenderFile(OpenDialog -FileNalm); / 播放文件名给 FilterGraph Button2 的OnClick 事件添加如下代码: FilterGraph - Play(); /控制FilterGraph的播放

19、 Button3 、Button4 的0nclick 事件分别添加如下代码: FilterGraph - Paus(); /播放暂停 FilterGraph - Stop(); /播放停止 VideoWindw的OnDblClick 双击事件添加代码: VideoWindow - FullScreen =! VideoWindow -FullScreen;/ 全屏播放 MainForm 的OnCloseQuery事件添加如下代码: FiherGraph - Active = FALsE;/ 释放各个 Filter 本程序开发环境 WindowsXP + DirectX9.O + DSPack2

20、.34 。本程序编译后成功 运行。 3 测试与维护 3.1 创建和测试应用程序 为了确保本系统能够正常运行,需要在开发完成之后做一次较全面的测试。现 将具体操作及过程举例说明如下: 创建和测试应用程序应是交替进行的,既要注意开发的效率也要注意它的稳定 性。每编写一个模块,就要对这个模块进行测试,看它能否根据特定的要求工作。 及早发现问题,及早解决,否则到最后再来测试的话,难度会大大增加。 3.2 程序改进 本软件没有考虑到删除播放列表中文件在ListBox 中的索引号小于当前值的时 候,删除之后不能把光标移动到当前播放文件。 本软件没有提供解码更新,这是本软件以后要着重改的地方。 3.3测试方

21、法 一般来说,对程序测试有两种测试方法:如果已经知道了软件系统应具有的功 能,可通过测试来对每个功能是否都能正常使用;如果知道程序的内部工作过程, 可以通过测试来检测程序内部是否按照规格说明书的规定正常进行。前一种方法称 为黑盒测试,后一种方法称为白盒子测试。黑盒测试又称为功能测试,白盒子测试 又称为结构测试。 4 本系统采用黑盒测试,以下以播放WMV文件为例子。 界面如下: 4 总结 基于两种不同方法实现媒体播放器程序时的代码比较,我们采用了C+ Bui- ldel2009 + Direct X SDK9.O + DSPack2.34编写该播放器。因为用 c+ Buildel2009 + D

22、irectx SDK9.0 编写时,代码行约为 400行,并需要深入的 DirectShow 和COM 组件 知识;而采用 C+ Buildel2009 + Direct X SDK9.O + DSPack2.34编写时,代码行 约为20行,仅需要少量的 DirectShow 和COM 知识。根据比较用第二种方法实现Dir- ectShow程序时,所需要知识少,开发程序快速高效。目前DirectShow 广泛应用于 开发多媒体程序。 在该软件的制作实现过程中, 给人最大的启发的一点是系统架构和设计模式非 常重要。代码的组织都是非常重要的,因为这关系到日后的维护以及扩展。编写代 码更加有条理,更

23、加符合软件工程的标准,这才是最重要的。 刚接触视频播放器编程的时候,我们认为其中最重要的是解码算法。但是头几 天编写程序的时候却发现程序越写越不容易维护,可见是我们走错了方向。 后来我 们向老师讨教,他告诉我们: “我们的先人早已为我们准备好了各种精良可用的现 成算法,我们所要做的就是直接“拿来主义”罢了;但是对于代码的组织(也就是 软件的架构)才是真正软件工业的核心部分, 因为软件事实上是直接和经济挂钩的, 因此我们必须在编写代码之前选择一种最为合适的方法来组织这些代码,否则我们 将会失去更多的时间和金钱。”。 经过并不长的时间里, 去实现软件编程的这个过程使我们慢慢进入到软件编程 的大堂,慢慢感受到实现一个软件是需要大量的资源。这个过程使我明白了许多, 也收获了许多。首先,我们得去熟悉开发环境,只有熟悉开发环境才能更好地、更 有效地实现软件开发;其次,我们还得去查找大量的资料,无论是图书馆里的关于 该软件实现的书籍, 或者是网上实现该软件的代码或者教程;最后,在面对编程时, 我们最好先弄清楚程序的流程,弄好程序里每个小模块, 然后把每个小模块组织成 完整的程序。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1