QML视频透明度混合/将视频渲染到Qt Quick场景图中

8

我正在尝试在QML中使用RGBA视频实现alpha混合效果。

现在的问题是,QtMultimedia提供的Video Item实际上在QtQuick场景中打开了一个覆盖窗口,因此我认为不可能使用Video元素与其他QML元素进行alpha混合(我希望我是错的,但我找不到解决方案)。

因此,另一种方法是在继承自QQuickItem的类中,在updatePaintNode方法中自己渲染视频。

  1. 有人见过类似的情况吗?如果QtMultimedia的开发人员都无法实现,那么这是否可能?

  2. 我可以在QML中更改MediaPlayer元素的背景,例如将其设置为透明或仅颜色吗?

到目前为止,我一直在考虑QAbstractVideoSurface和QVideoFrame,但我不知道如何将其呈现到QSG上,甚至不知道视频的GeometryNode应该是什么样子。

最好的解决方案是与其他QML元素一起获得alpha混合效果,例如:

Rectangle {
  width: 1024
  height: 768
  color: "yellow"

  focus: true

  Video {
    id: video
    anchors.fill: parent
    source: "alpha-video.mov"

    autoPlay: true
  }
}

事先感谢您!

1个回答

2
我尝试了几种方法,但最终我使用了名为VideoWidget的Qt示例,该示例使用QAbstractVideoSurface和QVideoFrame,并在QQuickPaintedItem中绘制帧,使用MediaPlayer从QML加载数据。
在QAbstractVideoSurface中,将ARGB32放在描述支持的像素格式的QList的顶部非常重要。不幸的是,Qt的逻辑是他们使用第一个可用格式,这就是为什么本地Video元素不显示alpha通道的原因(它以RGB32播放视频,或者这是本地元素中覆盖窗口而不是在QtQuick场景图中绘制它的问题)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接