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

```csharp
public abstract IMediaRecorder CreateMediaRecorder(RecorderStreamInfo info);
```

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

在开始音视频流录制前，你需要调用该方法创建一个音视频录制对象。SDK 支持录制本地或远端用户的多个音视频流，你可以多次调用该方法创建录制对象，并通过 `info` 参数指定需要录制的频道名称和发流的用户 ID。
成功创建后，你需要调用 [SetMediaRecorderObserver](/zh-CN/api-reference/rtc/unity/recording#api_imediarecorder_setmediarecorderobserver) 注册录制对象的观测器来监听录制的相关回调，然后再调用 [StartRecording](/zh-CN/api-reference/rtc/unity/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/unity/class-recorderstreaminfo)。

</Parameter>
</ParameterList>

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

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

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

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

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

```csharp
public abstract int DestroyMediaRecorder(IMediaRecorder mediaRecorder);
```

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

当你不需要再录制音视频流时，可以调用该方法销毁对应的音视频录制对象。如果你正在录制，请先调用 [StopRecording](/zh-CN/api-reference/rtc/unity/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/unity/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)了解详情和解决建议。

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

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

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

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

## SetMediaRecorderObserver [#setmediarecorderobserver]

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

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

```csharp
public abstract int SetMediaRecorderObserver(IMediaRecorderObserver callback);
```

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

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

- 已创建并初始化 [IRtcEngine](/zh-CN/api-reference/rtc/unity/rtc-interface-class#class_irtcengine) 对象。
- 已通过 [CreateMediaRecorder](/zh-CN/api-reference/rtc/unity/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/unity/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)了解详情和解决建议。

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

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

<a id="api_irtcengine_startaudiorecording1"></a>

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

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

开始客户端录音。

<a id="api_irtcengine_startaudiorecording1__prototype"></a>

```csharp
public abstract int StartAudioRecording(string filePath, AUDIO_RECORDING_QUALITY_TYPE quality);
```

<a id="api_irtcengine_startaudiorecording1__detailed_desc"></a>

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

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

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

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

<a id="api_irtcengine_startaudiorecording1__parameters"></a>

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

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

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

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

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

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

</Parameter>
</ParameterList>

<a id="api_irtcengine_startaudiorecording1__return_values"></a>

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

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

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

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

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

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

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

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

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

```csharp
public abstract int StartAudioRecording(string filePath, int sampleRate, AUDIO_RECORDING_QUALITY_TYPE quality);
```

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

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

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

:::note
注：

- 请确保你在该方法中指定的路径存在并且可写。
- 该接口需在 [JoinChannel [2/2]](/zh-CN/api-reference/rtc/unity/channel#api_irtcengine_joinchannel2) 之后调用。如果调用 [LeaveChannel [2/2]](/zh-CN/api-reference/rtc/unity/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`。

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

</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/unity/enum-audiorecordingqualitytype) 。

</Parameter>
</ParameterList>

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

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

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

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

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

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

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

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

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

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

```csharp
public abstract int StartAudioRecording(AudioRecordingConfiguration config);
```

<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__parameters"></a>

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

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

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

</Parameter>
</ParameterList>

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

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

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

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

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

```csharp
public abstract int StartRecording(MediaRecorderConfiguration config);
```

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

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

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

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

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

开启音视频流录制后，当视频分辨率在录制过程中发生变化时，SDK 会停止录制；当音频采样率和声道数发生变化时，SDK 会持续录制并生成单个 MP4 录制文件。仅当检测到可录制的音视频流时，才能成功生成录制文件；如果没有可录制的音视频流，或在录制过程中的音视频流中断超过 5 秒后，SDK 会停止录制，并触发 [OnRecorderStateChanged](/zh-CN/api-reference/rtc/unity/recording#callback_imediarecorderobserver_onrecorderstatechanged)(`RECORDER_STATE_ERROR, RECORDER_REASON_NO_STREAM`) 回调。

:::note
注：

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

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

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

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

音视频流录制配置。详见 [MediaRecorderConfiguration](/zh-CN/api-reference/rtc/unity/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/unity/rtc-interface-class#class_irtcengine) 当前状态不支持该操作。可能因为录制正在进行中或录制出错停止。
  - -7: [IRtcEngine](/zh-CN/api-reference/rtc/unity/rtc-interface-class#class_irtcengine) 尚未初始化就调用方法。请确认在调用该方法前已创建 [IMediaRecorder](/zh-CN/api-reference/rtc/unity/rtc-interface-class#class_imediarecorder) 对象。

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

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

```csharp
public abstract int StopAudioRecording();
```

<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)了解详情和解决建议。

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

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

```csharp
public abstract int StopRecording();
```

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

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

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

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

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

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

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

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

```csharp
public virtual void OnRecorderInfoUpdated(string channelId, uint uid, RecorderInfo info) {}
```

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

成功注册该回调并开启音视频流录制后，SDK 会根据你在 [MediaRecorderConfiguration](/zh-CN/api-reference/rtc/unity/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/unity/class-recorderinfo)。

</Parameter>
</ParameterList>

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

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

```csharp
public virtual void OnRecorderStateChanged(string channelId, uint uid, RecorderState state, RecorderReasonCode reason)
```

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

音视频流录制状态发生改变时，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/unity/enum-recorderstate)。

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

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

</Parameter>
</ParameterList>

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

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