- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
视频播放与图像捕捉
视频播放与图像捕捉
1、Direct Show技术
DirectX是美国微软公司为软件开发者提供的多媒体开发平台,它包括DirectShow, DirectDraw,Direct3D和DirectMusic等。借助于DirectX所提供的应用程序编程接口(API),软件开发者不用编写与硬件相关的代码,就可以开发出高性能的多媒体应用程序。
DirectShow是为播放各种类型的视频数据、音频数据或其他多媒体数据而设计的。DirectShow支持MPEG(包括MP3 ),AVI, MOV, WAV, DVD等格式。软件开发者也可以拓展DirectShow,使其支持自定义的格式。借助于DirectShow,我们可以很容易地实现多种格式的多媒体数据的回放、传输和捕获。DirectShow取代了早期的Windows多媒体服务、媒体控制接口(MCI),SDK等。
1.1Direct Show系统
如图3.1DirectShow系统DirectShow系统位于应用层中。它使用一种叫Filter Graph的模型来管理整个数据流的处理过程;参与数据处理的各个功能模块叫做Filter;各个Filter在Filter Graph中按一定的顺序连接成一条“流水线”协同工作。按照功能来分,Filter大致分为三类:Source Filters、Transform Filters和Rendering Filters。Source Filters主要负责取得数据,数据源可以是文件、因特网、或者计算机里的采集卡(WDM驱动或VFW驱动的)、数字摄像机等,然后将数据往下传输;Transform Fitlers主要负责数据的格式转换比如数据流分离/合成、解码/编码等,以及继续往下传输;Rendering Filte主要负责数据的最终去向——将数据送给显卡、声卡进行多媒体的演示,或者输出到文件进行存储。DirectShow提供了大量的Filter,用以支撑最基本的应用下图即是一条典型的AVI文件回放的Filter Graph链路:本地AVI文件的回放链路如图所示,箭头方向即是数据的流向,对照图1.1, File Source(Async)即属于Source Filters,它用于管理硬盘上的指定播放的文件,并根据AVI Splitter的要求提供数据;AVI Splitter和AVI Decompressor即属于Transform Filters,其中AVI Splitter负责向File Source (Async)索取数据,并将取得的数据包含的音视频分离,然后分别从各自的输出Pin输出,AVI Decompressor负责视频的解码;Video Renderer和Default DirectSound Device即属于Rendering Filters,其中Video Renderer负责向视频窗口输出图像,Default DirectSound Device负责同步播放声音IGraphBuilder *m_pIGBuilder;
IMediaControl *m_pIMControl;
IMediaEventEx *m_pIMEventEx;
IVideoWindow *m_pIVWindow;
IMediaSeeking *m_pIMSeeking;
IBasicAudio *m_pIBAudio;
IBasicVideo *m_pIBVideo;
CWnd *m_pwndParentWindow; //指向父窗口的指针
bool m_bIsAudioIn; //是否包含音频信息
bool m_bIsVideoIn; //是否包含视频信息
利用DirectShow播放多媒体文件的具体过程主要包含如下的几个步骤: (这里仅给出主要方法的实现细节)
建立过滤器流水线组件的实例;
读取文件并准备播放(通过IGraphBuilder∷RenderFile)
获得基本接口;
获得媒体类型并配置视频窗口(如果包含视频信息)。
运行操作过滤器流水线。
其具体的实现细节如下:
/*创建过滤器流水线组件的实例对象*/
HRESULT hr=CoCreateInstance(CLSID_FilterGraph,NULL,
CLSCTX_NPROC_ERVER, IID_GraphBuilder,(void **)m_pIGBuilder);
/*读取文件*/
WCHAR fn[MAX PATH];
//将文件名转换为Unicode格式
MultiByteToWideChar (CP_ACP,0,pfname,-l ,fn, MAX_ PATH);
hr=m_pIGBuilder-RenderFile(fn, NULL);
文档评论(0)