我已经做好了Capture Filter及它后面的Filter。链接运行都正常。现在我需要在Capture Filter 前加入Crossbar。我用AMCAP中的CCrossbar。可是每次找到Capture Filter 的InputPin,并且GUID也判断是PIN_CATEGORY_ANALOGVIDEOIN后,链接不上CCrossbar。
我的pStartingInputPin->ConnectedTo(&pStartingOutputPin)执行结果总是:
 “接口的方法太多,无法从中启用事件”。我没有用ISampleCaptureGraphBuilder。这是唯一和AMCAP不同的地方。但是我认为这和上边不能连接的问题无关。但是,AMCAP中的代码就可以通过这行。返货s_ok。
我搜索了很多地方。自己也一直在尝试,都没有解决此问题。
现在提出该问题,希望大家能帮忙分析下。
非常感谢!!

解决方案 »

  1.   

    也在学习DSHOW,貌似陆其明《DSHOW实物精选》里面有例子的。
      

  2.   

    印象中以前遇到过这个问题,原因是两个pin可以输出和接受的类型不只一种,结果DirectShow不知道要用哪种方式连接。后来是用IFilterGraph::ConnectDirect的第三个参数指明连接媒体类型,得以成功的。
      

  3.   

    初学,帮不上你,CSDN讨论directshow比较多的
    专题开发/技术/项目 --> 多媒体/流媒体开发 
      

  4.   

    不过使用CLSID_CaptureGraphBuilder2貌似能省很多事,Directshow文档上也是推荐使用的
      

  5.   

    想起来了,刚才搞错了,以前遇到的问题似乎是这样的,如果是用IPin::Connect函数会有问题,翻阅帮助文档以后,发现它说得是必须借助IFilterGraph来作连接,而不应该直接调用这个函数,所以做直接的连接(不往中间插智能Filter)的话,应该调用IFilterGraph::ConnectDirect。
    而IPin::ConnectedTo的作用不是连接两个Filter,而是返回当前IPin连接着的IPin的值,它的参数是IPin**,显然是个返回值。
      

  6.   

    再多加一句,如果直接调用IPin::Connect的话,连接到GraphEdit里面你会发现一个奇特的现象,A连上了B,但是B没有连上A,虽然反向再调用一次IPin::Connect两边都连上了,不过不知道会不会存在其他问题,还是老老实实调用IFilterGraph::ConnectDirect为好。
      

  7.   

    这个问题,用connect不行的。CaptureGraphBuilder2这个不是我不想用。我是接着别人的程序写的。他没用这个自动的,我也没法用。我考虑过改这个,可是动的地方太多了。我就是想加个crossbar.接口方法过多是怎么回事啊?
      

  8.   

    谁有简单的制作并链接CROSSBAR的思路啊? 我照着AMCAP写了一个程序,但是问题如题。请问谁有简单明了的思路或者例程啊?谢谢大家了!
      

  9.   

    郁闷啊。我也遇上这个问题了 ,现在CCROSSBAR创建不了
    敢问楼主到现在解决了 没?