回 帖 发 新 帖 刷新版面

主题:[转帖]Directshow  开发笔记(翻译)

Directshow  开发笔记(翻译)
个人感觉开发自己的Filter还是要对dshow的基类要熟悉一些。所以才想起了要翻译这些东西,希望在9月底前完成这些东西。我不想它的句子有多么流畅,语法的错误有多少,我只希望能看明白就可以了
                                     智慧的鱼(LeeQiang)
                                         2004.8.20
 由于某些原因,SDK中的有些章节我没有翻译,如果哪位兄弟补充以后,可以将补充后的文档发给我,我也学习学习,互相学习的过程就是提高的过程。
1 About Directshow基础
1.1 设置dshow的开发环境
如果你用VC开发环境,一定要在Setting里设置下面的东西
包含头文件    Dshow.h   所有的dshow应用必须包含

[center]Directshow  开发笔记(翻译)[/center]
[center]Directshow  开发笔记(翻译)[/center]

回复列表 (共14个回复)

沙发

包含动态库    Strmiids.lib  导出所有接口的CLSID 和接口IID定义。必须包含
              Quartz.lib  

板凳

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

3 楼

1.4 Filter Graph及其组成
这篇文档中我想给讲述Directshow的主要组成部分,一个概括性的入门文章,对于应用开发或者directshow的开发者都有所帮助。
1 DirectShow的 Filter
Directshow是基于模块化,每个功能模块都采取COM组件方式,称为Filter。Directshow提供了一系列的标准的模块可用于应用开发,开发者也可以开发自己的功能Filter来扩展Directshow的应用。下面我们用一个例子来说明如何采取Filter来播放一个AVI的视频文件。
 从一个文件读取数据,形成字节流。(这个工作由源Filter完成)
 检查AVI数据流的头格式,然后通过AVI分割Filter将视频流和音频流分开。
 解码视频流,根据压缩格式的不同,选取不同的decoder filters 。
 重画视频图像,通过Renderer Filter。
 将音频流送到声卡进行播放,一般采用缺省的 DirectSound Device Filter。流程见下图。

4 楼

从上面的图表看,每一个filter都一个其他的一个或者两个filter相连接,连接点也是com对象,我们称为Pin。Filter通过pin将数据从一个filter传递到另一个filter中,从而可以使数据的filter的链表中流动。图中的箭头表示filter链表中的数据流的方向。在Directshow中,一个filter 链表我们称为filter Graph。
   Filter具有三个状态,运行,停止,暂停。当一个filter运行时,它就处理媒体数据流,当停止时,filter就不在处理数据,暂停状态常用来给运行状态之前cure data。Data Flow in the Filter Graph一章详细描述了这些概念,可以参考。
  除非特别的例外,所有Filter graph中的filter的状态的改变都是统一的,也就说,filte graph中的所有的filter 的状态改变是一致协调的。也就是说,我们也可以用filter graph也可以有运行,停止,暂停三种状态。
Filter 一般分为下面几种类型。
(1)源过滤器(source filter):源过滤器引入数据到过滤器图表中,数据来源可以是文件、网络、照相机等。不同的源过滤器处理不同类型的数据源。
  (2)变换过滤器(transform filter):变换过滤器的工作是获取输入流,处理数据,并生成输出流。变换过滤器对数据的处理包括编解码、格式转换、压缩解压缩等。
  (3)提交过滤器(renderer filter):提交过滤器在过滤器图表里处于最后一级,它们接收数据并把数据提交给外设。
  (4)分割过滤器(splitter filter):分割过滤器把输入流分割成多个输出。例如,AVI分割过滤器把一个AVI格式的字节流分割成视频流和音频流。
  (5)混合过滤器(mux filter):混合过滤器把多个输入组合成一个单独的数据流。例如,AVI混合过滤器把视频流和音频流合成一个AVI格式的字节流。
过滤器的这些分类并不是绝对的,例如一个ASF读过滤器(ASF Reader filter)既是一个源过滤器又是一个分割过滤器。

5 楼

16715929

6 楼

怎么没人关注呀

7 楼

谢谢!
楼主辛苦了.

8 楼

再热一下吧,要不太冷了

9 楼

(1)
一段视频文件以前以特效显示5秒,接下来这文件要正常播放,播放到文件的最后5秒再以特效显示结束.在这个过程中.中间那段如何处理呢?

 CComQIPtr<IAMTimelineTransable> pTransable(pComp2);
        hr = pTransable->TransAdd(m_pTrans);  
        hr = m_pTrans->SetStartStop(0, m_rtTransLength); 
从0到m_rtTransLength段时间视频文件以特效显示,接下来这个文件的内容要正常播放,怎样处理呢?
(2)
如果把文字叠加到视频中.除了VMR'S外,还有其它方法吗?
把视频的显示特效(如百叶窗显示)与文字叠加显示结合,如何处理呢?要用到哪些东西?

10 楼

请楼主指点上面的问题(directshow),辛苦您了.

我来回复

您尚未登录,请登录后再回复。点此登录或注册