DirectShow MSDN :https://msdn.microsoft.com/en-us/library/windows/desktop/dd375454(v=vs.85).aspx
译文:http://wenku.baidu.com/view/808c4d1ab7360b4c2e3f647a.html?re=view&pn=50
说实话 DirectShow 早已过时,但其设计思想却影响深远,目前的音视频处理很多设计都参考了DirectShow的设计。一个月前粗略了解过DirectShow,当时觉得晦涩难懂,原因很简单,因为学习时立意不明确。
今天重新看了下DShow,却感觉茅塞顿开:Direct Show是套架构,不要用学习软件应用的思想去学习。之前一边学一边想怎么编程应用,怎么具体实现,最后搞的云里雾里,建议初学者在刚学习时先别管怎么写出具体编程实现,忽略代码应用。
1.1 模块化思想
DirectShow的架构MSDN上面说的很清楚,其主要思想是模块化处理,每个功能被划分为一个模块,一层层处理,一层层传递。对此,需要弄清的概念有 Filter , FilterGraph , Pin 等。相信也很容易弄清这些。
1.2 从 GraphEdit (graphedt.exe)看DirectShow
微软提供了一个调试工具GraphEdit帮助开发者快速开发和调试。我们不妨从这个工具开始,了解DirectShow的所做所为。
GraphEdit 提供的操作有 :插入Filter ——>连接Filter ——>运行 Filter Graph。
操作相当简单。电脑里面的音视频处理模块不管是软件实现还是硬件实现都被封装为一个个 Filter 保存在dll库中,当需要使用的时候插入便可以,例如下面播放AVI文件的示例:
也就是很多功能已经实现,我们需要做的只是调用与设计自己的处理流程(FilterGraph),而这些使用GraphEdit很容易实现。
1.3 处理流程(FilterGraph)的编程实现
使用 GraphEdit方便快捷,但我们需要的终究是在代码中应用,于是MSDN的教程告诉了我们怎样将图形化的创建过程用代码实现,有文件playback ,视频音频的采集等,以及GraphFilter的应用细节。
这样便理解了何为DirectShow以及我们可以使用它做什么。但如果提供的模块满足不了我们的需求呢?或者我们想要自己的硬件或者程序支持DirectShow的架构怎么办呢?很显然,我们可以写自己的Filter,并把它注册到系统的Filter模块中。于是,我们可以深入学习怎么样写Filter。
推荐书籍:《DirectShow开发指南》(陆其明著)
注:建议步骤一理解了DirectShow架构之后完成3个程序:
1. 文件的Playback程序;
2. Audio的采集程序;
3. Video的采集程序。
加深理解。顺便也关注下时间设置,内存分配等实现细节问题。对于步骤二 Filter 的编写则看个人能力了。