您的任务非常不寻常,并且没有任何媒体基础组件允许将两个视频流合并为一个。然而,'IMFMediaSesion'支持通过'MFCreateAggregateSource'在一个源中处理两个视频流。这意味着像'LEGO'这样的媒体基金会可以让您自行撰写解决方案,将两个视频流合并为一个像画中画一样的视频流,但它本身并不支持这种功能。
问候。
P.S.我想建议阅读'开发微软媒体基础应用程序' '安东波林格'(Developing Microsoft® Media Foundation Applications) - 它包含了很多例子的一个流,但它包含了'WaterMarkTransform'的代码 - 用于注入图像的代码Media Foundation Transform进入视频流 - 为您的解决方案启动此类代码凸轮 - 将一个视频流注入另一个视频流。
P.S.我有一个错误 - 我看到你只想显示画中画 - 所以EVR - 默认的视频渲染器支持16个视频流 - 一个参考和15个额外的 - 你需要通过'MFCreateVideoRendererActivate'创建'VideoRenderer',然后创建每个视频流(对于两个流中的每一个,你的情况)TopologyNode
,为每个TopologyNode
设置已经通过设置'SetObject'创建的'VideoRenderer' - 结果许多视频流将使用ONE'VideoRenderer'。BY设置SetUINT32
为TopologyNode
'MF_TOPONODE_STREAMID',您必须选择哪个流将参考 - '背景图片' - 通过设置0,以及哪个流将为'MF_TOPONODE_STREAMID'大于0(例如1)的additional Picture
。 additional Picture
的位置可以通过IMFVideoMixerControl来控制 - 它包括下列方法: GetStreamOutputRect - 检索合成矩形内视频流的位置。
GetStreamZOrder - 检索视频流的z顺序。
SetStreamOutputRect - 设置合成矩形内视频流的位置。
SetStreamZOrder - 设置视频流的z顺序。
这就是我所做的,但现在我正努力在一个窗口中分别显示两个视频。我试图使用'm_pVideoMixerControl-> SetStreamOutputRect(0,&rect)',但它不起作用。如何做到这一点。 – User7723337
你通过什么值。 rect在0.0到1.0的范围内。例如MFVideoNormalizedRect rcHalf = {0.0,0.0,0.5,0.5};同时使用m_pStreamSink-> GetIdentifier检查流的标识符是否正确。 – mofo77