我使用相同数量的VMR9实例以Windows窗体呈现大量视频流。我使用DirectShowLib-2005在C#中执行此操作。
如果需要显示100个视频,我将创建100个FilterGraphs(IFilterGraph2),每个将包含一个VMR9实例(VideoMixingRenderer9),每个实例将呈现1个视频流。
这会快速耗尽RAM ......
我可以制作一个VMR9过滤器渲染多个视频流,这样我的VMR9实例就会减少,呈现的视频流数量会增加吗?
任何帮助将不胜感激。
答案 0 :(得分:3)
嗯......我明白了......如果有人有更好的例子,请在此发布,我会将其标记为已接受的答案。 < / p>
图表:
如果你在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实例渲染更多的流,而且我不需要担心RAM耗尽。
现在VMR9真正的酷感出现......:D xD
<强> PS 强> 看起来16个流是极限......