草庐IT

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

coder 2024-02-17 原文

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

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

我看到正在发生的事情是 QMediaService::requestControl 被调用,它返回一个 QVideoRendererControl 对象。然后调用 QVideoRendererControl::setSurface 来设置它渲染视频的表面。 因此,据我所知,QMediaService 有一个表面,它可以在任何给定时间将视频呈现到该表面。

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

干杯

最佳答案

好吧,这相当简单,虽然不是我预期的方式。您一定会喜欢 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,以便着色器缩小原始图像。

关于c++ - Qt(5) : Render same video on 2 different surfaces using QtMultimedia,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12817258/

有关c++ - Qt(5) : Render same video on 2 different surfaces using QtMultimedia的更多相关文章

随机推荐