Overview of the Filter Connection Process
原文地址:http://msdn.microsoft.com/en-us/library/ms899482.aspx
在两个过滤器连接之前,他们必须增加到过滤器图表中。当使用智能连接(例如,调用IMediaControl::RenderFile)的方式创建一个过滤器图表,过滤器图表管理器基于通过render传入文件了的媒体类型增加相应过滤器到图表中。Graph
Builder对象通过预先选择的过滤器种类创建特定的图标。应用程序也可以通过指导过滤器图标管理器增加特定的过滤器来手动创建图标。在任何一种情况下,过滤器都是通过IFilterGraph::AddFilter方法增加的,并且通过调用IBaseFilter::JoinFilterGraph方法通知一个过滤器已经增加到图表中。增加的过滤器后面就可以连接到上游或者下游的过滤器。为了开始连接过程,过滤器图表管理器对每一个要连接的过滤器要求枚举自己的引脚,通过调用IPin::Connect方法请求一个输出引脚连接到输入引脚。所有的细节都由两个引脚在连接的范围内协商。
就两个过滤器已经连接的意思是它们就它们交互数据的媒体类型共享数据的大小和位置达成一致。连接的类型和传输的类型紧密相关。传输类型有好几种,这决定于数据是以”推”还是“拉”的形式传输,或者数据的缓冲区在主存还是在硬件设备上。
连接/传输类型有一个IMemInputPin连接,这连接的缓冲区在主存中,并且数据是从上游的引脚以“推”的方式传输的。基类能够处理很多这样连接机制。然而,当自己写一个过滤器时理解连接的过程非常重要,以便你可以确定哪些方法需要重写和滤器能够实现什么。在两个连接的过滤器准备传输媒体数据之前,必须按顺序实现下面的连接和协商过程。
1. 初始化连接引脚
2. 输出引脚的一个过滤器需要获取已连接的输入引脚的接口
3. 两个引脚协商一个共同的媒体类型
4. 两个引脚协商一个适合的传输来传递媒体。
第一步,Filter Graph Manger 通知上游过滤器的输出引脚去连接指定的下游过滤器的输入引脚。这样就相互交换IPin接口指针。过滤器就不能再次连接其他过滤器了。Filter Graph Manger 必须一致是它们的代理,开始一个连接,否则就肯能会产生死锁。一个过滤器或者应用程序可以指导Filter Graph Manger去连接两个引脚,或者当通过使用IGraphBuilder::Render或者IGraphBuilder::RenderFile方法去渲染一个过滤器时决定去连接过滤器。
第二步,输出引脚可能从输入引脚请求IMemInputPin接口。这为第四步做准备,那步输出引脚会使用IMemInputPin从输入引脚获取一个内存分频器。如果输出引脚已经有一个内存分配器(或者一起其他的传输在硬件过滤器),将会跳过这步,或者在专有的设计中请求其他一些接口。
第三步,尝试媒体类型,直到找到一个两个引脚都适合或者全部尝试完(这导致连接失败)。首先,输出引脚向输入引脚建议它自己支持的媒体类型。如果没有一个媒体类型适合输出引脚,输出引脚就建议自己的类型。
第四步,输入引脚向输入引脚所要内存分配器对象的接口。在基类中,这些对象继承于CBaseAllocator和CMemAllocator.。这些对象创建媒体采样和它们关联的两个引脚都可以访问的用来传输多媒体数据的数据缓冲区。如果输出引脚不能访问输入引脚的分配器(由下面讨论的原因),它会建议使用自己的分配器。无论哪种情况都需要告诉输入引脚选择的方式。
分享到:
相关推荐
3. **连接过滤器**:通过引脚将各个过滤器连接起来,形成完整的视频捕获和播放流程。 4. **配置和启动**:设置视频捕获参数(如分辨率、帧率等),并启动数据流。 5. **监控事件**:监听过滤器图表管理器的事件,...
- **Capture(视频捕获过滤器)**:负责从视频捕获设备获取原始视频数据。 - **Encoder(视频压缩编码过滤器)**:对捕获的视频数据进行压缩编码,减少传输所需带宽。 - **Sender(数据发送过滤器)**:将压缩后的...
例如,捕获过滤器从摄像头获取视频流,解码过滤器将编码的视频解码成原始格式,渲染过滤器则将视频显示在屏幕上。 2. **过滤器图(Filter Graph)**:过滤器通过Filter Graph Manager(FGM)连接起来,形成一个处理...
3. **建立过滤器图**:选择设备后,通过连接捕获设备过滤器和渲染器过滤器,构建视频流处理链。这一步可能还需要添加其他过滤器,如格式转换过滤器,以确保数据兼容性。 4. **视频流处理**:一旦过滤器图建立,视频...
在视频捕获阶段,通常使用DirectShow提供的视频捕获过滤器(如Video Capture Filter),它可以捕获来自摄像头、电视卡等设备的视频信号。捕获到的视频信号需要经过编码才能有效地在网络上传输。DirectShow提供了多种...
4. **分解过滤器**(Demultiplexer Filter):将复合的数据流分离成单独的音视频流。 5. **合并过滤器**(Multiplexer Filter):将多个独立的数据流合并成一个复合流。 #### 过滤器组件开发技术 DirectShow为...
例如,要实现一个简单的视频预览功能,可以向过滤图表中添加一个视频捕捉源过滤器(Source Filter)和一个Video Renderer过滤器(Rendering Filter),然后将两者正确连接起来。 ##### 2.3 DirectShow的开发环境...
4. **连接过滤器**:使用过滤器图表管理器将上述过滤器连接起来,形成完整的处理管道。 5. **运行过滤器图表**:启动过滤器图表,开始处理视频数据。 通过这种方式,我们可以不受视频流格式和压缩标准的限制,实现...
2. **捕获过滤器**:在DirectShow中,捕获过滤器是处理视频输入的组件。VB程序会创建一个捕获过滤器,并将其连接到图形中,以便从设备接收视频流。 3. **视频预览**:在捕获视频前,程序通常会提供预览功能,让用户...
接着,需要向过滤图表中添加一个视频捕捉源过滤器和一个VideoRenderer过滤器,将视频捕捉源过滤器的输出引脚与VideoRenderer过滤器的输入引脚连接起来。 #### 二、视频编码与压缩 ##### 2.1 H.264视频编码标准 在...
4. 音频/视频渲染过滤器(Renderer Filters):将解码后的数据转化为声音或图像输出。 四、实例步骤 1. 创建项目:在Visual Studio中新建一个Win32控制台应用程序项目。 2. 引入库文件:在项目设置中添加对...
3. 将视频捕捉源过滤器的输出引脚与Video Renderer过滤器的输入引脚连接起来。 #### 三、DirectShow开发环境搭建 为了在程序中使用DirectShow,需要安装DirectX 9.0,并确保程序引用了必要的头文件和库文件。 **...
- 使用DirectShow的"视频捕获"过滤器,可以从摄像头源获取实时视频流。 - 渲染过滤器(如Video Render)将视频帧显示到窗口或控件上,实现摄像头预览。 4. **拍照功能** - 要实现拍照,可以通过调用"视频捕获...
- **数据捕获**:使用DirectShow中的源过滤器从外部设备捕获原始视频数据。 - **数据编码**:使用转换过滤器将原始数据编码成适合网络传输的格式。 - **网络传输**:通过RTP协议将编码后的数据发送到服务器端。 ...
基于DirectShow的实时视频信息采集与压缩方案,通过采用WDM驱动提高视频捕捉效率,并利用MPEG-4视频编码标准实现高效压缩,已经在实际应用中取得了显著的效果。这种方法不仅可以应用于视频会议系统,还可以扩展到...
连接过程称为“链接”(Connect),确保数据从一个过滤器的输出Pin流向另一个过滤器的输入Pin。 五、编程模型 开发DirectShow应用通常涉及以下几个步骤: 1. 初始化DirectShow库。 2. 创建Filter Graph Manager。 3...
DirectShow基于过滤器图(Filter Graph)的架构,由一系列互相连接的过滤器(Filters)组成。每个过滤器执行特定的任务,如读取文件、解码、渲染等。过滤器通过过滤器连接器(Pin)进行通信。过滤器图的构建和管理由...