# 音视频录制 (/zh-CN/api-reference/rtc/harmonyos/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>

```ts
public abstract createMediaRecorder(info: RecorderStreamInfo): AgoraMediaRecorder;
```

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

### 详情 [#详情]

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

成功创建后，你需要调用 [setMediaRecorderObserver](/zh-CN/api-reference/rtc/harmonyos/recording#api_imediarecorder_setmediarecorderobserver) 注册录制对象的观测器来监听录制的相关回调，然后再调用 [startRecording](/zh-CN/api-reference/rtc/harmonyos/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/harmonyos/class-recorderstreaminfo)。

</Parameter>
</ParameterList>

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

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

- 方法调用成功：返回一个 [AgoraMediaRecorder](/zh-CN/api-reference/rtc/harmonyos/rtc-interface-class#class_imediarecorder) 实例。
- 方法调用失败：返回空指针。

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

- [RtcEngine](/zh-CN/api-reference/rtc/harmonyos/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>

```ts
public abstract destroyMediaRecorder(recorder: AgoraMediaRecorder): void;
```

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

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

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

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

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

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

待销毁的 [AgoraMediaRecorder](/zh-CN/api-reference/rtc/harmonyos/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]

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

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

```ts
public abstract setMediaRecorderObserver(callback: IMediaRecorderCallback | null): number;
```

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

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

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

调用该方法前请确保：

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

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

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

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

音视频流录制回调，详见 [IMediaRecorderCallback](/zh-CN/api-reference/rtc/harmonyos/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]

- [AgoraMediaRecorder](/zh-CN/api-reference/rtc/harmonyos/rtc-interface-class#class_imediarecorder)

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

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

## startAudioRecording [#startaudiorecording]

开始客户端录音。

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

```ts
public abstract startAudioRecording(filePath: string, quality: Constants.AudioRecordingQualityType): number;;
```

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

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

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

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

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

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

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

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

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

录音文件在本地保存的绝对路径，需精确到文件名及格式。例如：`/sdcard/emulated/0/audio.aac`。

<a id="api_irtcengine_startaudiorecording__note_scm_klz_mqb"></a>

:::caution
注意：

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

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

录音质量。详见 [AudioRecordingQuality](/zh-CN/api-reference/rtc/harmonyos/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_startaudiorecording3"></a>

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

## startAudioRecordingWithConfiguration [#startaudiorecordingwithconfiguration]

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

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

```ts
public abstract startAudioRecordingWithConfiguration(config: AudioRecordingConfiguration): number;
```

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

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

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

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

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

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

</Parameter>
</ParameterList>

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

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

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

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

- [RtcEngine](/zh-CN/api-reference/rtc/harmonyos/rtc-interface-class#class_irtcengine)

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

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

## startRecording [#startrecording]

开启音视频流录制。

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

```ts
public abstract startRecording(config: MediaRecorderConfiguration): number;
```

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

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

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

在开始录制前请确保：

- 已通过 [createMediaRecorder](/zh-CN/api-reference/rtc/harmonyos/recording#api_irtcengine_createmediarecorder) 创建音视频录制对象。
- 已调用 [setMediaRecorderObserver](/zh-CN/api-reference/rtc/harmonyos/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>

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

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

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

</Parameter>
</ParameterList>

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

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

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

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

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

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

- [AgoraMediaRecorder](/zh-CN/api-reference/rtc/harmonyos/rtc-interface-class#class_imediarecorder)

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

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

## stopAudioRecording [#stopaudiorecording]

停止客户端录音。

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

```ts
public abstract stopAudioRecording(): number;;
```

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

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

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

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

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

- [RtcEngine](/zh-CN/api-reference/rtc/harmonyos/rtc-interface-class#class_irtcengine)

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

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

## stopRecording [#stoprecording]

停止音视频流录制。

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

```ts
public abstract stopRecording(): number;
```

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

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

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

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

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

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

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

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

- [AgoraMediaRecorder](/zh-CN/api-reference/rtc/harmonyos/rtc-interface-class#class_imediarecorder)

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

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

## onRecorderInfoUpdated [#onrecorderinfoupdated]

录制信息更新回调。

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

```ts
onRecorderInfoUpdated(channelId: string, uid: number, info: RecorderInfo): void;
```

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

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

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

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

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

<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/harmonyos/class-recorderinfo)。

</Parameter>
</ParameterList>

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

- [IMediaRecorderCallback](/zh-CN/api-reference/rtc/harmonyos/rtc-interface-class#class_imediarecorderobserver)

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

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

## onRecorderStateChanged [#onrecorderstatechanged]

录制状态发生改变回调。

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

```ts
onRecorderStateChanged(channelId: string, uid: number, state: number, reason: number): void;
```

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

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

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

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

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

<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">

当前的录制状态：

- RECORDER_STATE_ERROR（-1）：音视频流录制出错。
- RECORDER_STATE_START（2）：音视频流录制开始。
- RECORDER_STATE_STOP（3）：音视频流录制停止。

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

录制状态出错的原因：

- RECORDER_REASON_NONE（0）：一切正常。
- RECORDER_ERROR_WRITE_FAILED（1）：录制文件写入失败。
- RECORDER_ERROR_NO_STREAM（2）：没有可录制的音视频流或者录制的音视频流中断超过 5 秒。
- RECORDER_ERROR_OVER_MAX_DURATION（3）：录制时长超出上限。
- RECORDER_ERROR_CONFIG_CHANGED（4）：录制配置改变。

</Parameter>
</ParameterList>

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

- [IMediaRecorderCallback](/zh-CN/api-reference/rtc/harmonyos/rtc-interface-class#class_imediarecorderobserver)
