QML Video alpha-blending/rendering a video into a Qt Quick Scene Graph
Posted
技术标签:
【中文标题】QML Video alpha-blending/rendering a video into a Qt Quick Scene Graph【英文标题】: 【发布时间】:2013-07-19 09:13:15 【问题描述】:我正在尝试使用 RGBA 中的视频在 QML 中获得 alpha 混合效果。
现在的问题是 QtMultimedia 提供的 Video Item 实际上在 QtQuick 场景中打开了一个覆盖窗口,所以我认为不可能将其他 QML 元素与 Video 元素进行 alpha 混合(我当然希望我是错误,但我找不到解决方案。
因此,另一种方法是在 updatePaintNode 方法中自己在继承自 QQuickItem 的类中渲染视频。
以前有人见过这样的事情吗?如果 QtMultimedia 背后的人做不到,这有可能吗?
我是否可以更改 MediaPlayer 元素的背景,可以是透明的,或者只是 QML 中的一种颜色?
到目前为止,我一直在考虑 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】:我尝试了一些东西,但最后我使用了名为 VideoWidget 的 Qt 示例,它使用 QAbstractVideoSurface 和 QVideoFrame,并在 QQuickPaintedItem 中绘制帧,使用 MediaPlayer 从 QML 加载数据。
将 ARGB32 放在描述 QAbstractVideoSurface 中支持的像素格式的 QList 之上很重要,不幸的是 Qt 逻辑是它们采用第一种可用格式,这就是为什么原生 Video 元素不显示 alpha 通道 (它以 RGB32 播放视频,或者是在本机元素中具有覆盖窗口的东西,而不是在 QtQuick 场景图中绘制它)。
【讨论】:
以上是关于QML Video alpha-blending/rendering a video into a Qt Quick Scene Graph的主要内容,如果未能解决你的问题,请参考以下文章
Qt qml MediaPlayer/Video 仅再现声音(无视频)