本页内容

MediaRecorder QML Type

用于对在CaptureSession 中生成的媒体进行编码和录制。更多内容...

Import Statement: import QtMultimedia
In C++: QMediaRecorder

属性

信号

方法

详细说明

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

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

视频编码和录制的性能受硬件、操作系统、已安装的图形驱动程序以及输入视频格式的限制。 如果Camera 、ScreenCapture 或WindowCapture 生成的视频帧速度快于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 、AudioInput 以及ImageCapture 。

属性文档

actualLocation : url [read-only]

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

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

  • 如果 `outputLocation ` 为空、是一个目录或是一个没有扩展名的文件,则记录器会根据所选的媒体格式和系统 MIME 类型生成相应的扩展名。
  • 如果outputLocation 是一个目录,则录制器会在其中生成一个新文件名。
  • 如果 `outputLocation ` 为空、是一个目录或是一个没有扩展名的文件,则记录器会根据所选的媒体格式和系统 MIME 类型生成一个适当的扩展名。如果 ` ` 是一个目录,则记录器会在该目录中生成一个新的文件名。
  • 记录器会在输出 `recorderStateChanged(RecordingState)` 之前生成实际位置。

audioBitRate : int [since 6.6]

该属性存储压缩音频流的比特率,单位为比特/秒。

该属性自 Qt 6.6 起引入。

audioChannelCount : int [since 6.6]

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

该属性于 Qt 6.6 版本中引入。

audioSampleRate : int [since 6.6]

该属性存储音频采样率(单位:赫兹)。

该属性在 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 属性的说明。

另请参阅 actualLocation 和errorOccurred()。

quality : enumeration

列举质量编码级别。

常量值
MediaRecorder.VeryLowQuality
MediaRecorder.LowQuality
MediaRecorder.NormalQuality
MediaRecorder.HighQuality
MediaRecorder.VeryHighQuality

recorderState : enumeration [read-only]

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

该状态属性代表用户请求,并在调用record()、pause() 或stop() 时同步更新。当录制失败时,RecorderState 也可能异步发生变化。

常量描述
MediaRecorder.StoppedState录制器未处于活动状态。
MediaRecorder.RecordingState已请求录制。
MediaRecorder.PausedState记录器处于暂停状态。

videoBitRate : int [since 6.6]

该属性以比特/秒为单位存储压缩视频流的比特率。

该属性自 Qt 6.6 起引入。

videoFrameRate : real [since 6.6]

该属性存储编码时使用的视频帧率。

如果将此属性设置为正帧率,MediaRecorder 将尝试以该帧率进行编码。如果视频源和编码器的帧率不同,为了达到目标帧率,源视频中的帧可能会被丢弃或重复。

如果保留默认值(-1)或设置为其他非正值,MediaRecorder 将根据视频源和编解码器的限制尝试做出最佳选择。

该属性在 Qt 6.6 中引入。

videoResolution : Size [since 6.6]

该属性存储编码后视频的分辨率。

将 Size 属性设置为空,可让录制器根据视频源提供的信息和编解码器的限制,自动选择最佳分辨率。

该属性自 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 。

注意:在 移动设备上 ,录制将按照调用 record 时的设备方向进行,并在录制期间锁定该方向。为避免用户界面出现异常,建议在录制过程中使用 Window 的 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.