PySide6.QtMultimedia.QMediaRecorder

class QMediaRecorder

QMediaRecorder 类用于编码和录制捕获会话。更多

PySide6.QtMultimedia.QMediaRecorder 的继承图

概要

属性

方法

插槽

信号

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

使用 QMediaRecorder 类来编码和记录在 QMediaCaptureSession 中生成的媒体。你可以生成:

要录制媒体,请将生成器连接到相应的媒体捕获会话。

视频编码和录制的性能受硬件、操作系统、安装的图形驱动程序和输入视频格式的限制。如果QCameraQScreenCaptureQWindowCapture生成视频帧的速度快于QMediaRecorder能够编码和记录的速度,记录器可能会丢弃一些帧。如果输入帧分辨率较高,例如4K,并且硬件加速编码不可用,这种情况很可能发生。如果您通过QVideoFrameInput生成输入视频,当达到此限制并且内部帧队列已满时,方法QVideoFrameInput::sendVideoFrame将不执行任何操作并返回false。依赖信号QVideoFrameInput::readyToSendVideoFrame来了解记录器何时准备好再次接收新帧。如果您无法更改视频帧生成速率并且不希望丢弃帧,我们建议在QVideoFrameInput之上实现您自己的帧队列,同时考虑硬件的内存限制。

session = QMediaCaptureSession()
audioInput = QAudioInput()
session.setAudioInput(input)
recorder = QMediaRecorder()
session.setRecorder(recorder)
recorder.setQuality(QMediaRecorder.HighQuality)
recorder.setOutputLocation(QUrl.fromLocalFile("test.mp3"))
recorder.record()
class Quality

枚举质量编码级别。

常量

描述

QMediaRecorder.非常低质量

QMediaRecorder.低质量

QMediaRecorder.NormalQuality

QMediaRecorder.高质量

QMediaRecorder.非常高质量

在版本6.1中添加。

class EncodingMode

枚举编码模式。

常量

描述

QMediaRecorder.ConstantQualityEncoding

编码将旨在保持恒定质量,调整比特率以适应。

QMediaRecorder.ConstantBitRateEncoding

编码将使用恒定比特率,调整质量以适应。

QMediaRecorder.AverageBitRateEncoding

编码将尝试保持平均比特率设置,但会根据需要使用更多或更少。

QMediaRecorder.TwoPassEncoding

媒体将首先被处理以确定其特征,然后第二次处理,为需要它的区域分配更多的比特。

在版本6.1中添加。

class RecorderState

常量

描述

QMediaRecorder.StoppedState

录音器未激活。

QMediaRecorder.RecordingState

请求录制。

QMediaRecorder.PausedState

录音机已暂停。

在版本6.1中添加。

class Error

常量

描述

QMediaRecorder.NoError

没有错误。

QMediaRecorder.ResourceError

设备未准备好或不可用。

QMediaRecorder.FormatError

当前格式不受支持。

QMediaRecorder.OutOfSpaceError

设备上没有剩余空间。

QMediaRecorder.LocationNotWritable

输出位置不可写。

在版本6.1中添加。

注意

当使用from __feature__ import true_property时,属性可以直接使用,否则通过访问器函数使用。

property actualLocationᅟ: QUrl

此属性保存最后媒体内容的实际位置。

当分配了新的outputLocation或非空的outputDevice时,实际位置会被重置。当调用record()并且outputDevicenull或不可写时,记录器会根据以下规则生成实际位置。

  • 如果 outputLocation 为空、是一个目录或没有扩展名的文件,记录器会根据所选的媒体格式和系统 MIME 类型生成适当的扩展名。

  • 如果 outputLocation 是一个目录,记录器会在其中生成一个新的文件名。

  • 如果 outputLocation 为空,录音机将在系统特定的目录中为音频或视频生成一个新的文件名。

  • 记录器在发出recorderStateChanged(RecordingState)之前生成实际位置。

Access functions:
property audioBitRateᅟ: int
Access functions:
property audioChannelCountᅟ: int
Access functions:
property audioSampleRateᅟ: int
Access functions:
property autoStopᅟ: bool

此属性控制当所有媒体输入报告流结束或已被停用时,媒体记录器是否自动停止。

流的结束通过发送一个空的媒体帧来报告,您可以通过QVideoFrameInputQAudioBufferInput显式发送。

视频输入,特别是QCameraQScreenCaptureQWindowCapture,可以通过函数setActive来停用。

默认为 false

QMediaRecorder::autoStop 仅在 FFmpeg 后端支持。

Access functions:
property durationᅟ: int

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

Access functions:
property encodingModeᅟ: QMediaRecorder.EncodingMode
Access functions:
property errorᅟ: QMediaRecorder.Error

返回当前的错误状态。

另请参阅

errorString()

Access functions:
property errorStringᅟ: str

返回描述当前错误状态的字符串。

另请参阅

error()

Access functions:
property mediaFormatᅟ: QMediaFormat

返回录制媒体的格式。

Access functions:
property metaDataᅟ: QMediaMetaData

返回与录音相关的元数据。

Access functions:
property outputLocationᅟ: QUrl

此属性保存媒体内容的目标位置。

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

如果已经为记录器分配了一个可写的outputDevice,则输出位置将被忽略。这种行为在未来可能会改变,因此我们建议只设置一个输出,即outputLocationoutputDevice

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

Access functions:
property qualityᅟ: QMediaRecorder.Quality

返回录音质量。

Access functions:
property recorderStateᅟ: QMediaRecorder.RecorderState

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

state属性表示用户请求,并在record()pause()stop()调用期间同步更改。当录制失败时,Recorder状态也可能异步更改。

Access functions:
property videoBitRateᅟ: int
Access functions:
property videoFrameRateᅟ: float
Access functions:
property videoResolutionᅟ: QSize
Access functions:
__init__([parent=None])
Parameters:

父对象QObject

构建一个媒体记录器。媒体记录器是parent的子对象。

actualLocation()
Return type:

QUrl

属性 actualLocationᅟ 的获取器。

actualLocationChanged(location)
Parameters:

位置QUrl

表示记录的媒体的实际location已更改。通常在开始录制时发出此信号。

属性 actualLocationᅟ 的通知信号。

addMetaData(metaData)
Parameters:

metaDataQMediaMetaData

metaData添加到录制的媒体中。

audioBitRate()
Return type:

整数

返回压缩音频流的比特率,单位为每秒比特。

另请参阅

setAudioBitRate()

属性 audioBitRateᅟ 的获取器。

audioBitRateChanged()

当录音音频比特率发生变化时发出信号。

属性 audioBitRateᅟ 的通知信号。

audioChannelCount()
Return type:

整数

返回音频通道的数量。

另请参阅

setAudioChannelCount()

属性 audioChannelCountᅟ 的获取器。

audioChannelCountChanged()

当录音音频通道数量发生变化时发出信号。

属性 audioChannelCountᅟ 的通知信号。

audioSampleRate()
Return type:

整数

返回音频采样率,单位为Hz。

另请参阅

setAudioSampleRate()

属性 audioSampleRateᅟ 的获取器。

audioSampleRateChanged()

当录音音频采样率发生变化时发出信号。

属性 audioSampleRateᅟ 的通知信号。

autoStop()
Return type:

布尔

另请参阅

setAutoStop()

属性 autoStopᅟ 的获取器。

autoStopChanged()

属性 autoStopᅟ 的通知信号。

captureSession()
Return type:

QMediaCaptureSession

返回媒体捕获会话。

duration()
Return type:

整数

属性 durationᅟ 的获取器。

durationChanged(duration)
Parameters:

duration – int

表示记录的媒体的duration已经改变。

属性 durationᅟ 的通知信号。

encoderSettingsChanged()

当编码器设置更改时发出信号。

encodingMode()
Return type:

EncodingMode

返回编码模式。

属性 encodingModeᅟ 的获取器。

encodingModeChanged()

当编码模式改变时发出信号。

属性 encodingModeᅟ 的通知信号。

error()
Return type:

错误

属性 errorᅟ 的获取器。

errorChanged()

属性 errorᅟ 的通知信号。

errorOccurred(error, errorString)
Parameters:
  • 错误Error

  • errorString – str

表示发生了error,其中errorString包含错误的描述。

errorString()
Return type:

字符串

属性 errorStringᅟ 的获取器。

isAvailable()
Return type:

布尔

如果媒体录制服务准备就绪,则返回true

mediaFormat()
Return type:

QMediaFormat

另请参阅

setMediaFormat()

属性 mediaFormatᅟ 的获取器。

mediaFormatChanged()

属性 mediaFormatᅟ 的通知信号。

metaData()
Return type:

QMediaMetaData

另请参阅

setMetaData()

属性 metaDataᅟ 的获取器。

metaDataChanged()

表示媒体对象的元数据已更改。

如果更改了多个元数据元素,则会发出一次metaDataChanged()。

属性 metaDataᅟ 的通知信号。

outputDevice()
Return type:

QIODevice

返回媒体内容的输出IO设备。

另请参阅

setOutputDevice()

outputLocation()
Return type:

QUrl

另请参阅

setOutputLocation()

属性 outputLocationᅟ 的获取器。

pause()

暂停录制。

记录器状态更改为 PausedState

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

quality()
Return type:

质量

另请参阅

setQuality()

属性 qualityᅟ 的获取器。

qualityChanged()

当录音质量发生变化时发出信号。

属性 qualityᅟ 的通知信号。

record()

开始录制。

虽然记录器状态立即更改为 c{ RecordingState },但录制可能会异步开始。

如果录制失败,error()信号将被发出,录制器状态将重置为QMediaRecorder::StoppedState

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

注意

在移动设备上,录制将在调用record时设备的方向进行,并在录制期间锁定。为了避免用户界面上的伪影,我们建议在录制过程中使用QWindow的contentOrientation属性将用户界面锁定为与录制相同的方向,并在录制完成后再次解锁。

recorderState()
Return type:

RecorderState

返回当前媒体记录器的状态。

另请参阅

RecorderState

属性 recorderStateᅟ 的获取器。

recorderStateChanged(state)
Parameters:

状态RecorderState

表示媒体记录器的state已更改。

属性 recorderStateᅟ 的通知信号。

setAudioBitRate(bitRate)
Parameters:

bitRate – int

设置音频的bitRate,单位为每秒比特数。

另请参阅

audioBitRate()

属性 audioBitRateᅟ 的设置器。

setAudioChannelCount(channels)
Parameters:

channels – 整数

设置音频channels的数量。

值为-1表示记录器应根据音频源可用的内容和编解码器的限制做出最佳选择。

另请参阅

audioChannelCount()

属性 audioChannelCountᅟ 的设置器。

setAudioSampleRate(sampleRate)
Parameters:

sampleRate – int

设置音频的sampleRate,单位为Hz。

值为-1表示记录器应根据音频源可用的内容和编解码器的限制做出最佳选择。

另请参阅

audioSampleRate()

属性 audioSampleRateᅟ 的设置器。

setAutoStop(autoStop)
Parameters:

autoStop – 布尔值

另请参阅

autoStop()

属性 autoStopᅟ 的设置器。

setEncodingMode(mode)
Parameters:

modeEncodingMode

设置编码mode设置。

如果设置了ConstantQualityEncoding,则使用质量编码参数并忽略比特率,否则使用比特率。

属性 encodingModeᅟ 的设置器。

setMediaFormat(format)
Parameters:

格式QMediaFormat

另请参阅

mediaFormat()

属性 mediaFormatᅟ 的设置器。

setMetaData(metaData)
Parameters:

metaDataQMediaMetaData

将元数据设置为 metaData

注意

为确保元数据设置正确,应在开始录制之前进行设置。一旦录制开始,任何设置的元数据将附加到下一次录制中。

另请参阅

metaData()

属性 metaDataᅟ 的设置器。

setOutputDevice(device)
Parameters:

设备QIODevice

设置媒体内容的输出IO设备。

在开始录制之前,device 必须已以 WriteOnly 或 ReadWrite 模式打开。

媒体记录器不拥有指定的device的所有权。如果已经开始录制,设备必须保持活动状态并保持打开,直到发出信号recorderStateChanged(StoppedState)

此方法立即重置actualLocation,除非指定的devicenull

如果为记录器分配了可写输出设备,outputLocation 将被忽略,并且在开始记录时不会生成 actualLocation。这种行为在未来可能会改变,因此我们建议只设置一个输出,即 outputLocationoutputDevice

QMediaRecorder::setOutputDevice 仅在 FFmpeg 后端支持。

setOutputLocation(location)
Parameters:

位置QUrl

另请参阅

outputLocation()

属性 outputLocationᅟ 的设置器。

setQuality(quality)
Parameters:

质量Quality

另请参阅

quality()

属性 qualityᅟ 的设置器。

setVideoBitRate(bitRate)
Parameters:

bitRate – int

设置视频的bitRate,单位为每秒比特。

另请参阅

videoBitRate()

属性 videoBitRateᅟ 的设置器。

setVideoFrameRate(frameRate)
Parameters:

frameRate – 浮点数

设置视频的frameRate

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

另请参阅

videoFrameRate()

属性 videoFrameRateᅟ 的设置器。

setVideoResolution(size)
Parameters:

大小QSize

设置编码视频的分辨率为 size

传递一个空的QSize,让记录器根据视频源可用的内容和编解码器的限制选择最佳分辨率。

另请参阅

videoResolution()

属性 videoResolutionᅟ 的设置器。

setVideoResolution(width, height)
Parameters:
  • width – int

  • height – int

设置编码视频分辨率的widthheight

这是一个重载函数。

stop()

记录器将停止录制。然而,处理待处理的视频和音频数据可能仍需要一些时间。一旦媒体记录器的状态变为StoppedState,录制就完成了。

videoBitRate()
Return type:

整数

返回压缩视频流的比特率,单位为每秒比特。

另请参阅

setVideoBitRate()

属性 videoBitRateᅟ 的获取器。

videoBitRateChanged()

当录制视频的比特率发生变化时发出信号。

属性 videoBitRateᅟ 的通知信号。

videoFrameRate()
Return type:

浮点数

返回视频帧率。

另请参阅

setVideoFrameRate()

获取属性 videoFrameRateᅟ 的Getter。

videoFrameRateChanged()

当录制视频帧率变化时发出信号。

属性 videoFrameRateᅟ 的通知信号。

videoResolution()
Return type:

QSize

返回编码视频的分辨率。

另请参阅

setVideoResolution()

属性 videoResolutionᅟ 的获取器。

videoResolutionChanged()

当视频录制分辨率发生变化时发出信号。

属性 videoResolutionᅟ 的通知信号。