【发布时间】:2009-10-13 10:43:56
【问题描述】:
我正在使用自定义分配器示例在面板上显示视频,对于某些文件,它会在某个活动窗口上播放视频,并单独显示。我怎样才能避免打开这个不需要的窗口。
【问题讨论】:
标签: directx video-streaming directshow
我正在使用自定义分配器示例在面板上显示视频,对于某些文件,它会在某个活动窗口上播放视频,并单独显示。我怎样才能避免打开这个不需要的窗口。
【问题讨论】:
标签: directx video-streaming directshow
通常,当解码器和渲染器无法就连接达成一致时,视频会在 ActiveMovie 窗口中播放,因此图形生成器使用默认渲染器(如果您通过执行 RenderFile 方法自动构建图形),它是单独播放的。检查分配器的 InitializeDevice 方法中的代码,如果 InitializeDevice 总是失败,那么您的视频将在默认渲染器中渲染。
确保您使用的是 VMR9Mode_Renderless 模式。如果你没有在 VMR7/9 中使用任何混音,我建议删除对 SetNumberOfStreams 方法的任何调用,这会使事情变得更简单。
可以在here 中找到自定义分配器使用的非常好的示例。
【讨论】:
什么意思?当您开始播放文件时,它会打开一个包含实际视频的窗口?
如果是这样,您可能想调查Video Mixing Render filter。您可以创建您的own custom allocator,它允许您拦截present call,然后您可以在任何地方绘制视频,但是,您想要的。
或者,我个人认为这更容易,您想研究转储过滤器示例,然后使用它来构建您自己的渲染器。这样,当您收到框架时,您可以随心所欲地使用它,而无需担心内部结构。如果您不希望它们在您的应用程序之外可用,它非常简单的编写过滤器。
编辑:你有没有 QueryInterfaced the IVMRFilterConfig9 interface 和 SetRenderingMode 到 VMR9Mode_Windowless?
【讨论】: