Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Directshow:DES渲染到文件停止渲染_.net_Wpf_Visual Studio 2010_Directshow_Directshow.net - Fatal编程技术网

.net Directshow:DES渲染到文件停止渲染

.net Directshow:DES渲染到文件停止渲染,.net,wpf,visual-studio-2010,directshow,directshow.net,.net,Wpf,Visual Studio 2010,Directshow,Directshow.net,使用的技术: .NET 3.5 C/WPF VisualStudio2010SP1 Directshow.Net DES DirectShow编辑服务 P/调用 ======= 申请摘要: 我已经用C/WPF开发了一个简单的视频编辑器,它带有一个自定义的WPF时间轴控件,该控件通过DirectShow.NET连接到DES,并在很大程度上基于DirectShow.NET附带的DESCombine.cs示例。该应用程序的用户可以将视频和图像添加到时间轴中,并选择要在后台播放的歌曲 最终目标是将时间线

使用的技术:

.NET 3.5 C/WPF VisualStudio2010SP1 Directshow.Net DES DirectShow编辑服务 P/调用 =======

申请摘要:

我已经用C/WPF开发了一个简单的视频编辑器,它带有一个自定义的WPF时间轴控件,该控件通过DirectShow.NET连接到DES,并在很大程度上基于DirectShow.NET附带的DESCombine.cs示例。该应用程序的用户可以将视频和图像添加到时间轴中,并选择要在后台播放的歌曲

最终目标是将时间线内容和图表内容呈现到基于wmv的文件中。这基本上是通过选择prx配置文件并启动正确构建的图形来完成的

所有输入视频在添加到timeline/directshow图形之前都会转换为wmv8,因此不需要特殊的第三方directshow过滤器来连接管脚

=======

问题和疑问:

Directshow有时(但并非总是)会在最终视频文件的渲染过程中捕获。没有例外,cpu使用率只是下降到0,什么也没有发生。调试很困难,因为我通过DirectShow.NET访问DirectShow,不知道幕后发生了什么。虽然我启用了非托管调试,但没有引发异常,我不知道是什么问题

我可以看出,随着图形的引脚越来越多,这个问题发生的频率也越来越高。例如,渲染一个包含50个视频和图像的时间轴比只渲染几个图像和视频更有可能导致这种情况

我可以做些什么来准确地找出错误所在,以及在没有引发异常或错误指示的情况下为什么会发生这种情况

=======

我所尝试的:

使用IGraphBuilder::SetLogFile为图形设置日志文件

此日志确实指示某些管脚无法连接,但在渲染完成和失败时,日志看起来完全相同

IntPtr hfile = CreateFile("c:\\dslog2.txt", GENERIC_WRITE, 0, IntPtr.Zero,     OPEN_EXISTING, 0, IntPtr.Zero);
m_pGraph.SetLogFile(hfile);
当我检测到图形已停止时,使用IMediaControl暂停并运行该图形。这没有任何作用

m_pControl.Pause();
Thread.Sleep(2000);
m_pControl.Run();
=======


提前感谢您,我们非常感谢您的帮助。

如果您有一个包含多个来源的时间轴,您很有可能从DES中得到内存不足错误。或者DES只是简单的中断,因为DES是DirectShow中一个非常有缺陷的部分。听起来好像你没有使用动态模式?自动重新连接DES过滤器并删除未使用的源,因此内存消耗不会太大

很难说,但您需要找到检查图形事件的方法,以查看在流媒体传输期间是否报告了任何错误。检查的另一件事是在冻结时间查看线程堆栈以获取锁的详细信息。最终,它很可能是两个事件之一,即EC_ERRORABORT事件,或者某个内存分配器上的缓冲区运行不足。