2013-07-19 45 views
7

我试图在RGBA中用QML获得alpha混合效果。QML视频alpha混合/渲染视频到Qt快速场景图

现在的问题是,QtMultimedia提供的视频项目在QtQuick场景中打开了一个覆盖窗口,所以我不认为有可能将其他QML元素与视频元素进行α混合(我当然希望我'米错了,但我找不到解决方案)。

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

  1. 有没有人以前见过类似的东西?如果QtMultimedia背后的人无法实现它,甚至有可能吗?

  2. 我可以改变MediaPlayer元素的背景,也许是透明的或只是QML中的一种颜色?

到目前为止,我在想QAbstractVideoSurface和QVideoFrame,但我不知道如何将它渲染到QSG,甚至应该如何GeometryNode看的视频。

最好的解决办法是与其他QML元素得到阿尔法混合例如:提前

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

    focus: true 

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

    autoPlay: true 
    } 
} 

谢谢!

回答

2

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

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