在本页

MediaRecorder QML Type

用于编码和记录在CaptureSession 中生成的媒体...更多...

Import Statement: import QtMultimedia
In C++: QMediaRecorder

属性

信号

方法

详细说明

CaptureSession 中使用 MediaRecorder 元素进行编码和录制:

  • 从音频接口(如麦克风或线路输入)采集的音频。
  • 从摄像头、屏幕或应用程序窗口捕获的视频。

视频编码和录制的性能受硬件、操作系统、安装的图形驱动程序和输入视频格式的限制。如果CameraScreenCaptureWindowCapture 生成视频帧的速度快于MediaRecorder 的编码和录制速度,录制器可能会丢弃某些帧。如果输入帧的分辨率较高,例如 4K,且无法使用硬件加速编码,则可能出现这种情况。

下面的代码显示了一个简单的捕获会话,其中包含一个使用默认摄像机和默认音频输入的 MediaRecorder。

CaptureSession {
    id: captureSession
    camera: Camera {
        id: camera
        active: true
    }
    audioInput: AudioInput {}
    recorder: MediaRecorder {
        id: recorder
    }
}

下面的代码显示了如何开始和停止录制。

CameraButton {
    text: "Record"
    visible: recorder.recorderState !== MediaRecorder.RecordingState
    onClicked: recorder.record()
}

CameraButton {
    id: stopButton
    text: "Stop"
    visible: recorder.recorderState === MediaRecorder.RecordingState
    onClicked: recorder.stop()
}

另请参阅 CaptureSession,Camera,ScreenCapture,WindowCapture,AudioInputImageCapture

属性文档

actualLocation : url [read-only]

上一个媒体内容的实际位置。

当分配新的outputLocation 时,实际位置将被重置。调用record() 时,记录盒根据以下规则生成实际位置。

  • 如果outputLocation 为空、目录或无扩展名的文件,记录盒会根据所选媒体格式和系统 MIME 类型生成适当的扩展名。
  • 如果outputLocation 是一个目录,记录器会在其中生成一个新的文件名。
  • 如果outputLocation 为空,录音机会在系统特定的音频或视频目录中生成一个新文件名。
  • 记录器在发出recorderStateChanged(RecordingState) 之前会生成实际位置。

audioBitRate : int [since 6.6]

该属性保存压缩音频流的比特率(比特/秒)。

该属性在 Qt 6.6 中引入。

audioChannelCount : int [since 6.6]

该属性保存音频通道的数量。

该属性在 Qt 6.6 中引入。

audioSampleRate : int [since 6.6]

该属性以 Hz 为单位保存音频采样率。

该属性在 Qt 6.6 中引入。

duration : qint64 [read-only]

该属性保存以毫秒为单位的记录媒体持续时间。

encodingMode : enumeration [since 6.6]

该属性用于保存编码模式。

该属性在 Qt 6.6 中引入。

另请参阅 QMediaRecorder::EncodingMode

error : enumeration [read-only]

该属性保存当前媒体记录器的错误状态。

常量说明
MediaRecorder.NoError未处于出错状态。
MediaRecorder.ResourceError系统资源不足
MediaRecorder.FormatError不支持当前格式。
MediaRecorder.OutOfSpaceError设备无剩余空间。
MediaRecorder.LocationNotWriteable输出位置不可写。

errorString : string [read-only]

该属性包含一个描述当前错误状态的字符串。

另请参见 error

mediaFormat : mediaFormat

该属性用于保存记录仪的当前 MediaFormat(媒体格式)。

metaData : mediaMetaData

此属性保存与录音相关的元数据。

当录音开始时,分配的任何元数据都将附加到该录音上。

注意: 请在开始录音前分配元数据,以确保分配正确。

另请参阅 mediaMetaData

outputLocation : url

媒体内容的目标位置。

设置位置可能会失败,例如当服务只支持本地文件系统位置,但传递的是网络 URL 时。如果操作失败,就会发出errorOccurred() 信号。

输出位置可以是空、目录或文件。目录或文件的路径可以是相对路径,也可以是绝对路径。record() 方法会根据指定的输出位置和系统特定设置生成实际位置。详情请参阅actualLocation 属性说明。

另请参阅 actualLocationerrorOccurred()。

quality : enumeration

枚举质量编码级别。

常数
MediaRecorder.VeryLowQuality
MediaRecorder.LowQuality
MediaRecorder.NormalQuality
MediaRecorder.HighQuality
MediaRecorder.VeryHighQuality

recorderState : enumeration [read-only]

该属性保存当前媒体记录器的状态。

状态属性代表用户请求,并在record(),pause() 或stop() 调用期间同步更改。录制失败时,RecorderSstate 也会异步更改。

常量描述
MediaRecorder.StoppedState记录仪未激活。
MediaRecorder.RecordingState请求录音。
MediaRecorder.PausedState记录器暂停。

videoBitRate : int [since 6.6]

该属性保存压缩视频流的比特率(比特/秒)。

该属性在 Qt 6.6 中引入。

videoFrameRate : real [since 6.6]

该属性用于保存视频帧频。

值为 0 表示录像机应根据视频源的可用性和编解码器的限制做出最佳选择。

此属性在 Qt 6.6 中引入。

videoResolution : Size [since 6.6]

此属性表示编码视频的分辨率。

如果设置为空,刻录机就会根据视频源的可用分辨率和编解码器的限制选择最佳分辨率。

此属性在 Qt 6.6 中引入。

信号文档

actualLocationChanged(const QUrl &location)

记录介质的实际location 发生变化的信号。

该信号通常在开始录制时发出。

注: 相应的处理程序是onActualLocationChanged

durationChanged(qint64 duration)

记录介质duration 已更改的信号。

注: 相应的处理程序是onDurationChanged

errorOccurred(Error error, const QString &errorString)

表示error 发生了错误。

errorString 包含错误描述。

注: 相应的处理程序是onErrorOccurred

metaDataChanged()

媒体对象的元数据已更改的信号。

如果多个元数据元素发生变化,则会发出一次 metaDataChanged() 信号。

注: 相应的处理程序是onMetaDataChanged

recorderStateChanged(RecorderState state)

媒体记录器state 已更改的信号。

注: 相应的处理程序是onRecorderStateChanged

方法文档

void pause()

暂停录音。

记录仪状态将更改为QMediaRecorder.PausedState。

根据平台的不同,可能不支持暂停录音。在这种情况下,记录仪状态保持不变。

void record()

开始录制。

虽然记录器状态会立即更改为MediaRecorder.RecordingState ,但记录可能会异步开始。

如果录制失败,将发出 error() 信号,同时记录器状态重置回QMediaRecorder.StoppedState

此方法根据生成规则更新actualLocation

注: 在移动设备上,录制将以调用录制时的设备方向进行,并在录制期间被锁定。为避免在用户界面上出现人工痕迹,我们建议在录制过程中使用窗口的 contentOrientation 属性将用户界面锁定为同一方向,并在录制完成后再次解锁。

void stop()

停止录音。

记录盒将停止录制。但处理待处理的视频和音频数据可能仍需要一些时间。一旦媒体记录器的状态变为QMediaRecorder::StoppedState ,记录即告完成。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.