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

Qt(5): Render same video on 2 different surfaces using QtMultimedia

本文关键字:表面上 的视频 使用 QtMultimedia Qt      更新时间:2023-10-16

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

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

我看到的是QMediaService::requestControl被调用,它返回一个QVideoRendererControl对象。然后调用 QVideoRendererControl::setSurface 来设置它渲染视频的表面。因此,从我收集的信息来看,QMediaService有一个表面,它可以在任何给定时间将视频渲染到该表面。

如何渲染到 2 个或更多表面?还有其他课程更适合我的需求吗?

干杯

嗯,这很简单,不是我期望的方式。你必须喜欢QtQuick2。

所以我的QML代码中有一个媒体播放器源和一个视频输出项:

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,以便着色器缩小原始图像的大小。