You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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文件中包含:
    QT += multimedia
    
    (CMake项目需在CMakeLists.txt中添加find_package(Qt6 REQUIRED COMPONENTS Multimedia)并链接目标)

4. 运行时环境配置

  • 将FFmpeg目录下的所有.dll文件复制到应用程序的输出目录(与.exe文件同目录)
  • 设置媒体后端环境变量,可通过两种方式:
    1. 系统环境变量:添加QT_MEDIA_BACKEND=ffmpeg
    2. 代码中设置(推荐,避免依赖系统配置):
      #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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:20:30