我在WinForm中有一个自定义用户控件,我用它来显示使用VMR9 / DirectShow.Net的流式视频。我将解码后的帧提供给自定义PushSource过滤器。当计算机被锁定然后解锁时,我看到奇怪的行为
我还应该补充一点,我可以在计算机锁定时使用FFMpeg录制视频,并且还确认帧已插入源过滤器但未显示(解锁后)
我使用IMediaEvent添加了一个线程来监控图形事件。当我启动流媒体/图表时,我看到事件ClockChanged和Paused(即使它正在播放)。当我解锁计算机时,我看到事件VMRRenderDeviceSet param1 = 2,param2 = 0和Paused(param1 = 0,param2 = 0)。
我的图形拓扑是(自定义)推送源过滤器 - >色彩空间转换器 - > Ds .Net Grabber - >色空间转换器0001 - >视频混合渲染器9。
此外,我可以在显示屏冻结时抓取正确的框架,因此似乎问题是VMR9。
根据所提供的信息,任何人都可以解释可能出错的问题吗?我可以根据需要提供任何其他细节。
答案 0 :(得分:2)
如果您使用windows7预定义编解码器然后用类似xvid的东西替换它们,在win7中我丢失了3d设备时遇到了同样的问题,可能是由于使用了ctrl + alt + del或类似的东西。
请检查此链接: http://www.codecguide.com/windows7_preferred_filter_tweaker.htm
配置完成后,只需运行graphstudio并在其中拖动一个avi文件,这样您就可以看到系统使用的编解码器。在ctrl + alt + del。
之后,您将在graphedit中看到与默认win7代码相同的行为但实际上是默认win7编解码器处理重置设备的一些问题。
答案 1 :(得分:0)
这是错误:
// // MessageId:VFW_E_BUFFER_NOTSET // // MessageText:// //否 缓冲区空间已设置。%0 // 定义 VFW_E_BUFFER_NOTSET ((HRESULT)0x8004020CL)
此错误代码应该有原因,并且VMR本身不太可能。也许上游过滤器(什么是拓扑?)是这个错误的绊脚石。也许您可以看到图表生成的其他事件,您可以接收和处理这些事件。
答案 2 :(得分:0)
使用自定义分配器时,我遇到了同样的问题。当我们锁定计算机然后DirectX设备将丢失并且所有绘图将停止时的原因。如果是这种情况,请尝试使用device.reset方法重置设备。 Here是要恢复的样本。希望对你有所帮助。