你现在位置:首页>技术论文>软件知识>正文
流媒体卡SDK开发卡入门DirectShow开发
日期:2011-8-24 12:37:35 点击:
来源:本站整理
作者:
点击【】放大字体.
摘要:本篇文档概括性的介绍了DirectShow的主要组成部分,以及一些Directshow的基本概念。熟悉这些基本的知识对于Directshow的应用开发或者过滤器的开发者都会有所帮助。
WWW.PLCJS.COM——可编程控制器技术门户

——可——编——程——控-制-器-技——术——门——户

  DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。那么,DirectShow能够做些什么呢?且看,DirectShow为多媒体流的捕捉和回放提供了强有力的支持。运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow还集成了DirectX其它部分(比如DirectDraw、DirectSound)的技术,直接支持DVD的播放,视频的非线性编辑(非编非编采集卡高清非编卡非编系统),以及与数字摄像机的数据交换。更值得一提的是,DirectShow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己的组件。
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

WW.W_PLC※JS_C,OM-PL,C-技.术_网

  应用程序与DirectShow组件以及DirectShow所支持的软硬件之间的关系如图1所示。
plcjs.技.术_网

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

WWW.PLCJS.COM——可编程控制器技术门户

图1 DirectShow系统框图
WWW_PL※CJS_COM-PLC-技.术_网

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

  1、DirectShow的 Filter
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

WWW_P※LCJS_CO※M-PLC-技-.术_网

  Directshow是基于模块化,每个功能模块都采取COM组件方式,称为Filter。Directshow提供了一系列的标准的模块可用于应用开发,开发者也可以开发自己的功能Filter来扩展Directshow的应用。下面我们用一个例子来说明如何采取Filter来播放一个AVI的视频文件。
WWW_PLCJS@_COM%-PLC-技.术_网

plcjs.技.术_网

  1) 首先从一个文件中读取AVI数据,形成字节流。(这个工作由源Filter完成)
W1WW_P4LCJS_COM-PLC-技.术_网

WWW_PLCJS_COM-PLC-技.术_网

  2) 检查AVI数据流的头格式,然后通过AVI分割Filter将视频流和音频流分开。
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

  3) 解码视频流,根据压缩格式的不同,选取不同的decoder filters 。
P.L.C.技.术.网——可编程控制器技术门户

WWW_PLCJS_COM-PLC-技.术_网

  4) 通过Renderer Filter重画视频图像流媒体视频捕获卡
WWW_P※LCJS_CO※M-PLC-技-.术_网

WW.W_PLC※JS_C,OM-PL,C-技.术_网

  5) 音频流送到声卡进行播放,一般采用缺省的 DirectSound DeviceFilter。流程见下图。
plcjs.技.术_网

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

WW.W_PLCJS_COM-PLC-技.术_网

图2 音频流播放Graph图
WWW.PLCJS.COM——可编程控制器技术门户

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

  从上面的图表看,每一个filter都一个其他的一个或者两个filter相连接。两个Filter相连接的连接点也是com对象,我们称为Pin。Filter通过pin将数据从一个filter传递到另一个filter中,从而可以使数据在由filter组成的链表中流动。图中的箭头表示filter链表中的数据流的方向。在Directshow中,像上面的这样一个filter 链表我们称为filter Graph。
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

WWW_PLCJS@_COM%-PLC-技.术_网

  Filter具有三个状态,运行,停止,暂停。当一个filter运行时,它就处理媒体数据流,当停止时,filter就不在处理数据,暂停状态常用来给运行状态之前cure data。Data Flow in the Filter Graph一章详细描述了这些概念,可以参考。
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

WWW_P※LCJS_COM-PLC-)技.术_网

  除了一些特别的例外, Filter graph中所有的filter的状态的改变都是统一的,也就说,filte graph中的所有的filter 的状态改变是一致协调的。也就是说,我们也可以用filter graph也可以有运行,停止,暂停三种状态。
WWW_P※LCJS_CO※M-PLC-技-.术_网

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

  Filter 一般分为下面几种类型。
——可——编——程——控-制-器-技——术——门——户

WWW_PLCJS@_COM%-PLC-技.术_网

  (1)源过滤器(sourcefilter):源过滤器引入数据到过滤器图表中,数据来源可以是文件、网络、照相机等。不同的源过滤器处理不同类型的数据源。支持DirectShow的流媒体采集卡
WWW_P※LCJS_COM-PLC-)技.术_网

WWW_PLCJS_COM-PLC-技.术_网

  (2)变换过滤器(transform filter):变换过滤器的工作是获取输入流,处理数据,并生成输出流。变换过滤器对数据的处理包括编解码、格式转换、压缩解压缩等。
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

  (3)提交过滤器(renderer filter):提交过滤器在过滤器图表里处于最后一级,它们接收数据并把数据提交给外设。
WWcW_PLCJS_COM-PLC-技.术_网

WWW_PLCJS_COM-PLC-技.术_网

  (4)分割过滤器(splitter filter):分割过滤器把输入流分割成多个输出。例如,AVI分割过滤器把一个AVI格式的字节流分割成视频流和音频流。
plcjs.技.术_网

W1WW_P4LCJS_COM-PLC-技.术_网

  (5)混合过滤器(mux filter):混合过滤器把多个输入组合成一个单独的数据流。例如,AVI混合过滤器把视频流和音频流合成一个AVI格式的字节流。
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

WWW_PLCJS_COM-PLC-技.术_网

  过滤器的这些分类并不是绝对的,例如一个ASF读过滤器(ASF Reader filter)既是一个源过滤器又是一个分割过滤器。
WWW_PLCJS@_COM%-PLC-技.术_网

——可——编——程——控-制-器-技——术——门——户

  2、关于Filter Graph Manager
WW.W_PLC※JS_C,OM-PL,C-技.术_网

WWW_PLC※JS_COM-PmLC-技.术_网

  Filter Graph Manager也是一个com对象,用来控制Filter graph中的所有的filter,主要有以下的功能:
WW.W_PLC※JS_C,OM-PL,C-技.术_网

WWW_PL※CJS_COM-PLC-技.术_网

  1) 用来协调filter之间的状态改变,从而使graph 中的所有的filter的状态的改变应该一致。
plcjs.技.术_网

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  2) 建立一个参考时钟。
plcjs.技.术_网

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

  3) 将filter 的消息通知返回给应用程序
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  4) 提供用来建立 filter graph的方法。
WW.W_PLCJS_COM-PLC-技.术_网

WW.W_PLC※JS_C,OM-PL,C-技.术_网

  这里只是简单的描述一下,详细地可以参考文档。
WWW_PLC※JS_COM-PmLC-技.术_网

WWW.PLCJS.COM——可编程控制器技术门户

  状态改变,Graph中的filter的状态改变应该一致,因此,应用程序并将状态改变的命令直接发给filter,而是将相应的状态改变的命令发送给Filter graph Manager,由manager将命令分发给graph中每一个filter。Seeking也是同样的方式工作,首先由应用程序将seek命令发送到filter graph 管理器,然后由其分发给每个filter。
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

  参考时钟,graph中的filter都采用的同一个时钟,称为参考时钟(reference clock),参考时钟可以确保所有的数据流同步,视频桢或者音频桢应该被提交的时间称为presentation time.presentation time 是相对于参考时钟来确定的。Filter graph Manager应该选择一个参考时钟,可以选择声卡上的时钟,也可以选择系统时钟。
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

W1WW_P4LCJS_COM-PLC-技.术_网

  Graph事件, Graph 管理器采用事件机制将graph中发生的事件通知给应用程序,这个机制类似于windows的消息循环机制。专业音视频流媒体卡
WWW.PLCJS.COM——可编程控制器技术门户

WWW.PLCJS.COM——可编程控制器技术门户

  Graph构建的方法,graph管理器给应用程序提供了将filter添加进graph的方法,连接filter的方法,断开filter连接的方法。
WWW_P※LCJS_COM-PLC-)技.术_网

——可——编——程——控-制-器-技——术——门——户

  但是,graph 管理器没有提供如何将数据从一个filter发送到另一个filter的方法,这个工作是由filter在内部通过pin来独立完成的,
WW.W_PLCJS_COM-PLC-技.术_网

  3、媒体类型

W1WW_P4LCJS_COM-PLC-技.术_网

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

  因为Directshow是基于com组件的,就需要有一种方式来描述filter graph每一个点的数据格式,例如,我们还以播放AVI文件为例,数据以RIFF块的形式进入graph中,然后被分割成视频和音频流,视频流有一系列的压缩的视频桢组成,解压后,视频流由一系列的无压缩的位图组成,音频流也要走同样的步骤。

本新闻共4页,当前在第11 2  3  4  
plcjs.技.术_网

评论内容
载入中...
载入中...
P
L
C



|










|


P
L
C









·最新招聘信息
·最新求职信息
·推荐产品
·推荐厂商
·栏目热门排行
·站内热门排行