我想在运行时将Compressor,Avi Muxer和File Writer添加到我的图形中。我已经将InfTee添加到我的图形中,如下所示:
IBaseFilter sourceTee = (IBaseFilter)new InfTee();
graphBuilder.AddFilter(sourceTee, "Infinite Tee");
outPin = DsFindPin.ByDirection(theVideoDevice, PinDirection.Output, 0);
inPin = DsFindPin.ByDirection(sourceTee, PinDirection.Input, 0);
hr = graphBuilder.Connect(outPin, inPin);
但是,当我尝试像下面的代码一样在按钮单击上获得输出时,出现错误。
private void button1_Click(object sender, EventArgs e)
{
IPin outPin, inPin;
int hr;
// Connect To Compressor
outPin = DsFindPin.ByDirection(Preview_Class.smartTeeFilter, PinDirection.Output ,1);
inPin = DsFindPin.ByDirection(Preview_Class.theVideoCompressor, PinDirection.Input, 0);
hr = Preview_Class.graphBuilder.Connect(outPin, inPin);
DsError.ThrowExceptionForHR(hr);
// etc
}
我必须注意,在预览时我的视频渲染器的输出引脚为0,但是我想通过单击按钮来添加录制功能。
任何帮助,将不胜感激。
运行过滤器图时,无法添加/删除过滤器,也无法连接/断开引脚。无法执行此操作的原因在于,这些操作假定过滤器处于停止状态,而过滤器图形状态转换假定该图中的所有过滤器都随图形本身一起改变状态。
MSDN / DirectShow增加了使用动态重新连接方法运行时更改拓扑的灵活性。虽然算法定义得很好,但是股票过滤器和第三方过滤器很少实现它。也就是说,DirectShow的整个部分向开发人员提供了一个提示:“如果您渴望的话,如何在自己的过滤器中自己实现它”。
C#代码是DirectShow技术的使用者,它处理事实上可用的内容,而不是动态重新连接。一种典型的方法是桥接(请参阅上面的Wimmel的评论,然后搜索论坛-它被多次提及)。
也可以看看:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句