QML视频alpha混合/将视频渲染为Qt快速场景图

时间:2013-07-19 09:13:15

标签: qt qml alphablending qtquick2

我正在尝试使用RGBA中的视频在QML中获得alpha混合效果。

现在问题是QtMultimedia提供的视频项实际上在QtQuick场景中打开了一个重叠的窗口,所以我认为不可能将其他QML元素与视频元素进行alpha混合(我当然希望我是错了,但我找不到解决办法。)

另一种方法是在updatePaintNode方法中自己在一个继承自QQuickItem的类中呈现视频。

  1. 以前有人见过这样的事吗?如果QtMultimedia背后的人无法实现它,甚至可能吗?

  2. 我可以更改MediaPlayer元素的背景,可能是透明的还是QML中的颜色?

  3. 到目前为止,我一直在考虑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 个答案:

答案 0 :(得分:2)

我尝试了一些东西,但最后我使用了名为VideoWidget的Qt示例,它使用了QAbstractVideoSurface和QVideoFrame,并在QQuickPaintedItem中绘制了帧,使用MediaPlayer从QML加载数据。

将ARGB32放在描述QAbstractVideoSurface中支持的像素格式的QList之上是很重要的,遗憾的是Qt逻辑是它们采用第一种availibe格式,这就是为什么本机Video元素不显示alpha通道(它在RGB32中播放视频,或者它是原生元素中覆盖窗口的东西,而不是在QtQuick场景图中绘制它。