C# Directshow-停止并关闭文件(但重用图形和一些过滤器)
我正在构建一个多流视频播放器。我当前在尝试关闭文件时遇到问题。实际上,我可以在任何时候播放1到4个视频文件。当我播放4个文件时,下一个序列只有一个,在删除源文件过滤器后,我似乎无法正确地重新绘制视频面板 我必须说,我正在手动构建和管理图形(以获得一些额外的速度),包括连接所有过滤器/渲染器等。我已经查看了GMFBridge,但最终我遇到了保持渲染图形和文件图形始终同步的问题(如快速播放问题(由于时间编码而赶上)并且必须同时在渲染图和文件图上运行/暂停/停止/步进mediacontrol(有时播放失败))。从内存中,需要正确配置渲染图,我的场景与提供的示例不完全匹配(需要无缝播放,但仍然需要对每个文件进行单独的时间编码,而不是合并到一个大文件中) 我在应用程序的整个生命周期中重用IFilterGraph2/VMR/DirectSound对象。唯一改变的是SourceFilter和必要的解码器/解复用器 因此,过程是:C# Directshow-停止并关闭文件(但重用图形和一些过滤器),c#,video,com,directshow,directshow.net,C#,Video,Com,Directshow,Directshow.net,我正在构建一个多流视频播放器。我当前在尝试关闭文件时遇到问题。实际上,我可以在任何时候播放1到4个视频文件。当我播放4个文件时,下一个序列只有一个,在删除源文件过滤器后,我似乎无法正确地重新绘制视频面板 我必须说,我正在手动构建和管理图形(以获得一些额外的速度),包括连接所有过滤器/渲染器等。我已经查看了GMFBridge,但最终我遇到了保持渲染图形和文件图形始终同步的问题(如快速播放问题(由于时间编码而赶上)并且必须同时在渲染图和文件图上运行/暂停/停止/步进mediacontrol(有时播放
- 关闭文件(并调用VMR.repainvideo()时COM+异常
UPD。错误为
0x8004020C
VFW\u E\u BUFFER\u NOTSET“未设置缓冲区空间”。用于解码代码,此工具在命中重叠代码块时对DirectShow代码具有特别的优先级。感谢Roman,添加了错误代码。你是建议回到GMFBridge吗?这是一个选项,我想我们已经看到手动连接引脚的速度有了合理的提高,如果我们使用intelligent connectYes,手动速度大约为180毫秒到500毫秒。特别是当安装了大量过滤器并且它首先尝试时,它将永远不会使用这些过滤器。您可以查看它加载和卸载的DLL的尝试。您确实可以在这里进行改进,但如果您想做得更好,就必须拆分图。视频渲染器初始化和pin连接本身会增加延迟。我在上面添加了错误代码描述,它可能来自过滤器经过某种转换状态(停止等)。感谢Roman,非常有用。你有过使用GMFBridge的经验吗?特别是保持源图形和渲染器图形同步?如果我想要当前文件时间,我必须在文件上使用IMediseek,而不是在渲染图上,对吗?有没有一种方法可以运行渲染图,并简单地暂停/停止/查找文件图?我从来没有准确地使用过GMFBridge,因此我无法准确地指导您。它可能实现了imediseek
,这样您就可以使用(第二个)graph的imediseek
/imediposition
,而不用考虑太多内部路由到哪里。当然,你最终将不得不注意计时和时钟。您也可以使用第一个图形的imediseek
/imediposition
。