视频播放器设计分析

玛丽莲梦兔
964次浏览
2021年02月06日 19:42
最佳经验
本文由作者推荐

春季如何护肤-

2021年2月6日发(作者:什么的城堡)



视频播放器设计



1


需求分析



由于计算机的普及,


极大地改变了人们的生活。


随之带来了开发各种软件的需



求。


家用型计算机主要用于家用软件、

< p>
学习软件、


游戏软件和多媒体和多媒体软件,


以及 播放


CD



VCD


DVD



MP3


等多媒体信息。然而多媒体播放器的开发仍然不能满


足人们的需求,

< p>
多媒体文件格式多样,


但却没有一款播放器能够满足所有格式的解


码。人们渴望解码能力更强大,功能更完备的多媒体播放器。



“多媒体”


是一种新型的信息处理与传播技术。


有人认为它是信息及其传输媒


介方面的一场根本革命。人们对新技术的渴望和欢迎、新奇 感和占有欲、宣传热情


和赞美态度,是发自内心的。特别是计算机多媒体技术的功能,令 人大开眼界,惊


叹不已。


它在商业、


信 息检索、


文化娱乐和教育等方面的应用效果明显,


前景广阔。< /p>



由多媒体播放器的开发现状看来,


并没 有哪一款播放器能适应所有多媒体文件


的解读,随着视频、音频的迅猛发展,媒体文件的 格式层出不穷,由过往美国在线


(AOL)


公司的


Nullsoft


部门开发的


Winamp


独占鳌头,到


Real Networks


公司的


Real


P layer


和微软公司的


Windows


Media


Player


风靡全球, 再到如今播放器开发的百花


齐放的竞争时代,多媒体播放器的开发经历了许多风浪和变化 ,但是,仍然没有出


现全能的播放器,始终没有跨越编码格式的局限,随着多媒体技术的 不断发展,人


们对多媒体软件的要求也不断高涨,


所以对多媒体 软件的开发也成为当今计算机开


发的重要课题。目前的音频、视频格式繁多,研制格式覆 盖面广的多媒体播放器前


景非常广泛。




随着计算机、


家电、


通信等技术的不断发展,


多媒体技术有着广泛的开发前景,


尤其是多媒体播放器的开发,开发格式覆盖面更广,兼容性更好,功能更完备的播

放器势在必行。本文主要采用


C++ Builder2009

作为开发工具,设计并实现一个多


媒体播放器。可播放


MP 3



AVI



WMV



WMA


RM



RMVB



SWF


等多种格式的多媒体文


件,

并且能够控制播放,暂停,


停止,快进,后退,音量控制的调节,选择上一曲,


选择下一曲,


图像的显示,


文件的计时,< /p>


列表文件的添减操作等多种播放控制功能,


界面简明,操作简单。



2


系统总体设计



2.1DirectShow


概述


< /p>


DirectShow


是一种通过自定义或内置的大量的


Filter(


过滤器


)


来处理多媒体


数据的体系结构。这些


Filter

< p>
大致分三类:


Source


Filter(


源过滤器


)



Tr ansform


Filter(


转换过滤器

< br>)



Render


Filte r(


呈现过滤器


)


。源过滤器主要负责 获取数据,


数据源可以是文件、网络、计算机采集卡或数字摄像机里的,然后数据向下传 输到


Transform Filter


,它主要负责数据的格 式转换,然后继续向下传输到


Render


Filter



它主要负责数据的最终去向,


将数据送给 显卡声卡进行播放或输出变成文


件存储起来,见图


2-1





< p>
应用程序


命令


DirectShow


过滤器图表管理器


Filters Graph Manager

< p>
应用程序


源过滤器


Source

< br>Filters


转换过滤器


Transform


Filters


呈现过滤器


Render


Filters


应用程序


事件


音视频采集设备


各种软硬件解码器


声卡


显卡




2-1 DirectShow


开发应用程序原理图


< br>过滤器


Filter


是建立在


C OM


技术基础上的,每个


Filter


本身就是一个


COM


组件,


各个


Filter


集合组成过滤器图


(Filte r



Graph)


< br>DirectShow


提供


Filter Graph


Manager


组件来管理整个过滤器图,比如


Filter


间的连接和数据流动。


Filter


之间


通过


Pin(


针脚


)


连接。



更多感性认识


DirectShow


,可以

< br>DirectX SDK


中的自带的实用的程序


Grap hEdit


,位于安装目录




GraphEdit


是构造


Filter


Graph


Manager


的可视化 工具,在


GraphEdit


中可以很方便地设计出过滤器图, 并验


证其可行性。


比如:


播放一个典型 的



文件


(


将文 件拖动到


GraphEdit


窗口


)< /p>


所自动构建的


Filter Graph


。见图


2-2




MPEG Audio Decoder



MPEG-1 Stream Splitter


MPEG Video Decoder


Video Renderer


Default 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


,分别负责对视频显示和音频播放。


执行菜单


G raph->Play


,可以看到播放的影音文件。在


Grap h->Insert


Filters


可以

看到


DirectShow


提供的大量的支持基本应用的< /p>


Filter




2.2


软件的总体架构



AVI


视频


RMVB


视频< /p>



视频指针


解码


主界面


用户




2-3


软件架构





2.3


详细设计与实现



下面在


C++ Builder


中,利 用


DirectShow


技术设计媒体播放器,介绍了


DirectShow


程序的一般编写方法。以两种方法实现:一种是直 接用


DirectX SDK



另一种 是用基于


DirectShow


技术的第三方控件包

< p>
DsPack




2.3.1


直接用


Direct X SDK


中的


DirectShow


技术 的媒体播放器。




DirectSh ow


编写播放器,可以说主要包括三步:



①创建一个


Filter Graph Manager


组件。



②根据实际的 应用,创建一条完整的链路。比如播放一个本地文件:


m_FilterGraph-> RenderFile(



Demo1



mpg


”,


NULL)




③调用


Filter


Graph


Manager(


或某个


Filter)


上的各个接口方法进行控制。并


完成


Filter


Gramph

< br>Manager


与应用程序的事件交互。比如


IMedi aControl


接口方法


Run()



Stop()


来控制媒体的播放与停止。


在本实例中,第一步创建一个


Filter


Graph


Manager


组件,由 自定义的封装类


CDXGraph


来完成,

它的实现文件是




CDXGrap h.h



第二三步要实现与


CDXGr aph


之问的事件交互。由主窗口


MainForm(



MainUnit.h)


完成。



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


//


定义基本接口。


IGraphBuilder


是最重要的接口,用于构造


Filter graph

< br>;


IMediaControl


播放控制接口,控制播放 、停止、暂停等;


IMediaEventEx


:应用程


序通过此接口获得播放过程中发生的事件,如播放完毕等。


IBasi cVideo



IBasicAudio


分别是图像和声音控制接口;


IVideoWindow


视频 窗口控制接口;


IMediaSeeking


用于媒体数据流的 定位,提供对播放的精确控制,如获得当前播放


位置等。



IGraphBuilder *mGraph




IMediaControl *mMediaControl




IMediaEVentEx *mEvent




IBasicVideo *mBasicVideo




IBasicAudio *mBasicAudio




IVideoWindow *mVideoWindow




IMediaSeeking *mSeeking




//



API


函数初始化


C OM


组件库


CoInitialize(NULL)

< p>



//


创建


Filter graph< /p>


对象,得到


IGraphBuilder


接口的接口指针


mGrph


HRESULT hr=CoCr eateInstance(CLSID_FilteGraph


NULL



CLSCTX_INPROC_SERVER< /p>



IID_IGraphBuilder



(void * *)



mGrap h)




//



QueryInterface()


函数获取接口指针



hr = mGraph -> QueryInterface( IID_IMediaControl




(void * *)



mMedia Control)




hr = mGraph -> QueryInterface(IID_IMediaEventEx

< br>,



(void * *)&mEvent)




hr = mGraph -> QueryInterface(IID_IBasicVideo




(void * *)



mBasicVideo)




hr = mGraph -> QueryInterface(IID_IBasi cAudio




(void * *)&mBasicAudio)




hr = mGraph -> QueryInterface(IID_

< p>


ideowindow




春季如何护肤-


春季如何护肤-


春季如何护肤-


春季如何护肤-


春季如何护肤-


春季如何护肤-


春季如何护肤-


春季如何护肤-