视频播放器设计分析

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
“多媒体” 是一种新型的信息处理与传播技术。 有人认为它是信息及其传输媒 介方面的一场根本革命。人们对新技术的渴望和欢迎、新奇感和占有欲、宣传热情 和赞美态度,是发自内心的。特别是计算机多媒体技术的功能,令人大开眼界,惊 叹不已。 它在商业、 信息检索、 文化娱乐和教育等方面的应用效果明显, 前景广阔。
IBasicAudio 分别是图像和声音控制接口; IVideoWindow视频窗口控制接口;
IMediaSeeking 用于媒体数据流的定位,提供对播放的精确控制,如获得当前播放
位置等。
IGraphBuilder *mGraph ;
IMediaControl *mMediaControl ;
IMediaEVentEx *mEvent ;
Run() 、Stop() 来控制媒体的播放与停止。
在本实例中,第一步创建一个 Filter Graph Manager组件,由自定义的封装类
CDXGrap来h 完成, 它的实现文件是 CDXGraph.cpp和CDXGraph.h。第二三步要实现与
CDXGrap之h 问的事件交互。由主窗口 MainForm(MainUnit.cpp 和 MainUnit.h) 完成。
Graph的构建。
m_FilterGraph -> RenderFile(m_SourceFile.c_str())

// 设置视频窗口并设置消息通知窗口
m_FilteGraph -> SetDisplaywindow(Panell ->Handle)

m_FilteGraph -> SetNotifyWindow(this ->Handle)
址: http://www .progdigy.com/ 。DSPack的安装可以参考相关文档。
图2-4 组件面板上的 DSPack2.34
Dspack2.34 中有七个组件: FilterGraph 、VideoWindow、SampleGrabber、
Filter 、 ASFWriter 、DSTrackBar、DSVideoWindowEx。2 见图 5-1 。
HRESULT hr=CoCreateInstance(CLSID_FilteGraph ,NULL,
CLSCTX_INPROC_SER,VEIIDR_IGraphBuilder ,(void * *) &mGraph);
// 用 QueryInterface() 函数获取接口指针
hr = mGraph -> QueryInterface(IID_IMediaControl

// 开始播放
m_FilteGraph ->Run() ;
,,
// 关闭 COM组件库,释放资源
CoUtlinitialize() ;
2.3.2 基于 DirectShow 技术的第三方控件包 DSPack的媒体播放器
Dspack2.34 是C++ Builder 中用于做 DirectShow 开发的免费 VCL控件。下载地
MPEG Audio Decoder
Default DirectSound Device
Demo.mpg
MPEG-1 Stream Splitter
MPEG Video Decoder
Video Renderer
图 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 。
该程序部分主要代码如下:
// 定义基本接口。 IGraphBuilder 是最重要的接口,用于构造 Filter graph ;
IMediaControl 播放控制接口,控制播放、停止、暂停等; IMediaEventEx :应用程
序通过此接口获得播放过程中发生的事件,如播放完毕等。 IBasicVideo 、
视频播放器设计
1 需求分析
由于计算机的普及, 极大地改变了人们的生活。 随之带来了开发各种软件的需 求。家用型计算机主要用于家用软件、 学习软件、 游戏软件和多媒体和多媒体软件, 以及播放 CD、VCD、 DVD、MP3等多媒体信息。然而多媒体播放器的开发仍然不能满 足人们的需求, 多媒体文件格式多样, 但却没有一款播放器能够满足所有格式的解 码。人们渴望解码能力更强大,功能更完备的多媒体播放器。

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

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

(void * *) &mBasicVideo) ;
m_FilterGraph->RenderFile( “Demo.1 mpg”, NULL);
ห้องสมุดไป่ตู้
③调用 Filter Graph Manager(或某个 Filter) 上的各个接口方法进行控制。并
完成 Filter GramphManager与应用程序的事件交互。比如 IMediaControl 接口方法
hr = mGraph -> QueryInterface(IID_IBasicAudio

(void * *)&mBasicAudio) ;
hr = mGraph -> QueryInterface(IID_ Ⅳ ideowindow ,
(void * *)&mVideowindow) ;
hf = mGraph -> QueryInterface(IID_lMediaSeeking
另一种是用基于 DirectShow 技术的第三方控件包 DsPack。
2.3.1 直接用 Direct X SDK 中的 DirectShow 技术的媒体播放器。
用DirectShow 编写播放器,可以说主要包括三步:
①创建一个 Filter Graph Manager 组件。
②根据实际的应用,创建一条完整的链路。比如播放一个本地文件:
FilterGraph 组件基本对应于 DirectShow 中的 Filter Graph Manager ,Filter Graph的创建和控制由它完成。 Filter 组件可以充当 DirectShow 中的各种 Filter ,
VideoWindow组件相当于是一个 RenderingFilter ,用来显示采集到的视频图像。 其
它各组件的详细说明可以参照 DSPack安装目录下的帮助文档 help.chm[2-3] 。
程序由一个主窗体 MainForm组成。 MainForm窗体上放置 FilterGraph 组件,属
由多媒体播放器的开发现状看来, 并没有哪一款播放器能适应所有多媒体文件 的解读,随着视频、音频的迅猛发展,媒体文件的格式层出不穷,由过往美国在线 (AOL)公司的 Nullsoft 部门开发的 Winamp独占鳌头,到 Real Networks 公司的 Real Player 和微软公司的 WindowsMedia Player 风靡全球,再到如今播放器开发的百花 齐放的竞争时代,多媒体播放器的开发经历了许多风浪和变化,但是,仍然没有出 现全能的播放器,始终没有跨越编码格式的局限,随着多媒体技术的不断发展,人 们对多媒体软件的要求也不断高涨, 所以对多媒体软件的开发也成为当今计算机开 发的重要课题。目前的音频、视频格式繁多,研制格式覆盖面广的多媒体播放器前 景非常广泛。
2 系统总体设计
2.1DirectShow 概述 DirectShow 是一种通过自定义或内置的大量的 Filter( 过滤器 ) 来处理多媒体
数据的体系结构。这些 Filter 大致分三类: Source Filter( 源过滤器 ) 、Transform Filter( 转换过滤器 ) 、 Render Filter( 呈现过滤器 ) 。源过滤器主要负责获取数据, 数据源可以是文件、网络、计算机采集卡或数字摄像机里的,然后数据向下传输到 Transform Filter ,它主要负责数据的格式转换,然后继续向下传输到 Render Filter ,它主要负责数据的最终去向, 将数据送给显卡声卡进行播放或输出变成文 件存储起来,见图 2-1 。

(void * *)&mseeking) ;
// 连接输入输出 Pin 针脚,连接各个 Filter
hr=mGraph -> ConnectDirect(inOutputPin ,inInputPin ,inMediaTyp) ;
//IGraphBuilder 接口的方法 RenderFile 来连接给定的媒体文件,完成 Filter
IBasicVideo *mBasicVideo ;
IBasicAudio *mBasicAudio ;
IVideoWindow *mVideoWindow ;
IMediaSeeking *mSeeking ;
// 用 API函数初始化 COM组件库 CoInitialize(NULL) ;
// 创建 Filter graph 对象,得到 IGraphBuilder 接口的接口指针 mGrph
随着计算机、 家电、通信等技术的不断发展, 多媒体技术有着广泛的开发前景, 尤其是多媒体播放器的开发,开发格式覆盖面更广,兼容性更好,功能更完备的播 放器势在必行。本文主要采用 C++ Builder2009 作为开发工具,设计并实现一个多 媒体播放器。可播放 MP3, AVI,WM,V WM,A RM,RMV,B SWF等多种格式的多媒体文 件,并且能够控制播放,暂停, 停止,快进,后退,音量控制的调节,选择上一曲, 选择下一曲, 图像的显示, 文件的计时, 列表文件的添减操作等多种播放控制功能, 界面简明,操作简单。
应用程序
源过滤器 Source Filters
音视频采集设备
应用程序
命令
事件
DirectShow
过滤器图表管理器 Filters Graph Manager
转换过滤器 Transform
Filters
呈现过滤器 Render Filters
应用程序
各种软硬件解码器
声卡
显卡
图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.mp文g 件 ( 将文件拖动到 GraphEdit 窗口 ) 所自动构建的 Filter Graph 。见图 2-2 。
2.2 软件的总体架构
AVI 视频
RMVB 视频
视频指针 解码
主界面 用户
图 2-3 软件架构
2.3 详细设计与实现
下面在 C++ Builder 中,利用 DirectShow 技术设计媒体播放器,介绍了
DirectShow 程序的一般编写方法。以两种方法实现:一种是直接用 DirectX SDK ;
相关文档
最新文档