如何使用WPF MediaKit或类似程序从使用DES创建的DirectShowfilter图形渲染到WPF控件?

我使用C#和DirectShow.net开发了一个简单的video编辑器。 截至目前,我有一个使用DirectShow编辑服务构建的DirectShowfilter图。 我的应用程序根据需要控制图形,运行,暂停和停止预览窗口中的播放。 在编辑会话中,图表会根据用户添加,删除或修改媒体的请求而更改。

目前我使用包装在WindowsFormsHost中的PictureBox来预览已编辑的video。 但我真的想尝试使用Jeremiah Morril的WPF MediaKit。 (http://wpfmediakit.codeplex.com)

最初的思路(我的暴力方法)是将IGraphBuilder和IPin从我的图形传递到WPF MediaKit中的MediaUriPlayer.cs中的OpenSource()函数,以便添加VMR9渲染器并连接到我现有的图形而不是创建在原始OpenSource()中完成的新图形。 这没有很好地解决,并且在尝试各种组合后我放弃了,并且大部分时间都将“COM对象与其底层RCW分离”错误。

在最初的失败后,我搜索并在http://videorendererelement.codeplex.com上看到了Morrill的类似VideoRendererElement。 似乎将样本抓取器添加到我的DirectShow图形并使用它将样本发送到VideoRendererElement并不太难。 这就像VideoRendererElement中包含的网络摄像头示例。

最后,我想知道是否有可能以相同的方式使用来自WPF MediaKit的任何较新的控件,即将样本从我的图形中的样本抓取器传递到MediaUriElement,DvdPlayerElement或其他控件来自WPF MediaKit集合。 基本上我的问题是:任何人都可以建议使用WPF MediaKit或VideoRenderingElement来实现此示例抓取器方案吗? 或者也许有人可以建议一种更好的方法让我的DES制作filter图形呈现为WPF控件…

从记忆中做到这一点。

因为听起来你有一个自定义的DirectShow图。 我只想把WPF MediaKit用于一些事情:

参加D3DRenderer基类。 这样可以很容易地用D3DImage渲染D3D内容。 拿VMR9分配器和D3D9互操作的东西。

我假设您正在使用VideoMixingRenderer9 …因此,在创建VMR9时,在代码中,获取允许您设置自定义分配器的VMR9接口(示例应该位于baseclass.cs中的CreateRenderer方法中)。 实例化从MediaKit中提取的自定义分配器并将其传递给接口。 该分配器有一个事件,当它获得一个新的d3d表面时以及当一个新帧准备出现时触发。 确保D3DRenderer类获取这些事件(新曲面,新帧)。 应该是90%的复制和粘贴操作:)