我使用 C# 和 DirectShow.net 开发了一个简单的视频编辑器。到目前为止,我有一个使用 DirectShow 编辑服务构建的 DirectShow 过滤器图。我的应用程序根据需要在预览窗口中控制图形、运行、暂停和停止播放。在编辑会话中,图表会根据用户添加、删除或修改媒体的请求进行更改。
目前,我使用封装在 WindowsFormsHost 中的 PictureBox 来预览编辑后的视频。但我真的很想尝试改用 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 制作的过滤器图呈现到 WPF 控件中......