# 音视频录制 (/zh-CN/api-reference/rtc/unreal-cpp/recording)

> For AI agents: see the complete documentation index at [llms.txt](/llms.txt).

<a id="toc_recording"></a>

<a id="api_irtcengine_createmediarecorder"></a>

<a id="ariaid-title2"></a>

## createMediaRecorder [#createmediarecorder]

创建音视频录制对象。

<a id="api_irtcengine_createmediarecorder__prototype"></a>

```cpp
virtual agora_refptr<IMediaRecorder> createMediaRecorder(const RecorderStreamInfo& info) = 0;
```

<a id="api_irtcengine_createmediarecorder__detailed_desc"></a>

### 详情 [#详情]

在开始音视频流录制前，你需要调用该方法创建一个音视频录制对象。SDK 支持录制本地或远端用户的多个音视频流，你可以多次调用该方法创建录制对象，并通过 info 参数指定需要录制的频道名称和发流的用户 ID。

成功创建后，你需要调用 [setMediaRecorderObserver](/zh-CN/api-reference/rtc/unreal-cpp/recording#api_imediarecorder_setmediarecorderobserver) 注册录制对象的观测器来监听录制的相关回调，然后再调用 [startRecording](/zh-CN/api-reference/rtc/unreal-cpp/recording#api_imediarecorder_startrecording) 开始录制。

<a id="api_irtcengine_createmediarecorder__parameters"></a>

### 参数 [#参数]

<ParameterList>
<a id="info"></a>
<Parameter name="info">

需要录制的音视频流相关信息，详见 [RecorderStreamInfo](/zh-CN/api-reference/rtc/unreal-cpp/class-recorderstreaminfo)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_createmediarecorder__return_values"></a>

### 返回值 [#返回值]

- 方法调用成功：返回一个 [IMediaRecorder](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_imediarecorder) 对象。
- 方法调用失败：返回空指针。

### 所属接口类 [#所属接口类]

- [IRtcEngine](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_destroymediarecorder"></a>

<a id="ariaid-title3"></a>

## destroyMediaRecorder [#destroymediarecorder]

销毁音视频录制对象。

<a id="api_irtcengine_destroymediarecorder__prototype"></a>

```cpp
virtual int destroyMediaRecorder(agora_refptr<IMediaRecorder> mediaRecorder) = 0;
```

<a id="api_irtcengine_destroymediarecorder__detailed_desc"></a>

### 详情 [#详情-1]

当你不需要再录制音视频流时，可以调用该方法销毁对应的音视频录制对象。如果你正在录制，请先调用 [stopRecording](/zh-CN/api-reference/rtc/unreal-cpp/recording#api_imediarecorder_stoprecording) 停止录制，再调用该方法来销毁音视频录制对象。

<a id="api_irtcengine_destroymediarecorder__parameters"></a>

### 参数 [#参数-1]

<ParameterList>
<a id="mediarecorder"></a>
<Parameter name="mediaRecorder">

待销毁的 [IMediaRecorder](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_imediarecorder) 对象。

</Parameter>
</ParameterList>

<a id="api_irtcengine_destroymediarecorder__return_values"></a>

### 返回值 [#返回值-1]

- 0: 方法调用成功。
- &lt; 0: 方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

<a id="api_imediarecorder_setmediarecorderobserver"></a>

<a id="ariaid-title4"></a>

## setMediaRecorderObserver [#setmediarecorderobserver]

注册 [IMediaRecorderObserver](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_imediarecorderobserver) 观测器。

<a id="api_imediarecorder_setmediarecorderobserver__prototype"></a>

```cpp
virtual int setMediaRecorderObserver(media::IMediaRecorderObserver* callback) = 0;
```

<a id="api_imediarecorder_setmediarecorderobserver__detailed_desc"></a>

### 详情 [#详情-2]

该方法用于设置音视频录制的回调，以便在录制过程中向 App 通知音视频流的录制状态和信息。

调用该方法前请确保：

- 已创建并初始化 [IRtcEngine](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_irtcengine) 对象。
- 已通过 [createMediaRecorder](/zh-CN/api-reference/rtc/unreal-cpp/recording#api_irtcengine_createmediarecorder) 创建音视频录制对象。

<a id="api_imediarecorder_setmediarecorderobserver__parameters"></a>

### 参数 [#参数-2]

<ParameterList>
<a id="callback"></a>
<Parameter name="callback">

音视频流录制回调，详见 [IMediaRecorderObserver](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_imediarecorderobserver)。

</Parameter>
</ParameterList>

<a id="api_imediarecorder_setmediarecorderobserver__return_values"></a>

### 返回值 [#返回值-2]

- 0: 方法调用成功。
- &lt; 0: 方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-1]

- [IMediaRecorder](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_imediarecorder)

<a id="api_irtcengine_startaudiorecording"></a>

<a id="ariaid-title5"></a>

## startAudioRecording [1/3] [#startaudiorecording-13]

开始客户端录音。

<a id="api_irtcengine_startaudiorecording__prototype"></a>

```cpp
virtual int startAudioRecording(const char* filePath, AUDIO_RECORDING_QUALITY_TYPE quality) = 0;
```

<a id="api_irtcengine_startaudiorecording__detailed_desc"></a>

### 详情 [#详情-3]

:::caution
注意： 调用该方法时，默认的录音采样率为 32 kHz，不可修改。
:::

SDK 支持通话过程中在客户端进行录音。该方法录制频道内所有用户的音频，并生成一个包含所有用户声音的录音文件，录音文件仅支持下列格式：

- `.wav`: 文件大，音质保真度高；
- `.aac`: 文件小，有一定的音质保真度损失。

请确保 App 里指定的目录存在且可写。该接口需在 [joinChannel [2/2]](/zh-CN/api-reference/rtc/unreal-cpp/channel#api_irtcengine_joinchannel2) 之后调用。如果调用 [leaveChannel [2/2]](/zh-CN/api-reference/rtc/unreal-cpp/channel#api_irtcengine_leavechannel2) 时还在录音，录音会自动停止。

<a id="api_irtcengine_startaudiorecording__parameters"></a>

### 参数 [#参数-3]

<ParameterList>
<a id="filepath"></a>
<Parameter name="filePath">

录音文件在本地保存的绝对路径，需精确到文件名及格式。例如：`C:\music\audio.aac`。

<a id="api_irtcengine_startaudiorecording__d112e51"></a>

:::caution
注意：

请确保你指定的路径存在并且可写。
:::

</Parameter>
<a id="quality"></a>
<Parameter name="quality">

录音质量。详见 [AUDIO_RECORDING_QUALITY_TYPE](/zh-CN/api-reference/rtc/unreal-cpp/enum-audiorecordingqualitytype)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_startaudiorecording__return_values"></a>

### 返回值 [#返回值-3]

- 0: 方法调用成功。
- &lt; 0: 方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

<a id="api_irtcengine_startaudiorecording2"></a>

<a id="ariaid-title6"></a>

## startAudioRecording [2/3] [#startaudiorecording-23]

开始客户端录音并设置录音采样率。

<a id="api_irtcengine_startaudiorecording2__prototype"></a>

```cpp
virtual int startAudioRecording(const char* filePath,
    int sampleRate,
    AUDIO_RECORDING_QUALITY_TYPE quality) = 0;
```

<a id="api_irtcengine_startaudiorecording2__detailed_desc"></a>

### 详情 [#详情-4]

SDK 支持通话过程中在客户端进行录音。调用该方法后，你可以录制频道内所有用户的音频，并得到一个包含所有用户声音的录音文件。录音文件仅支持下列格式：

- .wav: 文件大，音质保真度较高。
- .aac: 文件小，音质保真度较低。

:::caution
注意：

- 请确保你在该方法中指定的路径存在并且可写。
- 该接口需在 joinChannel [2/2] 之后调用。如果调用 [leaveChannel [2/2]](/zh-CN/api-reference/rtc/unreal-cpp/channel#api_irtcengine_leavechannel2) 时还在录音，录音会自动停止。
- 为保证录音效果，当 sampleRate 设为 44.1 kHz 或 48 kHz 时，建议将 quality 设为 AUDIO_RECORDING_QUALITY_MEDIUM 或 AUDIO_RECORDING_QUALITY_HIGH。
:::

<a id="api_irtcengine_startaudiorecording2__parameters"></a>

### 参数 [#参数-4]

<ParameterList>
<a id="filepath-1"></a>
<Parameter name="filePath">

录音文件在本地保存的绝对路径，需精确到文件名及格式。例如：`C:\music\audio.aac`。

<a id="api_irtcengine_startaudiorecording2__d112e51"></a>

:::caution
注意：

请确保你指定的路径存在并且可写。
:::

</Parameter>
<a id="samplerate"></a>
<Parameter name="sampleRate">

录音采样率（Hz），可以设为以下值：

- 16000
- 32000（默认）
- 44100
- 48000

</Parameter>
<a id="quality-1"></a>
<Parameter name="quality">

录音音质。详见 [AUDIO_RECORDING_QUALITY_TYPE](/zh-CN/api-reference/rtc/unreal-cpp/enum-audiorecordingqualitytype) 。

</Parameter>
</ParameterList>

<a id="api_irtcengine_startaudiorecording2__return_values"></a>

### 返回值 [#返回值-4]

- 0: 方法调用成功。
- &lt; 0: 方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

<a id="api_irtcengine_startaudiorecording3"></a>

<a id="ariaid-title7"></a>

## startAudioRecording [3/3] [#startaudiorecording-33]

开始客户端录音并进行录音配置。

<a id="api_irtcengine_startaudiorecording3__prototype"></a>

```cpp
virtual int startAudioRecording(const AudioFileRecordingConfig& config) = 0;
```

<a id="api_irtcengine_startaudiorecording3__detailed_desc"></a>

SDK 支持通话过程中在客户端进行录音。调用该方法后，你可以录制频道内用户的音频，并得到一个录音文件。录音文件仅支持下列格式：

- WAV: 音质保真度较高，文件较大。例如，采样率为 32000 Hz，录音时长为 10 分钟的文件大小约为 73 M。
- AAC: 音质保真度较低，文件较小。例如，采样率为 32000 Hz，录音音质为 AUDIO_RECORDING_QUALITY_MEDIUM，录音时长为 10 分钟的文件大小约为 2 M。

用户离开频道后，录音会自动停止。

<a id="api_irtcengine_startaudiorecording3__timing"></a>

### 调用时机 [#调用时机]

该方法需要在加入频道后调用。

<a id="api_irtcengine_startaudiorecording3__restriction"></a>

### 调用限制 [#调用限制]

无。

<a id="api_irtcengine_startaudiorecording3__parameters"></a>

### 参数 [#参数-5]

<ParameterList>
<a id="config"></a>
<Parameter name="config">

录音配置。详见 [AudioRecordingConfiguration](/zh-CN/api-reference/rtc/unreal-cpp/class-audiorecordingconfiguration)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_startaudiorecording3__return_values"></a>

### 返回值 [#返回值-5]

- 0: 方法调用成功。
- &lt; 0: 方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-2]

- [IRtcEngine](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_irtcengine)

<a id="api_imediarecorder_startrecording"></a>

<a id="ariaid-title8"></a>

## startRecording [#startrecording]

开启音视频流录制。

<a id="api_imediarecorder_startrecording__prototype"></a>

```cpp
virtual int startRecording(const media::MediaRecorderConfiguration& config) = 0;
```

<a id="api_imediarecorder_startrecording__detailed_desc"></a>

### 详情 [#详情-5]

该方法用于开启音视频流录制。声网 SDK 支持同时录制本地及远端用户的音视频流。

在开始录制前请确保：

- 已通过 [createMediaRecorder](/zh-CN/api-reference/rtc/unreal-cpp/recording#api_irtcengine_createmediarecorder) 创建音视频录制对象。
- 已调用 [setMediaRecorderObserver](/zh-CN/api-reference/rtc/unreal-cpp/recording#api_imediarecorder_setmediarecorderobserver) 注册录制对象观测器来监听录制的相关回调。
- 已加入频道。

该方法支持录制如下数据：

- 麦克风采集的、AAC 编码格式的音频。
- 摄像头采集的、H.264 或 H.265 编码格式的视频。

开启音视频流录制后，当视频分辨率在录制过程中发生变化时，SDK 会停止录制；当音频采样率和声道数发生变化时，SDK 会持续录制并生成单个 MP4 录制文件。

仅当检测到可录制的音视频流时，才能成功生成录制文件；如果没有可录制的音视频流，或在录制过程中的音视频流中断超过 5 秒后，SDK 会停止录制，并触发 onRecorderStateChanged(`RECORDER_STATE_ERROR, RECORDER_ERROR_NO_STREAM`) 回调。

:::caution
注意：

- 如果你需要录制的是本地的音视频流，请在开始录制前确保本地用户的角色设为主播。
- 如果你需要录制的是远端用户的音视频流，请在开始录制前确保已经订阅了该用户的音视频流。
:::

<a id="api_imediarecorder_startrecording__parameters"></a>

### 参数 [#参数-6]

<ParameterList>
<a id="config-1"></a>
<Parameter name="config">

音视频流录制配置。详见 [MediaRecorderConfiguration](/zh-CN/api-reference/rtc/unreal-cpp/class-mediarecorderconfiguration)。

</Parameter>
</ParameterList>

<a id="api_imediarecorder_startrecording__return_values"></a>

### 返回值 [#返回值-6]

- 0: 方法调用成功。
- &lt; 0: 方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

  - -2: 参数无效。请确保：

    - 指定的录制文件保存路径正确且可写。
    - 指定的录制文件格式正确。
    - 设置的最大录制时长正确。
  - -4: [IRtcEngine](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_irtcengine) 当前状态不支持该操作。可能因为录制正在进行中或录制出错停止。
  - -7: [IRtcEngine](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_irtcengine) 尚未初始化就调用方法。请确认在调用该方法前已创建 [IMediaRecorder](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_imediarecorder) 对象。

### 所属接口类 [#所属接口类-3]

- [IMediaRecorder](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_imediarecorder)

<a id="api_irtcengine_stopaudiorecording"></a>

<a id="ariaid-title9"></a>

## stopAudioRecording [#stopaudiorecording]

停止客户端录音。

<a id="api_irtcengine_stopaudiorecording__prototype"></a>

```cpp
virtual int stopAudioRecording() = 0;
```

<a id="api_irtcengine_stopaudiorecording__detailed_desc"></a>

<a id="api_irtcengine_stopaudiorecording__return_values"></a>

### 返回值 [#返回值-7]

- 0: 方法调用成功。
- &lt; 0: 方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-4]

- [IRtcEngine](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_irtcengine)

<a id="api_imediarecorder_stoprecording"></a>

<a id="ariaid-title10"></a>

## stopRecording [#stoprecording]

停止音视频流录制。

<a id="api_imediarecorder_stoprecording__prototype"></a>

```cpp
virtual int stopRecording() = 0;
```

<a id="api_imediarecorder_stoprecording__detailed_desc"></a>

### 详情 [#详情-6]

:::caution
注意： 调用 [startRecording](/zh-CN/api-reference/rtc/unreal-cpp/recording#api_imediarecorder_startrecording) 后，如果要停止录制，请调用该方法停止录制；否则，生成的录制文件可能无法正常播放。
:::

<a id="api_imediarecorder_stoprecording__return_values"></a>

### 返回值 [#返回值-8]

- 0: 方法调用成功。
- &lt; 0: 方法调用失败：

  - -7: [IRtcEngine](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_irtcengine) 尚未初始化就调用方法。请确认在调用该方法前已创建 [IMediaRecorder](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_imediarecorder) 对象。

### 所属接口类 [#所属接口类-5]

- [IMediaRecorder](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_imediarecorder)

<a id="callback_imediarecorderobserver_onrecorderinfoupdated"></a>

<a id="ariaid-title11"></a>

## onRecorderInfoUpdated [#onrecorderinfoupdated]

录制信息更新回调。

<a id="callback_imediarecorderobserver_onrecorderinfoupdated__prototype"></a>

```cpp
virtual void onRecorderInfoUpdated(const char* channelId, rtc::uid_t uid, const RecorderInfo& info) = 0;
```

<a id="callback_imediarecorderobserver_onrecorderinfoupdated__detailed_desc"></a>

### 详情 [#详情-7]

成功注册该回调并开启音视频流录制后，SDK 会根据你在 [MediaRecorderConfiguration](/zh-CN/api-reference/rtc/unreal-cpp/class-mediarecorderconfiguration) 中设置的 recorderInfoUpdateInterval 的值周期性触发该回调，报告当前录制文件的文件名、时长和大小。

<a id="callback_imediarecorderobserver_onrecorderinfoupdated__parameters"></a>

### 参数 [#参数-7]

<ParameterList>
<a id="channelid"></a>
<Parameter name="channelId">

频道名称。

</Parameter>
<a id="uid"></a>
<Parameter name="uid">

用户 ID。

</Parameter>
<a id="info-1"></a>
<Parameter name="info">

录制文件信息。详见 [RecorderInfo](/zh-CN/api-reference/rtc/unreal-cpp/class-recorderinfo)。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-6]

- [IMediaRecorderObserver](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_imediarecorderobserver)

<a id="callback_imediarecorderobserver_onrecorderstatechanged"></a>

<a id="ariaid-title12"></a>

## onRecorderStateChanged [#onrecorderstatechanged]

录制状态发生改变回调。

<a id="callback_imediarecorderobserver_onrecorderstatechanged__prototype"></a>

```cpp
virtual void onRecorderStateChanged(const char* channelId, rtc::uid_t uid, RecorderState state, RecorderReasonCode reason) = 0;
```

<a id="callback_imediarecorderobserver_onrecorderstatechanged__detailed_desc"></a>

### 详情 [#详情-8]

音视频流录制状态发生改变时，SDK 会触发该回调，报告当前的录制状态和引起录制状态改变的原因。

<a id="callback_imediarecorderobserver_onrecorderstatechanged__parameters"></a>

### 参数 [#参数-8]

<ParameterList>
<a id="channelid-1"></a>
<Parameter name="channelId">

频道名称。

</Parameter>
<a id="uid-1"></a>
<Parameter name="uid">

用户 ID。

</Parameter>
<a id="state"></a>
<Parameter name="state">

当前的录制状态。详见 [RecorderState](/zh-CN/api-reference/rtc/unreal-cpp/enum-recorderstate)。

</Parameter>
<a id="reason"></a>
<Parameter name="reason">

录制状态出错的原因。详见 [RecorderReasonCode](/zh-CN/api-reference/rtc/unreal-cpp/enum-recorderreasoncode)。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-7]

- [IMediaRecorderObserver](/zh-CN/api-reference/rtc/unreal-cpp/rtc-interface-class#class_imediarecorderobserver)
