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

QT6中MediaRecorder录制视频的文件名与保存路径设置问题

解决QT6 QML中MediaRecorder视频保存路径与文件名的问题

问题原因

在Windows系统下直接给MediaRecorder.outputLocation设置字符串格式的完整路径时,QT的路径解析可能出现偏差,导致系统误将整个路径字符串识别为文件名,而非正确解析目录与文件名的组合。这通常是因为字符串路径的转义处理或类型不匹配导致的。

解决方案

  1. 使用Url类型指定路径:outputLocation的属性类型是url,直接传入字符串可能引发解析问题,应使用url()函数将路径转为正确的Url类型。
  2. 使用正斜杠作为路径分隔符:Windows系统支持正斜杠作为路径分隔符,避免双反斜杠的转义麻烦。
  3. 确保目标目录存在:如果保存目录不存在,MediaRecorder无法创建文件,会导致录制失败,需提前创建目录(可手动或通过代码处理)。
  4. 动态生成文件名(可选):为避免覆盖已有文件,可通过JS生成带时间戳的唯一文件名。

修改后的完整代码

import QtQuick 6.2
import QtMultimedia
import recordcamera

Window {
    width: 800
    height: 600
    visible: false
    title: "recordcamera"

    // 定义保存目录与文件名
    property string saveDirectory: "D:/recordcamera/build/Desktop_Qt_6_6_3_MSVC2019_64bit-Release/"
    // 生成带时间戳的文件名,避免覆盖
    property string videoFileName: "recording_" + new Date().toISOString().replace(/[:.]/g, "-") + ".mp4"

    MediaDevices {
        id: mediaDevices
    }

    Component.onCompleted: {
        recorder.record();
    }

    Component.onDestruction: {
        recorder.stop();
    }

    CaptureSession {
        id: captureSession
        camera: Camera {
            id: camera
            cameraDevice: mediaDevices.defaultVideoInput
            focusMode: Camera.FocusModeAutoNear
            active: true
            onErrorOccurred: (error, errorString) => {
                console.log("camera error:", errorString, error);
            }
        }
        audioInput: AudioInput {}
        recorder: MediaRecorder {
            id: recorder
            onErrorOccurred: (error, errorString) => {
                console.log("recorder error:", errorString, error);
            }
            quality: MediaRecorder.NormalQuality
            // 使用url()指定完整路径,确保正确解析目录与文件名
            outputLocation: url(saveDirectory + videoFileName)
        }
        videoOutput: videoOutput
    }

    VideoOutput {
        id: videoOutput
        anchors.fill: parent
        fillMode: Image.Stretch
    }
}

额外说明

  • 若需要在代码中自动创建目录,可引入Qt.labs.folderlistmodel模块,通过Folder类型检查并创建目录:
    import Qt.labs.folderlistmodel 6.2
    
    Component.onCompleted: {
        let folder = Folder {
            url: saveDirectory
        }
        if (!folder.exists) {
            folder.createDirectory();
        }
        recorder.record();
    }
    
  • 确保你的QT项目已正确配置多媒体模块,并且Windows下的视频编码组件正常(QT6默认支持的编码格式可能需要额外的插件,若录制失败可检查编码器是否可用)。

内容的提问来源于stack exchange,提问作者KaiAkiho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:13:18