



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于DirectShow的流媒体解码和回放一、 前言流媒体的定义很广泛,大多数时候指的是把连续的影像和声音信息经过压缩处理后放上网站服务器,让用户一边下载一边观看、收听,而不需要等整个压缩文件下载到自己机器就可以观看的视频/音频传输、压缩技术。流媒体也指代由这种技术支持的某种特定文件格式:压缩流式文件,它通过网络传输,并通过个人电脑软件进行解码。MCI是微软为Windows最初提出的多媒体编程接口,随着多媒体技术的迅速发展,各种压缩算法在该领域的的应用,MCI技术越来越显的力不从心,最明显的是它不支持可变比特率的压缩算法,对于处理DVD等近年出现的多种新的媒体格式已显得无能为力,而使用微软提供的vfw之类的多媒体库又太麻烦。怎么办呢? 作为MCI的接班人,微软又适时推出了建立在DirectX(包含DirectDraw、DirectSound、Direct3D)之上的DirectShow技术,它是在DirectX之上的媒体层,支持来自本地或网络的各种视频、音频压缩格式的媒体文件的解码和回放,可以从设备上捕捉多媒体流,也可以处理各种压缩算法处理的流媒体。这些格式包括:MPEG的音频和视频标准、音频和视频交互标准(AVI)、WAVE、MIDI和高级流格式ASF。DirectShow对媒体数据处理采用流媒体(Multimedia Stream)的方式,在应用中使用该方式可以大大的减少编程的复杂程度,同时又可以自动协商从数据源到应用的转换,流接口提供了统一的、可以预测的数据存取的控制方法,这样应用程序在播放媒体数据时不需要考虑它最初的来源和格式。二、理解DirectXDirectX是一个用于多媒体应用程序和硬件增强的编程环境,它是微软为了将其Windows建设成适应各种多媒体的最好平台而开发设计的。DirectX目前已经成为微软自身SDK的一部分,而Windows 98/Windows 2000内则集成了DirectX,表明它已成为操作系统的一部分。DirectX技术是一种API(应用程序接口),每个DirectX部件都是用户可调用的API的总和,通过它应用程序可以直接访问计算机的硬件。这样,应用程序就可以利用硬件加速器(Hardware Accelerator)。如果硬件加速器不能使用,DirectX还可以仿真加速器以提供强大的多媒体环境。为了理解DirectX,我们可以把系统分为四层:硬件/网络层:放置有多媒体设备,包括图形加速器、声卡、输入设备以及网络通信设备等;DirectX基础层:为图像、声音和设备提供多媒体基本服务;DirectX媒体层:为动画制作、音频和视频等提供API功能;组件层:包括ActiveX控制和应用,它利用DirectX的API功能的优势为用户提供多媒体服务。DirectShow就是建立在DirectX媒体层之上的技术,其前身是ActiveMovie2.0。它以一组API函数或ActiveX控件出现,用途是让开发者能够在网络上传递高质量的音频和视频信号。值得一提的是,DirectShow为我们提供了一个开放式的开发环境,我们可以根据自己的需要定制组件。三、DirectShow技术结构DirectShow定义了如何利用标准组件来处理流媒体数据,这些组件称为过滤器。过滤器带有输入、输出针角(pin),或二者兼而有之。在DirectShow技术中处于最核心位置的就是作为过滤器的可插入标准组件,它是执行特定任务的COM对象。过滤器又可被细分为源过滤器(Source filter)、变换过滤器(Transform filter)、表现过滤器(Renderer filter)等。过滤器通过向文件读写、修改数据和显示数据到输出设备上来操作流媒体。为了完成整个任务,必须要将所有的过滤器Filter连接起来,这三种过滤器组成了过滤器图表结构,如图3.1所示:图3.1 过滤器图表结构(Filter Graph) 从图3.1中可以看出,过滤器图表是各种过滤器的集合,它是通过过滤器的输入输出针脚pin顺序连接而成的,这些过滤器的针脚通过协商来决定它们将支持何种形式多媒体。由于DirectShow支持可重构的过滤器图表结构,所以使用相同的软件组件可以播放多种类型的媒体。开发人员可以通过定义自己的过滤器来扩展DirectShow对媒体的支持功能。在过滤器图表结构中,源过滤器用来从数据源获取数据,并将数据传送到过滤器图表中,这里的数据源可以是摄像机、因特网、磁盘文件等;转换过滤器用来获取、处理和传送媒体数据,它包括分离视频和音频的分解变换过滤器(Splitter transform filter)、解压视频数据的视频转换过滤器(Video transform filter)、解压音频数据的音频转换过滤器(Audio transform filter);表现过滤器用来在硬件上表现媒体数据,如显卡和声卡,或者是任何可以接受媒体数据的地方,如磁盘文件。它包括用来显示图像的视频表现过滤器(Video renderer filter)、将音频数据送到声卡上去的音频表现过滤器(Audio renderer filter)。在过滤器图表中,为了完成特定的任务,必须将所有需要的过滤器连接起来,因此前级过滤器的输出必定成为下级过滤器的输入。一个过滤器至少有一个输入针(Input pin),并将特定的输出送到输出针(Output pin);图3.2显示了一个过滤器连接图:3.2 过滤器连接图 你的应用程序不需要对过滤器图表中的各个过滤器进行单独的处理,因为在更高的层次上,DirectShow提供的一个称为过滤图表管理器的部件(FGM)管理着这些过滤器的连接和流媒体数据在过滤器之间的流动,FGM提供了一套COM接口,应用程序可以通过它来访问过滤器图表、控制流媒体或者接收过滤器事件。如果需要,它可以自动的插入一个合适的解码器,并将转换过滤器的输出针脚连接到表现过滤器。应用程序可以通过与过滤图表管理器的通信来控制过滤器图表的活动。程序开发人员只需要调用API函数来实现对流媒体的控制,如run方法启动流媒体在过滤器图表(Filter graph)中的流动;pause方法暂停流媒体的播放;stop方法停止播放流媒体等。另外,利用Filter Graph Manager能够将事件信息传送到应用层这一特点,可以使应用程序可以响应事件处理,例如播放或搜索流媒体中的特定时间段的数据、流结束信息等。图3.3是一个MPEG解码播放的实例,可以看出Source filter将获取的多媒体数据通过Outpin送到MPEG分解转换过滤器,MPEG分解转换过滤器有一个输入针脚,两个输出针角分别将视频和音频解释码器进行解码,最后两路数据分别通过视频表示过滤器、音频表示过滤器送到显卡和声卡进行回放。图3.3 MPEG解码实例 四、DirectShow程序开发DirectShow建立在COM组件技术基础上,所以开发DirectShow程序必须要掌握COM组件技术。DirectShow与COM紧密相连,它所有的部件和功能都由COM接口来构造和实现,其开发方式相当灵活,没有固定的模式,通常随不同的需要使用不同的COM接口。但是其中几个重要的接口确实经常需要用到的:IGraphBuilder接口,这是最为重用的COM接口,用来创建Filter Graph Manager;IMediaControl接口,用来控制流媒体在滤波器图表(Filter Graph)中的流动,例如流媒体的启动和停止;IMediaEvent接口,该接口在Filter Graph发生一些事件时用来创建事件的标志信息并传送给应用程序。一个典型的DirectShow应用程序的开发通常遵循的步骤为:1)通过API函数CoCreateInstance()创建一个Filter Graph Manager 实例;2)通过调用QueryInterface ( )函数来获取Filter Graph 和IMediaEvent组件的指针;3)对Filter Graph进行控制和对事件作出响应。下面举一个简单的例子来说明如何利用DirectShow技术对多媒体流进行解码回放的。首先生成一个名为MediaPlay的单文档应用程序,定义一个名字为MediaPlay的函数,该函数的具体实现代码为:void PlayMovie(LPTSTR lpszMovie) IMediaControl *pMC = NULL; IGraphBuilder *pGB = NULL;IMediaEventEx *pME = NULL;long evCode; / something to hold a returned event codehr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC,IID_IMediaControl, (void *)&pMC);hr = pMC-QueryInterface(IID_IGraphBuilder, (void *)&pGB);hr = pMC-QueryInterface(IID_IMediaEventEx, (void *)&pME);hr = pGB-RenderFile(lpszMovie, NULL);hr = pMC-Run();hr = pME-WaitForCompletion(INFINITE, &evCode);if(pMC)pMC-Release();if(pGB)pGB-Release();if(pME)pME-Release();上述代码中,CoCreateInstance()函数创建了一个过滤器图表(Filter Graph)对象,并返回一个媒体控制(ImediaControl)接口,这个接口通过过滤器来实现播放、暂停、停止等媒体放映功能,但是这时候图表对象并不包含具体的过滤器,因为此时DirectX并不清楚需要播放何种类型的媒体;接下来创建一个图表构建接口,该接口可以实现创建过滤器图表、向图表对象添加、删除各种过滤器、列举当前过滤器图表中所有的过滤器、连接图表对象中的各个过滤器等功能;本例中使用了IGraphBuilder 接口的RenderFile()函数,告诉
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生物质成型燃料的热解与气化技术考核试卷
- 染料在丝印过程中的绿色化学应用研究考核试卷
- 淀粉在植物病害生物防治中的应用考核试卷
- 气藏地质建模与储量评估考核试卷
- 果品国际贸易中的关税与配额考核试卷
- 燃气具燃烧稳定性与排放控制考核试卷
- 2025年酵母溶液项目可行性研究报告
- 2025年轻型龟甲网项目可行性研究报告
- 2025年豪华转页扇项目可行性研究报告
- 2025年蚀刻铜板画项目可行性研究报告
- GB 31825-2024制浆造纸单位产品能源消耗限额
- Q-SY 05601-2019 油气管道投产前检查规范
- 《金属非金属地下矿山通信联络系统建设规范》
- 浅析船体分段焊接检验
- 医保基金监管培训课件
- 2024高考复习必背英语词汇3500单词
- 3课 《赤壁赋》公开课一等奖创新教学设计【中职专用】高一语文高教版2023-2024-基础模块下册
- 第5章 层次分析法课件
- 情感纠纷案件调解协议书
- 咯血护理疑难病例讨论
- 《车间主任培训》课件
评论
0/150
提交评论