一个视频混合渲染器9(VMR9)可以渲染更多视频流吗?

时间:2011-05-04 10:14:46

标签: c# directshow.net

我使用相同数量的VMR9实例以Windows窗体呈现大量视频流。我使用DirectShowLib-2005在C#中执行此操作。

如果需要显示100个视频,我将创建100个FilterGraphs(IFilterGraph2),每个将包含一个VMR9实例(VideoMixingRenderer9),每个实例将呈现1个视频流。

这会快速耗尽RAM ......

我可以制作一个VMR9过滤器渲染多个视频流,这样我的VMR9实例就会减少,呈现的视频流数量会增加吗?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

嗯......我明白了......如果有人有更好的例子,请在此发布,我会将其标记为已接受的答案。 < / p>

图表: The graph I want to render with one VMR9 renderer

如果你在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);

在此之后,流渲染在剪切窗口的左上角和右下角,它们都显示并正确呈现! Shows the resulting clipping window containing 2 video streams rendered with one VMR9

如果您想要显示更多视频流,请相应地SetNumberOfStreams,并为每个视频流配置NormalizedRect。这样我就可以使用一个VMR9实例渲染更多的流,而且我不需要担心RAM耗尽。

现在VMR9真正的酷感出现......:D xD

<强> PS 看起来16个流是极限......