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的应用细节。


二:个性定制,实现模块(Filter)

这样便理解了何为DirectShow以及我们可以使用它做什么。但如果提供的模块满足不了我们的需求呢?或者我们想要自己的硬件或者程序支持DirectShow的架构怎么办呢?很显然,我们可以写自己的Filter,并把它注册到系统的Filter模块中。于是,我们可以深入学习怎么样写Filter。

推荐书籍:《DirectShow开发指南》(陆其明著)




注:建议步骤一理解了DirectShow架构之后完成3个程序:

1. 文件的Playback程序;

2. Audio的采集程序;

3. Video的采集程序。

加深理解。顺便也关注下时间设置,内存分配等实现细节问题。对于步骤二 Filter 的编写则看个人能力了。

Direct Show学习方法相关推荐

  1. 基于深度学习方法的3D数据合成

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 3D 数据简介 人们普遍认为,从单一角度合成 3D 数据是人类视觉的基本功能.但这对计算机视觉算法来说 ...

  2. 复现经典:《统计学习方法》第 8 章 提升方法

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

  3. 论文解读:Combining Distant and Direct Supervision for Neural Relation Extraction

    论文解读:Combining Distant and Direct Supervision for Neural Relation Extraction 夏栀的博客--王嘉宁的个人网站 正式上线,欢迎 ...

  4. 论文略读1《Direct training for spiking neural networks:faster,larger,better》

    发布时间2019-07-17,AAAI 文章链接Direct Training for Spiking Neural Networks: Faster, Larger, Better | Procee ...

  5. 深入CC3200(1)—芯片简介及学习方法

    深入CC3200(1)-芯片简介及学习方法 admin 于 2015年09月15日 发表在  CC3200开发 写在前面: 在一个项目中使用了TI的CC3200芯片.总体而言,对于CC3200这款芯片 ...

  6. 指纹识别综述(10): 深度学习方法

    指纹识别综述系列 1.导论:2.指纹传感器:3.特征提取:4.匹配:5.分类与检索:6.现场指纹识别: 7.指纹合成: 8.唯一性: 9.指纹系统安全:10.深度学习方法:11.专利. 本文会不定期更 ...

  7. 深度学习结合SLAM的研究思路/成果整理之(一)使用深度学习方法替换SLAM中的模块

    整理了部分近两年深度学习结合SLAM的一些研究成果(参考知乎帖子https://www.zhihu.com/question/66006923 和泡泡机器人公众号,附上论文链接和已找到的源代码/数据集 ...

  8. 【统计学习方法】K-近邻法

    一.前言 K-近邻算法是一种基本的用于分类和回归的非参数统计方法,本篇blog将对分类问题中的k-近邻算法进行总结以及在文末给出了简单的Python实现.see more details in KNN ...

  9. 强化学习系列(八):Planning and learning with Tabular Methods(规划和离散学习方法)

    一.前言 本章是对前面七章的一个总结归纳,前七章中我们首先介绍马尔科夫决策过程(MDP),而后介绍了求解环境模型已知的MDP的方法(model-based)--动态规划方法(DP),启发式搜索也属于这 ...

最新文章

  1. 每个程序员必看:如何在40岁后继续做软件开发?
  2. Java——递归调用
  3. 论文浅尝 | TuckER:基于张量分解的知识图谱补全
  4. 天天用Redis,持久化方案你又知道哪些?
  5. 面试精讲之面试考点及大厂真题 - 分布式专栏 13项目中为什么要使用消息队列
  6. 自动完成下拉框 Select2 关键字搜索的实例(本地数据与异步获取)
  7. 排名前100的PHP函数及分析
  8. 硬盘读写测试工具_硬盘测速工具:Blackmagic Disk Speed Test Mac
  9. 驱动编程class_create说明
  10. php 控制海康摄像头,通过ISAPI http协议控制海康摄像头
  11. 软件项目的需求变更及对策
  12. rollout的意思
  13. 途志:新主播让自己的直播热起来有什么技巧?
  14. vscode离线下载对应版本的插件,避免版本兼容问题
  15. GuessingGame
  16. 思想的芦苇——把过程改进注入人文服务的思想以提升其价值
  17. 计算机系举办迎新晚会简报,大学生迎新晚会简报
  18. 教你如何电脑被盗还能找回
  19. arduinouno的地是相连的吗_稳定的阻燃材料效果好吗?
  20. 阿里P7Android社招面试的经历,内含福利

热门文章

  1. [AWS] dynamodb-local本地数据库安装以及dynamoose模块连接dynamodb-local
  2. python输出古诗词_python爬取古诗文网
  3. EventBus 最简易的使用方式
  4. Java知识点梳理思维导图
  5. 抖音创作规范_干货:抖音内容规范,运营抖音的十五条经验!
  6. debian live-buid
  7. Java 图片处理 给原有图片填充颜色满足需求大小 背景透明
  8. 设计分享|基于单片机的跑马灯
  9. 四: netlinklibnl 之 libnl库详解
  10. FPGA数字信号处理(十三)锁相环位同步技术的实现