QT6.4配置FFmpeg后端实现Windows下QML播放RTSP流求助
Windows下QML应用播放RTSP流的完整配置方案
问题说明
现有QML代码在Linux端依赖Qt默认的GStreamer后端可正常播放RTSP流,但Windows平台默认的Windows Media Foundation(WMF)不支持RTSP协议及多数流媒体编解码格式。Qt 6.4及以上版本提供了FFmpeg后端预览功能,需通过编译Qt时集成FFmpeg才能启用,仅设置QT_MEDIA_BACKEND环境变量无法解决问题。
附Linux下可运行的QML代码:
import QtQuick import QtMultimedia import QtQml Window { width: 640 height: 480 visible: true title: qsTr("Hello World") color: "#000000" Video { id: stream anchors.fill: parent focus: true source: "MY URL" opacity: 1.0 fillMode: Image.Stretch muted: true Timer { interval: 300000; running: true; repeat: true onTriggered: { console.log("Log: Refresh") stream.stop() stream.source="MY URL" stream.play() } } onErrorChanged: { console.log("VIDEO ERROR") stream.stop() stream.source="MY URL" stream.play() } Text { id: text1 width: 73 height: 18 color: "#ffffff" text: qsTr("Audio: False") anchors.left: parent.left anchors.top: parent.top font.pixelSize: 15 anchors.leftMargin: 0 anchors.topMargin: 0 } Keys.onPressed: (event)=> { if(event.key === Qt.Key_M) { stream.play() if(text1.text === "Audio: True") { text1.text = "Audio: False" stream.muted = true } else if (text1.text === "Audio: False") { text1.text = "Audio: True" stream.muted = false } } } } // Component.onCompleted: { // stream.play() // } }
详细配置步骤
1. 准备FFmpeg依赖库
- 下载与目标Qt架构匹配的预编译FFmpeg库(建议x64版本),需包含头文件(
include目录)和动态库(lib目录下的.lib和.dll文件) - 将FFmpeg文件整理到固定路径,比如
D:\dev\ffmpeg,确保目录结构为:ffmpeg/ ├─ include/ │ ├─ avcodec/ │ ├─ avformat/ │ └─ ...(其他FFmpeg头文件目录) └─ lib/ ├─ avcodec.lib ├─ avformat.lib └─ ...(其他FFmpeg库文件)
2. 编译集成FFmpeg的Qt版本
下载Qt 6.4及以上版本的源码包,解压到本地路径
打开对应架构的Qt命令提示符(比如
Qt 6.4.0 for Desktop (MSVC 2019 64-bit)),进入Qt源码根目录执行配置命令,指定FFmpeg路径并禁用WMF后端:
configure -prefix D:\Qt\6.4.0\msvc2019_64_ffmpeg ^ -release -shared -opensource -confirm-license ^ -platform win32-msvc ^ -no-wmf-backend ^ -ffmpeg D:\dev\ffmpeg ^ -qt-libpng -qt-libjpeg -qt-zlib -qt-pcre -qt-freetype -qt-harfbuzz参数说明:
-prefix:指定编译后Qt的安装路径,避免覆盖原有Qt版本-no-wmf-backend:禁用默认的WMF媒体后端-ffmpeg:指定FFmpeg的根目录路径
执行编译和安装:
nmake nmake install编译过程耗时较长,需耐心等待
3. 项目配置
- 打开Qt Creator,添加新的Kit,选择刚编译好的Qt版本(
D:\Qt\6.4.0\msvc2019_64_ffmpeg) - 将项目切换到该Kit,确保
.pro文件中包含:
(CMake项目需在QT += multimediaCMakeLists.txt中添加find_package(Qt6 REQUIRED COMPONENTS Multimedia)并链接目标)
4. 运行时环境配置
- 将FFmpeg目录下的所有
.dll文件复制到应用程序的输出目录(与.exe文件同目录) - 设置媒体后端环境变量,可通过两种方式:
- 系统环境变量:添加
QT_MEDIA_BACKEND=ffmpeg - 代码中设置(推荐,避免依赖系统配置):
#include <QGuiApplication> #include <QQmlApplicationEngine> int main(int argc, char *argv[]) { // 强制使用FFmpeg后端 qputenv("QT_MEDIA_BACKEND", "ffmpeg"); QGuiApplication app(argc, argv); QQmlApplicationEngine engine; const QUrl url(u"qrc:/main.qml"_qs); QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl) { if (!obj && url == objUrl) QCoreApplication::exit(-1); }, Qt::QueuedConnection); engine.load(url); return app.exec(); }
- 系统环境变量:添加
5. 验证运行
将QML代码中source的MY URL替换为实际RTSP地址,运行项目即可播放RTSP流。若出现编解码问题,需确保FFmpeg库支持对应格式的编解码。
内容的提问来源于stack exchange,提问作者sethsource
相关产品推荐
相关产品推荐

