1. 问题
在Linux QML多媒体VideoOutput开发中遇到如下问题:
- 程序功能:Camera采集视频,VideoOutput显示
- 直接在Ubuntu Qt Creator中远程部署到开发板运行,显示正常。
- 但是如果直接到开发板目录中运行,视频被window组件覆盖。
import QtQuick 2.15
import QtQuick.Window 2.15
import QtMultimedia 5.15
import QtQuick.Controls 2.15
Window {
width: 500
height: 1000
y: 200
visible: true
title: qsTr("Hello World")
VideoOutput{
width: 300
height: 200
fillMode: Image.PreserveAspectFit
visible: true
source: _mCamera
}
Camera{
id: _mCamera
}
}
2. 解决方案1
不知道什么原因,暂时的解决方案是用另一个window
组件包裹VideoOutput,并将这个window
组件的颜色设置为透明,代码如下:
import QtQuick 2.15
import QtQuick.Window 2.15
import QtMultimedia 5.15
import QtQuick.Controls 2.15
Window {
width: 500
height: 1000
y: 200
visible: true
title: qsTr("Hello World")
Window {
width: 400
height: 500
visible: true
color: "transparent"
title: qsTr("Hello World")
VideoOutput{
width: 300
height: 200
fillMode: Image.PreserveAspectFit
visible: true
source: _mCamera
}
}
Camera{
id: _mCamera
}
}
3. 解决方案2
- 经排查,发现在板子直接运行与远程部署效果不一样的原因是
环境变量不一样
。 - 删除中断中的某些环境变量后,运行正常了
- QtCreator每次远程部署有可能都删除原来的环境变量,重新配置。
//有问题的环境变量
QT_QUICK_BACKEND=software
QT_GSTREAMER_WINDOW_VIDEOSINK=waylandsink
//删除这两个环境变量
unset QT_QUICK_BACKEND
unset QT_GSTREAMER_WINDOW_VIDEOSINK
//我的开发板环境变量设置的默认位置
/etc/profile.d/qtdeclarative.sh(QT_QUICK_BACKEND)
/etc/profile.d/qtmultimedia.sh(QT_GSTREAMER_WINDOW_VIDEOSINK)