Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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
C# 更改监视器后,图形将重新启动_C#_Directshow_Directshow.net_Video Recording - Fatal编程技术网

C# 更改监视器后,图形将重新启动

C# 更改监视器后,图形将重新启动,c#,directshow,directshow.net,video-recording,C#,Directshow,Directshow.net,Video Recording,我有一个DirectShow图形,它记录并显示视频源。当我将视频渲染器窗口移动到其他监视器时,我录制的内容将被删除,并再次开始录制。我搜索并找到了显示更改监视器停止并启动图形的命令。如何阻止图形重新启动?我不想在显示器之间切换时丢失我的录音 谢谢消息的这种行为可能有很好的原因,所以我不知道当您自己处理此消息并且不重新启动图表时有什么缺点 相反,您可以使用将渲染图与录制分开。使用一个图形进行捕获和记录。仅将第二个图形用于渲染,因此重新启动该图形不会停止录制 编辑:在重新启动第二个图形之前,可能需要

我有一个DirectShow图形,它记录并显示视频源。当我将视频渲染器窗口移动到其他监视器时,我录制的内容将被删除,并再次开始录制。我搜索并找到了显示更改监视器停止并启动图形的命令。如何阻止图形重新启动?我不想在显示器之间切换时丢失我的录音


谢谢

消息的这种行为可能有很好的原因,所以我不知道当您自己处理此消息并且不重新启动图表时有什么缺点

相反,您可以使用将渲染图与录制分开。使用一个图形进行捕获和记录。仅将第二个图形用于渲染,因此重新启动该图形不会停止录制

编辑:在重新启动第二个图形之前,可能需要断开连接。这意味着您确实需要处理EC_DISPLAY_CHANGED消息,即使您使用GMFBridge

m_pController->BridgeGraphs(NULL, NULL);

消息以这种方式运行可能有一个很好的原因,因此我不知道当您自己处理此消息并且不重新启动图形时,有什么缺点

相反,您可以使用将渲染图与录制分开。使用一个图形进行捕获和记录。仅将第二个图形用于渲染,因此重新启动该图形不会停止录制

编辑:在重新启动第二个图形之前,可能需要断开连接。这意味着您确实需要处理EC_DISPLAY_CHANGED消息,即使您使用GMFBridge

m_pController->BridgeGraphs(NULL, NULL);

您所描述的行为基本上是设计的行为(尽管副作用非常烦人和令人困惑)。在监视器之间移动视频渲染器会使其重新分配用于显示视频的硬件资源,而这又需要状态转换。对于录制,状态转换意味着打开和关闭文件


您的解决方案是分为演示图和录制图,或者使用自定义分配器/演示器以您想要的方式处理演示。据推测,图分裂(Wimmel在另一个答案中的建议)是增加其他自由度的更好方法

您所描述的行为基本上是设计的行为(尽管其副作用非常烦人和令人困惑)。在监视器之间移动视频渲染器会使其重新分配用于显示视频的硬件资源,而这又需要状态转换。对于录制,状态转换意味着打开和关闭文件


您的解决方案是分为演示图和录制图,或者使用自定义分配器/演示器以您想要的方式处理演示。据推测,图分裂(Wimmel在另一个答案中的建议)是增加其他自由度的更好方法

如何处理EC_DISPLAY_CHANGED事件并中止重新启动图形?如果你能帮我一点忙,我会很高兴的。谢谢我从未使用过这个,但是在您链接到的线程中,建议使用
imediavent::CancelDefaultHandling
来接收该事件。另请参见。如何处理EC_DISPLAY_CHANGED事件并中止重新启动图形?如果你能帮我一点忙,我会很高兴的。谢谢我从未使用过这个,但是在您链接到的线程中,建议使用
imediavent::CancelDefaultHandling
来接收该事件。另请参见。使用增强视频渲染器是否可以解决我的问题?我不想分割图形。谢谢你试一下,我不确定。EVR很有可能是正常的:EVR一次在所有监视器上分配资源并在运行中切换,因此可能不需要重新启动图形。不会重新启动,也不会在新监视器上显示视频。视频渲染器重新启动图形当然是有原因的-这就是他们切换资源的方式。如果您抑制了此切换期间使用的消息/事件,则图形不会重新启动,但VRs无法执行其需要执行的操作。。。拆分(桥接)图,这增加了复杂性,但最终成为可靠和灵活的解决方案。两者都不是。您需要在单独的过滤器图中使用视频渲染器和多路复用器/写入器,以便一个可以重新启动,而不会影响另一个。请在此阅读相关详细信息:使用增强视频渲染器可以解决我的问题吗?我不想分割图形。谢谢你试一下,我不确定。EVR很有可能是正常的:EVR一次在所有监视器上分配资源并在运行中切换,因此可能不需要重新启动图形。不会重新启动,也不会在新监视器上显示视频。视频渲染器重新启动图形当然是有原因的-这就是他们切换资源的方式。如果您抑制了此切换期间使用的消息/事件,则图形不会重新启动,但VRs无法执行其需要执行的操作。。。拆分(桥接)图,这增加了复杂性,但最终成为可靠和灵活的解决方案。两者都不是。您需要在单独的过滤器图中使用视频渲染器和多路复用器/写入器,以便一个可以重新启动,而不会影响另一个。请在此阅读相关详细信息: