DirectShow 学习笔记
一 DirectShow简介
DirectShow 主要为在Windows平台上处理各种格式的媒体文件的回放,音视频采集等高性能的
多媒体应用,提供了完整的解决方案并集成了DirectX家族中其他成员(如DirectDraw,DirectSound等技术)
二 Filter原理
1 Filter的基本概念
Filter是DirectShow中的最基本的概念,DirectShow使用Filter Graph来管理Filter,
Filter Graph是Filter的容器,Filter是FilterGraph中的最小功能模块
Filter一般有由一个或多个Pin组成,Filter之间通过Pin相互连接,构成一条顺序的链路.
Filter 根据功能的不同大致分为3大类:Source Filters,TransFrom Filters,Rendering Filters
仅含有输出Pin,没有输入Pin 的Filter 为Source Filters
既有输入Pin,也有输出Pin的Filter 为TransFrom Filters
仅有输入Pin,没有输出Pin的Filter 为Rendering Filters
2 Filter的连接
Filter的连接实际上也就是的Filter上Pin的连接,连接的方向一般总是由上一级的Filter的输出Pin
指向下一级Filter的输入Pin (在连接的过程中要注意媒体类型检查)
四种智能连接
(1)IGraphBuilder::AddSourceFilter 该方法给出一个源文件路径,Filter Graph Manager
能够为这个源文件加载一个相应的Source Filter.
这是一个分析文件路径以及查询注册表的过程.
(2)IGraphBuilder::RenderFile 该方法给出一个文件名,首先根据IGraphBuilder::AddSourceFilter
类似的算法找到并创建正确的Source Filter 然后,就从该
Source Filter的各个输出Pin开始,进行剩下的智能连接
过程。
(3)IGraphBuilder::Render 这个方法从当前Filter Graph的某个Filter的指定输出Pin
开始,进行从这个Pin往下的一条支路的智能连接。算法与
RenderFile类似
(4)IGraphBuilder::Connect 这个方法以欲连接的一对输出Pin和输入Pin作为参数 首先
进行这两个Pin之间的直接连接,如果不成功,则要插入
"中介"Filter 这个"中介"Filter的选择以及试连接过程
就是一个智能连接过程,算法与上述的RenderFile类似
3 动态重建技术
从上往下要求媒体类型改变 但传送数据使用的内存不需增大
从下往上要求媒体类型改变 但传送数据使用的内存不需增大 (这里的从上往下要求媒体类型改变有一个前提
条件,那就是Filter B 必须要拥有自己的
Sample分配器)
4 Filter的数据传送
推模式 和 拉模式
5 媒体定位
IMediaSeeking 接口 如果写的是推模式 Source Filter,一般应该在Filter的输出Pin上
实现IMediaSeeking接口,如果写的是Transform Filter 只需要输出Pin上
将用户的定位操作请求传递给上一级Filter的输出Pin
IMediaSeeking除了可以进行媒体的随机定位外,还可以用来调整媒体文件的
回放速率,调用方法IMediaSeeking::SetRate 如参数为2.0表示2倍速播放
6 音视频的同步解决方案