首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个视频混合渲染器9 (VMR9)可以渲染更多的视频流吗?

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

Stack Overflow用户
提问于 2011-05-04 18:14:46
回答 1查看 3.4K关注 0票数 2

我使用相同数量的VMR9实例在Window窗体中呈现了许多视频流。我在C#中使用DirectShowLib-2005来做这件事。

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

这很快就会用完内存...

是否可以让一个VMR9过滤器渲染多个视频流,从而减少VMR9实例,渲染更多的视频流?

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-05 20:09:49

嗯..。我想通了..。如果有人有更好的例子,请把它贴在这里,我会把它标记为被接受的答案。

图表:

如果你用GrapgEdit (或其他东西)渲染它,它会显示第一个(Input0)流和下面的第二个(Input1)流,但我希望它们同时可见!

为此,必须这样配置VMR9 (省略错误处理和一些VMR9配置)

代码语言:javascript
复制
//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个流是限制...

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5881812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档