我使用相同数量的VMR9实例在Window窗体中呈现了许多视频流。我在C#中使用DirectShowLib-2005来做这件事。
如果需要显示100个视频,我将创建100个FilterGraphs (IFilterGraph2),每个将包含一个VMR9实例(VideoMixingRenderer9),每个实例将呈现一个视频流。
这很快就会用完内存...
是否可以让一个VMR9过滤器渲染多个视频流,从而减少VMR9实例,渲染更多的视频流?
任何帮助都将不胜感激。
发布于 2011-05-05 20:09:49
嗯..。我想通了..。如果有人有更好的例子,请把它贴在这里,我会把它标记为被接受的答案。
图表:

如果你用GrapgEdit (或其他东西)渲染它,它会显示第一个(Input0)流和下面的第二个(Input1)流,但我希望它们同时可见!
为此,必须这样配置VMR9 (省略错误处理和一些VMR9配置)
//Setting VMR9 to run in WINDOWLESS MODE
filterConfig = (IVMRFilterConfig9)vmr;
filterConfig.SetRenderingMode(VMR9Mode.Windowless);
//Number of streams that I want to render together (mix)
filterConfig.SetNumberOfStreams(2);
//Get the MIXER CONTROL that will be used to configure video rendering surfaces
mixerCtrl = (IVMRMixerControl9)vmr;
//*** RENDER THE PINS SO THE GRAPH CONNECTS CORRECTLY (omitted) ***
//Define areas of the clipping window that will be covered by each video stream
NormalizedRect r1 = new NormalizedRect(0,0,0.5f, 0.5f);
NormalizedRect r2 = new NormalizedRect(0.5f, 0.5f, 1f, 1f);
//For each stream (0 and 1) set the output rect
mixerCtrl.SetOutputRect(0, ref r1);
mixerCtrl.SetOutputRect(1, ref r2);在此之后,流被渲染在剪辑窗口的左上角和右下角,并且它们都被正确地显示和渲染!

如果您想显示更多的视频流,只需相应地配置SetNumberOfStreams,并为每个视频流配置NormalizedRect即可。通过这种方式,我可以用一个VMR9实例呈现更多的流,并且我不需要担心内存耗尽。
现在,VMR9的真正酷炫之处显现了……:D xD
PS它看起来16个流是限制...
https://stackoverflow.com/questions/5881812
复制相似问题