Introduction to DirectShow Application Programming

翻译 2016年05月31日 23:29:39

翻译自:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd390352(v=vs.85).aspx

这篇文章介绍了在DirectShow 中使用的基本术语和概念。

Filters and Filter Graphs

DirectShow由一些被称为filter的软件组件构成。filter是一种能够支持对多媒体流做一些处理的软件组件。例如,DirectShow filters可以做:

  • 读取文件
  • 从视频采集设备获取视频
  • 解码各种格式的流,例如MPEG-1视频
  • 传递数据到图像设备或声卡

Filters接收数据并产生相应的输出。例如,如果filter解码MPEG-1视频,那么输入就是MPEG编码的流,输出是一系列解压后的视频帧。

在DirectShow中, 通过连接一串filters,一个应用能完成各种任务。这样,一个filter的输出就成了另一个filter的输入。一组被连接好的filters称为一个filter graph. 例如,下图表示一个用于播放AVI文件的filter graph.
这里写图片描述

File Source filter 从硬盘中读取AVI文件,AVI Splitter filter解析文件并生成两个流,一个被压缩的视频流和一个音频流。AVI Decompressor filter 解码视频帧。Video Render filter用DirectDraw或GDI把帧显示。默认的 DirectSound 设备用DirectSound播放音频流.

应用并不需要管理所有的数据流。相反的,这些filters被一个叫做 Filter Graph Manager的东西控制。应用只需要调用像“Run”或 “Stop”这样的上层API。如果你需要实现更多的流操作, 你可以通过COM接口使用filters。Filter Graph Manager也为应用传递事件通知。

Filter Graph Manager也为另一个目的服务:它通过将filters连在一起,为应用提供了构建图表的方法,

Writing a DirectShow Application

总的来说,任何DirectShow应用都必须实现三个任务。如下图所示:
这里写图片描述

  1. 应用创建一个Filter Graph Manager的实例。
  2. 应用通过Filter Graph Manager来构建一个Filter Graph。图中的具体设置取决于应用程序。
  3. 应用通过Filter Graph Manager来控制Filter Graph和filters中的数据流。通过这个过程, 应用也可以响应Filter Graph Manager的事件。

编程结束时,应用将发布Filter Graph Manager及所有的filters。

DirectShow基于COM, Filter Graph Manager和filters也都是COM对象。在开始编写 DirectShow程序之前,你应该大概了解COM客户端编程。

相关文章推荐

DirectShow学习笔记1-帮助文档Introduction to DirectShow Application Programming

翻译和摘要 DirectShow帮助文档中: Getting Started——> Introduction to DirectShow Application Programming 文章 简要...

Introduction to Stream Programming Guide for Cocoa

一个stream是编程世界中的基本抽象:比特串从一点到另一点之间串行地传输。Cocoa提供了三个类来表示streams并且方便你在程序中使用:NSStream,NSInputStream,NSOutp...

An Introduction to Interactive Programming in Python(week 7)

本文为coursera中An Introduction to Interactive Programming in Python第七周的project代码,勉强能用,请大家批评指导。...

Introduction to Windows Programming

Starting programming Windows applications in native C/C++ can be a bit daunting. There are lots of t...
  • phikaa
  • phikaa
  • 2011年04月23日 19:42
  • 212

An Introduction to Interactive Programming in Python (Part 1) - Week 0

An Introduction to Interactive Programming in Python (Part 1) - Week 0 - Statements, expressions, va...

An Introduction to Asynchronous Programming and Twisted (笔记)

前篇为了更好的理解Twisted研究了异步处理. 我所关心的不是怎么样用Twisted去编写异步处理server或client, 我更关心Twisted是怎么样用python实现这个异步框架, 他de...

Introduction to 3D Game Programming with DirectX 11学习笔记 6 Direct3D中的绘制(二)顶点着色器

下面是一个顶点着色器的示例,它的代码非常简单:cbuffer cbPerObject { float4x4 gWVP; }; void VS(float3 iPosL : POSITION...

Introduction to 3D Game Programming with DirectX 11学习笔记 4.1 初识Direct3D

概述Direct3D是一种底层绘图API(application programming interface,应用程序接口),它可以让我们可以通过3D硬件加速绘制3D世界。从本质上讲,Direct3D...

Introduction to 3D Game Programming with DirectX 11学习笔记 6 Direct3D中的绘制(四)渲染状态

渲染状态从本质上讲,Direct3D是一个状态机(state machine)。在我们改变它的状态之前,驻留在状态机内的当前状态是不会改变的。例如,我们在6.1节、6.2节和6.3节中看到,当顶点缓冲...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Introduction to DirectShow Application Programming
举报原因:
原因补充:

(最多只允许输入30个字)