Qt(5):使用QtMultimedia在2个不同的表面上渲染相同的视频

时间:2012-10-10 10:31:18

标签: c++ qt qt5

我正在Qt(5)中开发一个应用程序,基本上我正在尝试使用QtMultimedia5将相同的视频源渲染到我窗口中的2个位置。 我在QML中这样做,但如果有一个C ++解决方案,我很乐意实现它。

在窗口中显示视频没问题。当我尝试使用相同的QMediaSource但将其渲染到2个窗口/控件上时,问题就开始了。

我看到的是调用QMediaService :: requestControl,它返回一个QVideoRendererControl对象。然后调用QVideoRendererControl :: setSurface来设置它呈现视频的表面。 因此,从我收集的内容来看,QMediaService在任何给定时间都有一个表面呈现视频。

如何渲染到2个或更多曲面?还有其他课程能更好地满足我的需求吗?

干杯

1 个答案:

答案 0 :(得分:7)

嗯,这很简单,不是我预期的方式。你必须爱QtQuick2。

所以我的QML代码中有一个MediaPlayer源和一个VideoOutput项:

MediaPlayer {
    id: mp1
    source: "slide-1.wmv"
}
VideoOutput {
    id: tbltSlides
    anchors.fill: parent
    visible: true
    source: mp1
}

我所要做的只是添加一个ShaderEffectSource并将tbltSlides设置为其源。 这么简单:

ShaderEffectSource {
    id: slides
    x: 600
    width:250
    height: 250
    sourceItem: tbltSlides
    visible: true
}

编辑:显然,为了获得最佳质量,您希望tbltSlides项目大于ShaderEffectSource,以便着色器缩小原始图像的尺寸。