原文地址:https://yq.aliyun.com/articles/48113

7.Filter的连接过程

DirectShow提供了多方法来连接Filter,如IFilterGraph::ConectDirect,IGraphBuilder::Connect

Filter的连接过程实际是两个过滤器就媒体类型进行协商的过程。Filter连接的过程其实它们的PIN连接的过程,就是上游的输出PIN与上游的输入PIN连接。我们知道,每一个PIN都有它自己支持的媒体类型,而当两个PIN没有共同支持的媒体类型的时候,它们是不能连接的,所以连接之前要进行协商。

在Conect函数的实现里,可以看到大致过程是这样的:

连接是由输出PIN发出的

Connect Start

IF PIN已连接  THEN EXIT

IF  Filter不是停止状态 THEN EXIT 

//开始协商过程

CALL AgreeMediaType

Connect End

AgreeMediaType Start

在输出PIN或输入PIN媒体类型枚举器mediatypeEnums

调用函数TryMediaTypes,并把枚举器的指针传给它

AgreeMediaType End

TryMediaTypes Start

FOR EACH mediatype IN mediatypEnums

AttempConnection(media)

NEXT

TryMediaTypes End

AttemptConnection Start

CheckMediaType //检查媒体类型是否被支持(输出PIN自己)

IF 支持 THEN

在PIN上保存媒体类型

ELSE 

FAILED

END IF

CALL ReceiveConnect  // 询问输入PIN是否接受当前的媒体类型。

IF SUCCEED THEN

CALL CompleteConnect

ELSE

FAIL

END IF

AttemptConnect End

CompleteConnect的作用是完成连接后的一些后续工作,主要是决定数据传输的时候使用哪一个内存分配器,由谁来创建内存分配器(IMemAllocator)。

注:Filter传输的数据单元叫Sample,它是一个COM组件,封装了一个缓冲区。Sample由内存分配器来管理。内存分配器是实现了IMenAllocator接口的COM组件,互责管理Sample。

智能连接:构造Filter Graph的时候通过一些方法的调用,DirectShow会帮我们构造整个Filter Graph。用到的方法有IGraphBuilder::RenderFile, IGraphBuilder:Render

ICaptureGraphBuilder2::RenderStream

Filter的连接过程《转》的更多相关文章

  1. [转]使用Wireshark来检测一次HTTP连接过程

    Wireshark是一个类似tcpdump的嗅探软件,界面更人性化一些,今天我用它来检测一次HTTP连接过程. 安装好之后,先配置一下,选择Capture->Options,先设定你要嗅探的网络 ...

  2. Java虚拟机JVM学习03 连接过程:验证、准备、解析

    Java虚拟机JVM学习03 连接过程:验证.准备.解析 类被加载后,就进入连接阶段. 连接就是将已经读入到内存的类的二进制数据合并到虚拟机的运行时环境中去. 连接阶段三个步骤:验证.准备和解析. 类 ...

  3. [网络技术][转]PPTP连接过程

    转自:http://blog.csdn.net/zhu_hit/article/details/5698958 在未来几天会总结一下PPTP的工作过程,分为以下3篇讲述. 1. PPTP连接过程: 2 ...

  4. iOS socket原理及连接过程详解

    连接过程图解(度娘的拿过来用)

  5. win7 远程桌面连接过程

    背景:在公司日常工作中经常需要是用到远程桌面的连接,在内网环境下,远程桌面连接比qq更加方便!可以考虑外网的连接. 1 准备工作 这里我实验的另一台机器的ip:168.33.51.198,本机ip:1 ...

  6. 不可不知的socket和TCP连接过程

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  7. webrtc底层一对一连接过程探索(二)

    一.连接过程继续解读-----fun32解读 1.1 fun32.02 "undefined" != typeof cordova && (N = !0, D = ...

  8. webrtc初探之一对一的连接过程(一)

    说明,我研究的是muan-khan的一个github项目,针对的是chrome对chrome,也就是pc对pc的一对一,一对多通话,感兴趣的可以继续往下看. github地址:https://gith ...

  9. webrtc底层一对一连接过程探索(三)

    一.连接过程继续解读-----fun33-fun35解读 完整代码如下: //fun33-37 console.error('fun35-37==>2332==>2332'); var q ...

随机推荐

  1. HDU 5816 状压DP&排列组合

    ---恢复内容开始--- Hearthstone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java ...

  2. 创建对象并生成结果的3个步骤-Chapter 3 P38

    必须完成3个步骤才能创建对象并生成结果: 1 创建对象   namespace LanguageFeatures { public class Product { public int Product ...

  3. ORACLE导入导出工具的使用

    ORACLE导出工具exp的使用:  1.将数据库TEST(远程的数据库必须为连接标志符)完全导出,用户名system,密码manager,导出到D:\daochu.dmp中:       exp s ...

  4. CORS请求

    一.简介 CORS(跨域资源共享 Cross-origin resource sharing)是实现跨域的一种常用方式.实现CORS通信的关键是服务器.只要服务器实现了CORS接口,就可以跨源通信 二 ...

  5. zz VS2010配色方案

    http://studiostyles.info 这个网站专门为vs 2005, vs 2008, vs2010提供配色方案下载. 网站首页罗列出大量的配色方案,都附有缩略图以及rated(评估),d ...

  6. web 开发 css 默认值列表

    css默认值列表 HTML标签CSS属性默认值汇总 这个东西,在你需要还原默认值的时候,比较有用. 开始的时候 *{margin:0;padding:0;},当需要使用边距的时候,就需要还原HTML默 ...

  7. React Native入门指南

    转载自:http://www.jianshu.com/p/b88944250b25 前言 React Native 诞生于 2015 年,名副其实的富二代,主要使命是为父出征,与 Apple 和 Go ...

  8. LightOJ - 1205:Palindromic Numbers (数位DP&回文串)

    A palindromic number or numeral palindrome is a 'symmetrical' number like 16461 that remains the sam ...

  9. 一个Android开发妹子的找工作心酸史

    阿里:实习二面被KO 1,人生接到的第一个电话面试来自大家都说好的阿里,心情激动,说话颤抖,本以为没有戏,然而第二天接到了二面的电话有点小激动.然后就是被ko了,死的原因很简单,那时候单纯的自己什么都 ...

  10. wpf 客户端【JDAgent桌面助手】开发详解(二)桌面宠物制作详解

    目录区域: wpf 客户端[JDAgent桌面助手]业余开发的终于完工了..晒晒截 wpf 客户端[JDAgent桌面助手]开发详解-开篇 wpf 客户端[JDAgent桌面助手]开发详解(一)主窗口 ...