# 错误码 (/zh-CN/realtime-media/rtc/reference/error-code)

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

在调用声网 API 过程中，SDK 可能会返回错误码。当收到错误码时，意味着 SDK 遭遇了不可恢复的错误，需要 App 干预。

本文列出常见错误码的详细含义及其解决方法。对于未给出解决方法的错误码，声网推荐你[联系技术支持](https://ticket.shengwang.cn)，我们的技术服务会根据你在实际场景中遇到的问题进行排查。

<_PlatformTabsGroup>
<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="web" platform="android" />
:::info[信息]
- SDK 在返回错误码时，可能会返回一个负数。这个负数对应着错误码里的正整数。例如返回 `-2`，则对应错误码里的 `2`。
  - 本文中出现的 API 名称以 C++ 为准，其他平台的 API 名称可能会有所不同，请查阅对应平台的 API 文档。
:::

本节所列错误码适用于以下平台的声网 RTC v4.x SDK：

- 原生平台：Android、iOS、macOS、Windows、HarmonyOS NEXT。
- 第三方框架（即基于原生平台封装的第三方平台）：Electron、Unity、React Native、Flutter、Unreal。

声网 SDK 在运行过程中，可能通过如下方式返回错误码：

- 在方法调用失败的返回值中，返回一个负数，这个负数就对应着错误码的正数。
- 通过 `onError` 回调报告错误码。

## 通用错误码 [#通用错误码]

| 枚举值 | 说明 |
| --- | --- |
| `1` | 一般性的错误（没有明确归类的错误原因）。请重新调用方法。 |
| `2` | 方法中设置了无效的参数。例如指定的频道名中含有非法字符。请重新设置参数。 |
| `3` | [error-code-html-0-3-1-android details](#table-slot-error-code-html-0-3-1-android) |
| `4` | [error-code-html-0-4-1-android details](#table-slot-error-code-html-0-4-1-android) |
| `5` | [error-code-html-0-5-1-android details](#table-slot-error-code-html-0-5-1-android) |
| `6` | 缓冲区大小不足以存放返回的数据。 |
| `7` | `RtcEngine` 尚未初始化就调用方法。请确认在调用该方法前已创建 `RtcEngine` 对象并完成初始化。 |
| `8` | 当前状态无效。请查看 SDK 回调日志了解具体原因。 |
| `9` | 没有操作权限。请检查用户是否授予了 App 音视频设备的使用权限。 |
| `10` | 方法调用超时。有些方法调用需要 SDK 返回结果，如果 SDK 处理事件过长，超过 10 秒没有返回，会出现此错误。 |
| `17` | [error-code-html-0-11-1-android details](#table-slot-error-code-html-0-11-1-android) |
| `18` | [error-code-html-0-12-1-android details](#table-slot-error-code-html-0-12-1-android) |
| `19` | 资源已被占用，不能重复使用。 |
| `20` | SDK 放弃请求，可能由于请求的次数太多。 |
| `21` | Windows 下特定的防火墙设置导致 `RtcEngine` 初始化失败然后崩溃。 |
| `22` | SDK 分配资源失败，可能由于 App 占用资源过多或系统资源耗尽。 |
| `101` | 不是有效的 App ID。请更换有效的 App ID 重新加入频道。 |
| `102` | 不是有效的频道名。可能的原因是设置的参数数据类型不正确。请更换有效的频道名重新加入频道。 |
| `103` | 无法获取当前区域的服务器资源。请在初始化 `RtcEngine` 时尝试指定其他区域。 |
| `109` | [error-code-html-0-20-1-android details](#table-slot-error-code-html-0-20-1-android) |
| `110` | [error-code-html-0-21-1-android details](#table-slot-error-code-html-0-21-1-android) |
| `111` | 网络连接中断。SDK 在和服务器建立连接后，失去网络连接超过 4 秒。 |
| `112` | 网络连接丢失。网络连接中断，且 SDK 无法在 10 秒内连接服务器。 |
| `119` | 用户切换角色失败，请尝试重新加入频道。 |
| `120` | 解密失败。可能是用户加入频道时使用了错误的密码。请检查用户加入频道时填入的密码，或引导用户尝试重新加入频道。 |
| `121` | 该用户 ID 无效。 |
| `123` | 此用户被服务器禁止。当用户被服务端踢出时会报告这个错误。 |
| `134` | 用户账号无效，可能是因为设置了无效的参数。 |

<a id="table-slot-error-code-html-0-3-1-android"></a>

**error-code-html-0-3-1-android details**

SDK 尚未准备好。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 调用方法时用户尚未加入频道。请检查方法的调用逻辑。
- 调用 `rate` 或 `complain` 方法时用户尚未离开频道，请检查方法的调用逻辑。
- 音频模块未开启。
- 程序集不完整。

<a id="table-slot-error-code-html-0-4-1-android"></a>

**error-code-html-0-4-1-android details**

`RtcEngine` 当前状态不支持该操作。一般有以下原因：

- 使用内置加密时，设置的加密模式不正确。
- 加载外部加密库失败。
请检查加密的枚举值是否正确，或重新加载外部加密库。

<a id="table-slot-error-code-html-0-5-1-android"></a>

**error-code-html-0-5-1-android details**

方法调用被拒绝。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 在加入频道时，将频道名设为空字符 `""`。请重新设置频道名。
- 多频道场景下，在调用 `joinChannel` 方法加入频道时，设置的频道名已存在。请重新设置频道名。
- 多频道场景下，在调用 `joinChannelEx` 方法加入频道时，设置的频道名已存在。请重新设置频道名。

<a id="table-slot-error-code-html-0-11-1-android"></a>

**error-code-html-0-11-1-android details**

加入频道被拒绝。一般有以下原因：

- 用户已经在频道中。声网推荐通过 `onConnectionStateChanged` 回调判断用户是否在频道中。除非收到 `CONNECTION_STATE_DISCONNECTED`(1) 状态，否则请勿再次调用该方法加入频道。
- 用户在调用 `startEchoTest` 进行通话测试时，未调用 `stopEchoTest` 结束当前测试，就尝试加入频道。开始通话测试后，需要先调用 `stopEchoTest` 结束当前测试，再加入频道。

<a id="table-slot-error-code-html-0-12-1-android"></a>

**error-code-html-0-12-1-android details**

离开频道失败。一般有以下原因：

- 用户已离开频道，再次调用退出频道的方法，如 `leaveChannel` 时，会返回此错误。停止调用该方法即可。
- 用户尚未加入频道，就调用 `leaveChannel` 等退出频道的方法。这种情况下无需额外操作。

<a id="table-slot-error-code-html-0-20-1-android"></a>

**error-code-html-0-20-1-android details**

当前使用的 Token 过期，不再有效。请在服务端申请生成新的 Token，并调用 `renewToken` 更新 Token。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_TOKEN_EXPIRED`(9)。
:::

<a id="table-slot-error-code-html-0-21-1-android"></a>

**error-code-html-0-21-1-android details**

Token 无效。一般有以下原因：

- 在声网控制台中启用了 App 证书，但未使用 App ID + Token 鉴权。当项目启用了 App 证书，就必须使用 Token 鉴权。
- 生成 Token 时填入的 `uid` 字段，和用户加入频道时填入的 `uid` 不一致。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_INVALID_TOKEN`(8)。
:::

## 音频相关错误码 [#音频相关错误码]

| 枚举值 | 说明 |
| --- | --- |
| `1005` | 音频设备出现错误（未指明何种错误）。请检查音频设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1008` | 初始化播放设备出错。请检查播放设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1009` | 启动播放设备出错。请检查播放设备是否正常。 |
| `1010` | 停止播放设备出错。 |
| `1011` | 初始化录音设备出错。请检查录音设备是否正常，或者尝试重新进入频道。 |
| `1012` | 启动录音设备出错。请检查录音设备是否正常。 |
| `1013` | 停止录音设备出错。 |

## 数据流相关错误码 [#数据流相关错误码]

| 枚举值 | 说明 |
| --- | --- |
| `113` | 调用 `sendStreamMessage` 方法时，用户不在频道内。 |
| `114` | 调用 `sendStreamMessage` 时，发送的数据长度大于 1024 个字节。 |
| `115` | 调用 `sendStreamMessage` 时，发送数据的频率超过限制（6 KB/s）。 |
| `116` | 调用 `createDataStream` 时，创建的数据流超过限制（5 个）。 |
| `117` | 当发送端调用 `createDataStream`[1/2] 设置 `reliable` 为 `true`，或调用 `createDataStream`[2/2] 设置 `DataStreamConfig.ordered` 为 `true` 时，若接收端在 5 秒内未收到数据，或检测到数据丢失，将在接收端触发 `onStreamMessageError` 回调并返回错误码 `117`。 |

## 其他错误码 [#其他错误码]

| 枚举值 | 说明 |
| --- | --- |
| `130` | SDK 不支持将加密过的流推到 CDN 上。 |
| `1001` | 加载媒体引擎失败。 |
| `1501` | 没有摄像头使用权限。请检查是否已经打开摄像头权限。 |
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="web" platform="ios" />
:::info[信息]
- SDK 在返回错误码时，可能会返回一个负数。这个负数对应着错误码里的正整数。例如返回 `-2`，则对应错误码里的 `2`。
  - 本文中出现的 API 名称以 C++ 为准，其他平台的 API 名称可能会有所不同，请查阅对应平台的 API 文档。
:::

本节所列错误码适用于以下平台的声网 RTC v4.x SDK：

- 原生平台：Android、iOS、macOS、Windows、HarmonyOS NEXT。
- 第三方框架（即基于原生平台封装的第三方平台）：Electron、Unity、React Native、Flutter、Unreal。

声网 SDK 在运行过程中，可能通过如下方式返回错误码：

- 在方法调用失败的返回值中，返回一个负数，这个负数就对应着错误码的正数。
- 通过 `onError` 回调报告错误码。

## 通用错误码 [#通用错误码-1]

| 枚举值 | 说明 |
| --- | --- |
| `1` | 一般性的错误（没有明确归类的错误原因）。请重新调用方法。 |
| `2` | 方法中设置了无效的参数。例如指定的频道名中含有非法字符。请重新设置参数。 |
| `3` | [error-code-html-0-3-1-ios details](#table-slot-error-code-html-0-3-1-ios) |
| `4` | [error-code-html-0-4-1-ios details](#table-slot-error-code-html-0-4-1-ios) |
| `5` | [error-code-html-0-5-1-ios details](#table-slot-error-code-html-0-5-1-ios) |
| `6` | 缓冲区大小不足以存放返回的数据。 |
| `7` | `RtcEngine` 尚未初始化就调用方法。请确认在调用该方法前已创建 `RtcEngine` 对象并完成初始化。 |
| `8` | 当前状态无效。请查看 SDK 回调日志了解具体原因。 |
| `9` | 没有操作权限。请检查用户是否授予了 App 音视频设备的使用权限。 |
| `10` | 方法调用超时。有些方法调用需要 SDK 返回结果，如果 SDK 处理事件过长，超过 10 秒没有返回，会出现此错误。 |
| `17` | [error-code-html-0-11-1-ios details](#table-slot-error-code-html-0-11-1-ios) |
| `18` | [error-code-html-0-12-1-ios details](#table-slot-error-code-html-0-12-1-ios) |
| `19` | 资源已被占用，不能重复使用。 |
| `20` | SDK 放弃请求，可能由于请求的次数太多。 |
| `21` | Windows 下特定的防火墙设置导致 `RtcEngine` 初始化失败然后崩溃。 |
| `22` | SDK 分配资源失败，可能由于 App 占用资源过多或系统资源耗尽。 |
| `101` | 不是有效的 App ID。请更换有效的 App ID 重新加入频道。 |
| `102` | 不是有效的频道名。可能的原因是设置的参数数据类型不正确。请更换有效的频道名重新加入频道。 |
| `103` | 无法获取当前区域的服务器资源。请在初始化 `RtcEngine` 时尝试指定其他区域。 |
| `109` | [error-code-html-0-20-1-ios details](#table-slot-error-code-html-0-20-1-ios) |
| `110` | [error-code-html-0-21-1-ios details](#table-slot-error-code-html-0-21-1-ios) |
| `111` | 网络连接中断。SDK 在和服务器建立连接后，失去网络连接超过 4 秒。 |
| `112` | 网络连接丢失。网络连接中断，且 SDK 无法在 10 秒内连接服务器。 |
| `119` | 用户切换角色失败，请尝试重新加入频道。 |
| `120` | 解密失败。可能是用户加入频道时使用了错误的密码。请检查用户加入频道时填入的密码，或引导用户尝试重新加入频道。 |
| `121` | 该用户 ID 无效。 |
| `123` | 此用户被服务器禁止。当用户被服务端踢出时会报告这个错误。 |
| `134` | 用户账号无效，可能是因为设置了无效的参数。 |

<a id="table-slot-error-code-html-0-3-1-ios"></a>

**error-code-html-0-3-1-ios details**

SDK 尚未准备好。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 调用方法时用户尚未加入频道。请检查方法的调用逻辑。
- 调用 `rate` 或 `complain` 方法时用户尚未离开频道，请检查方法的调用逻辑。
- 音频模块未开启。
- 程序集不完整。

<a id="table-slot-error-code-html-0-4-1-ios"></a>

**error-code-html-0-4-1-ios details**

`RtcEngine` 当前状态不支持该操作。一般有以下原因：

- 使用内置加密时，设置的加密模式不正确。
- 加载外部加密库失败。
请检查加密的枚举值是否正确，或重新加载外部加密库。

<a id="table-slot-error-code-html-0-5-1-ios"></a>

**error-code-html-0-5-1-ios details**

方法调用被拒绝。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 在加入频道时，将频道名设为空字符 `""`。请重新设置频道名。
- 多频道场景下，在调用 `joinChannel` 方法加入频道时，设置的频道名已存在。请重新设置频道名。
- 多频道场景下，在调用 `joinChannelEx` 方法加入频道时，设置的频道名已存在。请重新设置频道名。

<a id="table-slot-error-code-html-0-11-1-ios"></a>

**error-code-html-0-11-1-ios details**

加入频道被拒绝。一般有以下原因：

- 用户已经在频道中。声网推荐通过 `onConnectionStateChanged` 回调判断用户是否在频道中。除非收到 `CONNECTION_STATE_DISCONNECTED`(1) 状态，否则请勿再次调用该方法加入频道。
- 用户在调用 `startEchoTest` 进行通话测试时，未调用 `stopEchoTest` 结束当前测试，就尝试加入频道。开始通话测试后，需要先调用 `stopEchoTest` 结束当前测试，再加入频道。

<a id="table-slot-error-code-html-0-12-1-ios"></a>

**error-code-html-0-12-1-ios details**

离开频道失败。一般有以下原因：

- 用户已离开频道，再次调用退出频道的方法，如 `leaveChannel` 时，会返回此错误。停止调用该方法即可。
- 用户尚未加入频道，就调用 `leaveChannel` 等退出频道的方法。这种情况下无需额外操作。

<a id="table-slot-error-code-html-0-20-1-ios"></a>

**error-code-html-0-20-1-ios details**

当前使用的 Token 过期，不再有效。请在服务端申请生成新的 Token，并调用 `renewToken` 更新 Token。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_TOKEN_EXPIRED`(9)。
:::

<a id="table-slot-error-code-html-0-21-1-ios"></a>

**error-code-html-0-21-1-ios details**

Token 无效。一般有以下原因：

- 在声网控制台中启用了 App 证书，但未使用 App ID + Token 鉴权。当项目启用了 App 证书，就必须使用 Token 鉴权。
- 生成 Token 时填入的 `uid` 字段，和用户加入频道时填入的 `uid` 不一致。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_INVALID_TOKEN`(8)。
:::

## 音频相关错误码 [#音频相关错误码-1]

| 枚举值 | 说明 |
| --- | --- |
| `1005` | 音频设备出现错误（未指明何种错误）。请检查音频设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1008` | 初始化播放设备出错。请检查播放设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1009` | 启动播放设备出错。请检查播放设备是否正常。 |
| `1010` | 停止播放设备出错。 |
| `1011` | 初始化录音设备出错。请检查录音设备是否正常，或者尝试重新进入频道。 |
| `1012` | 启动录音设备出错。请检查录音设备是否正常。 |
| `1013` | 停止录音设备出错。 |

## 数据流相关错误码 [#数据流相关错误码-1]

| 枚举值 | 说明 |
| --- | --- |
| `113` | 调用 `sendStreamMessage` 方法时，用户不在频道内。 |
| `114` | 调用 `sendStreamMessage` 时，发送的数据长度大于 1024 个字节。 |
| `115` | 调用 `sendStreamMessage` 时，发送数据的频率超过限制（6 KB/s）。 |
| `116` | 调用 `createDataStream` 时，创建的数据流超过限制（5 个）。 |
| `117` | 当发送端调用 `createDataStream`[1/2] 设置 `reliable` 为 `true`，或调用 `createDataStream`[2/2] 设置 `DataStreamConfig.ordered` 为 `true` 时，若接收端在 5 秒内未收到数据，或检测到数据丢失，将在接收端触发 `onStreamMessageError` 回调并返回错误码 `117`。 |

## 其他错误码 [#其他错误码-1]

| 枚举值 | 说明 |
| --- | --- |
| `130` | SDK 不支持将加密过的流推到 CDN 上。 |
| `1001` | 加载媒体引擎失败。 |
| `1501` | 没有摄像头使用权限。请检查是否已经打开摄像头权限。 |
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="web" platform="macos" />
:::info[信息]
- SDK 在返回错误码时，可能会返回一个负数。这个负数对应着错误码里的正整数。例如返回 `-2`，则对应错误码里的 `2`。
  - 本文中出现的 API 名称以 C++ 为准，其他平台的 API 名称可能会有所不同，请查阅对应平台的 API 文档。
:::

本节所列错误码适用于以下平台的声网 RTC v4.x SDK：

- 原生平台：Android、iOS、macOS、Windows、HarmonyOS NEXT。
- 第三方框架（即基于原生平台封装的第三方平台）：Electron、Unity、React Native、Flutter、Unreal。

声网 SDK 在运行过程中，可能通过如下方式返回错误码：

- 在方法调用失败的返回值中，返回一个负数，这个负数就对应着错误码的正数。
- 通过 `onError` 回调报告错误码。

## 通用错误码 [#通用错误码-2]

| 枚举值 | 说明 |
| --- | --- |
| `1` | 一般性的错误（没有明确归类的错误原因）。请重新调用方法。 |
| `2` | 方法中设置了无效的参数。例如指定的频道名中含有非法字符。请重新设置参数。 |
| `3` | [error-code-html-0-3-1-macos details](#table-slot-error-code-html-0-3-1-macos) |
| `4` | [error-code-html-0-4-1-macos details](#table-slot-error-code-html-0-4-1-macos) |
| `5` | [error-code-html-0-5-1-macos details](#table-slot-error-code-html-0-5-1-macos) |
| `6` | 缓冲区大小不足以存放返回的数据。 |
| `7` | `RtcEngine` 尚未初始化就调用方法。请确认在调用该方法前已创建 `RtcEngine` 对象并完成初始化。 |
| `8` | 当前状态无效。请查看 SDK 回调日志了解具体原因。 |
| `9` | 没有操作权限。请检查用户是否授予了 App 音视频设备的使用权限。 |
| `10` | 方法调用超时。有些方法调用需要 SDK 返回结果，如果 SDK 处理事件过长，超过 10 秒没有返回，会出现此错误。 |
| `17` | [error-code-html-0-11-1-macos details](#table-slot-error-code-html-0-11-1-macos) |
| `18` | [error-code-html-0-12-1-macos details](#table-slot-error-code-html-0-12-1-macos) |
| `19` | 资源已被占用，不能重复使用。 |
| `20` | SDK 放弃请求，可能由于请求的次数太多。 |
| `21` | Windows 下特定的防火墙设置导致 `RtcEngine` 初始化失败然后崩溃。 |
| `22` | SDK 分配资源失败，可能由于 App 占用资源过多或系统资源耗尽。 |
| `101` | 不是有效的 App ID。请更换有效的 App ID 重新加入频道。 |
| `102` | 不是有效的频道名。可能的原因是设置的参数数据类型不正确。请更换有效的频道名重新加入频道。 |
| `103` | 无法获取当前区域的服务器资源。请在初始化 `RtcEngine` 时尝试指定其他区域。 |
| `109` | [error-code-html-0-20-1-macos details](#table-slot-error-code-html-0-20-1-macos) |
| `110` | [error-code-html-0-21-1-macos details](#table-slot-error-code-html-0-21-1-macos) |
| `111` | 网络连接中断。SDK 在和服务器建立连接后，失去网络连接超过 4 秒。 |
| `112` | 网络连接丢失。网络连接中断，且 SDK 无法在 10 秒内连接服务器。 |
| `119` | 用户切换角色失败，请尝试重新加入频道。 |
| `120` | 解密失败。可能是用户加入频道时使用了错误的密码。请检查用户加入频道时填入的密码，或引导用户尝试重新加入频道。 |
| `121` | 该用户 ID 无效。 |
| `123` | 此用户被服务器禁止。当用户被服务端踢出时会报告这个错误。 |
| `134` | 用户账号无效，可能是因为设置了无效的参数。 |

<a id="table-slot-error-code-html-0-3-1-macos"></a>

**error-code-html-0-3-1-macos details**

SDK 尚未准备好。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 调用方法时用户尚未加入频道。请检查方法的调用逻辑。
- 调用 `rate` 或 `complain` 方法时用户尚未离开频道，请检查方法的调用逻辑。
- 音频模块未开启。
- 程序集不完整。

<a id="table-slot-error-code-html-0-4-1-macos"></a>

**error-code-html-0-4-1-macos details**

`RtcEngine` 当前状态不支持该操作。一般有以下原因：

- 使用内置加密时，设置的加密模式不正确。
- 加载外部加密库失败。
请检查加密的枚举值是否正确，或重新加载外部加密库。

<a id="table-slot-error-code-html-0-5-1-macos"></a>

**error-code-html-0-5-1-macos details**

方法调用被拒绝。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 在加入频道时，将频道名设为空字符 `""`。请重新设置频道名。
- 多频道场景下，在调用 `joinChannel` 方法加入频道时，设置的频道名已存在。请重新设置频道名。
- 多频道场景下，在调用 `joinChannelEx` 方法加入频道时，设置的频道名已存在。请重新设置频道名。

<a id="table-slot-error-code-html-0-11-1-macos"></a>

**error-code-html-0-11-1-macos details**

加入频道被拒绝。一般有以下原因：

- 用户已经在频道中。声网推荐通过 `onConnectionStateChanged` 回调判断用户是否在频道中。除非收到 `CONNECTION_STATE_DISCONNECTED`(1) 状态，否则请勿再次调用该方法加入频道。
- 用户在调用 `startEchoTest` 进行通话测试时，未调用 `stopEchoTest` 结束当前测试，就尝试加入频道。开始通话测试后，需要先调用 `stopEchoTest` 结束当前测试，再加入频道。

<a id="table-slot-error-code-html-0-12-1-macos"></a>

**error-code-html-0-12-1-macos details**

离开频道失败。一般有以下原因：

- 用户已离开频道，再次调用退出频道的方法，如 `leaveChannel` 时，会返回此错误。停止调用该方法即可。
- 用户尚未加入频道，就调用 `leaveChannel` 等退出频道的方法。这种情况下无需额外操作。

<a id="table-slot-error-code-html-0-20-1-macos"></a>

**error-code-html-0-20-1-macos details**

当前使用的 Token 过期，不再有效。请在服务端申请生成新的 Token，并调用 `renewToken` 更新 Token。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_TOKEN_EXPIRED`(9)。
:::

<a id="table-slot-error-code-html-0-21-1-macos"></a>

**error-code-html-0-21-1-macos details**

Token 无效。一般有以下原因：

- 在声网控制台中启用了 App 证书，但未使用 App ID + Token 鉴权。当项目启用了 App 证书，就必须使用 Token 鉴权。
- 生成 Token 时填入的 `uid` 字段，和用户加入频道时填入的 `uid` 不一致。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_INVALID_TOKEN`(8)。
:::

## 音频相关错误码 [#音频相关错误码-2]

| 枚举值 | 说明 |
| --- | --- |
| `1005` | 音频设备出现错误（未指明何种错误）。请检查音频设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1008` | 初始化播放设备出错。请检查播放设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1009` | 启动播放设备出错。请检查播放设备是否正常。 |
| `1010` | 停止播放设备出错。 |
| `1011` | 初始化录音设备出错。请检查录音设备是否正常，或者尝试重新进入频道。 |
| `1012` | 启动录音设备出错。请检查录音设备是否正常。 |
| `1013` | 停止录音设备出错。 |

## 数据流相关错误码 [#数据流相关错误码-2]

| 枚举值 | 说明 |
| --- | --- |
| `113` | 调用 `sendStreamMessage` 方法时，用户不在频道内。 |
| `114` | 调用 `sendStreamMessage` 时，发送的数据长度大于 1024 个字节。 |
| `115` | 调用 `sendStreamMessage` 时，发送数据的频率超过限制（6 KB/s）。 |
| `116` | 调用 `createDataStream` 时，创建的数据流超过限制（5 个）。 |
| `117` | 当发送端调用 `createDataStream`[1/2] 设置 `reliable` 为 `true`，或调用 `createDataStream`[2/2] 设置 `DataStreamConfig.ordered` 为 `true` 时，若接收端在 5 秒内未收到数据，或检测到数据丢失，将在接收端触发 `onStreamMessageError` 回调并返回错误码 `117`。 |

## 其他错误码 [#其他错误码-2]

| 枚举值 | 说明 |
| --- | --- |
| `130` | SDK 不支持将加密过的流推到 CDN 上。 |
| `1001` | 加载媒体引擎失败。 |
| `1501` | 没有摄像头使用权限。请检查是否已经打开摄像头权限。 |
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="web" platform="windows" />
:::info[信息]
- SDK 在返回错误码时，可能会返回一个负数。这个负数对应着错误码里的正整数。例如返回 `-2`，则对应错误码里的 `2`。
  - 本文中出现的 API 名称以 C++ 为准，其他平台的 API 名称可能会有所不同，请查阅对应平台的 API 文档。
:::

本节所列错误码适用于以下平台的声网 RTC v4.x SDK：

- 原生平台：Android、iOS、macOS、Windows、HarmonyOS NEXT。
- 第三方框架（即基于原生平台封装的第三方平台）：Electron、Unity、React Native、Flutter、Unreal。

声网 SDK 在运行过程中，可能通过如下方式返回错误码：

- 在方法调用失败的返回值中，返回一个负数，这个负数就对应着错误码的正数。
- 通过 `onError` 回调报告错误码。

## 通用错误码 [#通用错误码-3]

| 枚举值 | 说明 |
| --- | --- |
| `1` | 一般性的错误（没有明确归类的错误原因）。请重新调用方法。 |
| `2` | 方法中设置了无效的参数。例如指定的频道名中含有非法字符。请重新设置参数。 |
| `3` | [error-code-html-0-3-1-windows details](#table-slot-error-code-html-0-3-1-windows) |
| `4` | [error-code-html-0-4-1-windows details](#table-slot-error-code-html-0-4-1-windows) |
| `5` | [error-code-html-0-5-1-windows details](#table-slot-error-code-html-0-5-1-windows) |
| `6` | 缓冲区大小不足以存放返回的数据。 |
| `7` | `RtcEngine` 尚未初始化就调用方法。请确认在调用该方法前已创建 `RtcEngine` 对象并完成初始化。 |
| `8` | 当前状态无效。请查看 SDK 回调日志了解具体原因。 |
| `9` | 没有操作权限。请检查用户是否授予了 App 音视频设备的使用权限。 |
| `10` | 方法调用超时。有些方法调用需要 SDK 返回结果，如果 SDK 处理事件过长，超过 10 秒没有返回，会出现此错误。 |
| `17` | [error-code-html-0-11-1-windows details](#table-slot-error-code-html-0-11-1-windows) |
| `18` | [error-code-html-0-12-1-windows details](#table-slot-error-code-html-0-12-1-windows) |
| `19` | 资源已被占用，不能重复使用。 |
| `20` | SDK 放弃请求，可能由于请求的次数太多。 |
| `21` | Windows 下特定的防火墙设置导致 `RtcEngine` 初始化失败然后崩溃。 |
| `22` | SDK 分配资源失败，可能由于 App 占用资源过多或系统资源耗尽。 |
| `101` | 不是有效的 App ID。请更换有效的 App ID 重新加入频道。 |
| `102` | 不是有效的频道名。可能的原因是设置的参数数据类型不正确。请更换有效的频道名重新加入频道。 |
| `103` | 无法获取当前区域的服务器资源。请在初始化 `RtcEngine` 时尝试指定其他区域。 |
| `109` | [error-code-html-0-20-1-windows details](#table-slot-error-code-html-0-20-1-windows) |
| `110` | [error-code-html-0-21-1-windows details](#table-slot-error-code-html-0-21-1-windows) |
| `111` | 网络连接中断。SDK 在和服务器建立连接后，失去网络连接超过 4 秒。 |
| `112` | 网络连接丢失。网络连接中断，且 SDK 无法在 10 秒内连接服务器。 |
| `119` | 用户切换角色失败，请尝试重新加入频道。 |
| `120` | 解密失败。可能是用户加入频道时使用了错误的密码。请检查用户加入频道时填入的密码，或引导用户尝试重新加入频道。 |
| `121` | 该用户 ID 无效。 |
| `123` | 此用户被服务器禁止。当用户被服务端踢出时会报告这个错误。 |
| `134` | 用户账号无效，可能是因为设置了无效的参数。 |

<a id="table-slot-error-code-html-0-3-1-windows"></a>

**error-code-html-0-3-1-windows details**

SDK 尚未准备好。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 调用方法时用户尚未加入频道。请检查方法的调用逻辑。
- 调用 `rate` 或 `complain` 方法时用户尚未离开频道，请检查方法的调用逻辑。
- 音频模块未开启。
- 程序集不完整。

<a id="table-slot-error-code-html-0-4-1-windows"></a>

**error-code-html-0-4-1-windows details**

`RtcEngine` 当前状态不支持该操作。一般有以下原因：

- 使用内置加密时，设置的加密模式不正确。
- 加载外部加密库失败。
请检查加密的枚举值是否正确，或重新加载外部加密库。

<a id="table-slot-error-code-html-0-5-1-windows"></a>

**error-code-html-0-5-1-windows details**

方法调用被拒绝。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 在加入频道时，将频道名设为空字符 `""`。请重新设置频道名。
- 多频道场景下，在调用 `joinChannel` 方法加入频道时，设置的频道名已存在。请重新设置频道名。
- 多频道场景下，在调用 `joinChannelEx` 方法加入频道时，设置的频道名已存在。请重新设置频道名。

<a id="table-slot-error-code-html-0-11-1-windows"></a>

**error-code-html-0-11-1-windows details**

加入频道被拒绝。一般有以下原因：

- 用户已经在频道中。声网推荐通过 `onConnectionStateChanged` 回调判断用户是否在频道中。除非收到 `CONNECTION_STATE_DISCONNECTED`(1) 状态，否则请勿再次调用该方法加入频道。
- 用户在调用 `startEchoTest` 进行通话测试时，未调用 `stopEchoTest` 结束当前测试，就尝试加入频道。开始通话测试后，需要先调用 `stopEchoTest` 结束当前测试，再加入频道。

<a id="table-slot-error-code-html-0-12-1-windows"></a>

**error-code-html-0-12-1-windows details**

离开频道失败。一般有以下原因：

- 用户已离开频道，再次调用退出频道的方法，如 `leaveChannel` 时，会返回此错误。停止调用该方法即可。
- 用户尚未加入频道，就调用 `leaveChannel` 等退出频道的方法。这种情况下无需额外操作。

<a id="table-slot-error-code-html-0-20-1-windows"></a>

**error-code-html-0-20-1-windows details**

当前使用的 Token 过期，不再有效。请在服务端申请生成新的 Token，并调用 `renewToken` 更新 Token。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_TOKEN_EXPIRED`(9)。
:::

<a id="table-slot-error-code-html-0-21-1-windows"></a>

**error-code-html-0-21-1-windows details**

Token 无效。一般有以下原因：

- 在声网控制台中启用了 App 证书，但未使用 App ID + Token 鉴权。当项目启用了 App 证书，就必须使用 Token 鉴权。
- 生成 Token 时填入的 `uid` 字段，和用户加入频道时填入的 `uid` 不一致。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_INVALID_TOKEN`(8)。
:::

## 音频相关错误码 [#音频相关错误码-3]

| 枚举值 | 说明 |
| --- | --- |
| `1005` | 音频设备出现错误（未指明何种错误）。请检查音频设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1008` | 初始化播放设备出错。请检查播放设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1009` | 启动播放设备出错。请检查播放设备是否正常。 |
| `1010` | 停止播放设备出错。 |
| `1011` | 初始化录音设备出错。请检查录音设备是否正常，或者尝试重新进入频道。 |
| `1012` | 启动录音设备出错。请检查录音设备是否正常。 |
| `1013` | 停止录音设备出错。 |

## 数据流相关错误码 [#数据流相关错误码-3]

| 枚举值 | 说明 |
| --- | --- |
| `113` | 调用 `sendStreamMessage` 方法时，用户不在频道内。 |
| `114` | 调用 `sendStreamMessage` 时，发送的数据长度大于 1024 个字节。 |
| `115` | 调用 `sendStreamMessage` 时，发送数据的频率超过限制（6 KB/s）。 |
| `116` | 调用 `createDataStream` 时，创建的数据流超过限制（5 个）。 |
| `117` | 当发送端调用 `createDataStream`[1/2] 设置 `reliable` 为 `true`，或调用 `createDataStream`[2/2] 设置 `DataStreamConfig.ordered` 为 `true` 时，若接收端在 5 秒内未收到数据，或检测到数据丢失，将在接收端触发 `onStreamMessageError` 回调并返回错误码 `117`。 |

## 其他错误码 [#其他错误码-3]

| 枚举值 | 说明 |
| --- | --- |
| `130` | SDK 不支持将加密过的流推到 CDN 上。 |
| `1001` | 加载媒体引擎失败。 |
| `1501` | 没有摄像头使用权限。请检查是否已经打开摄像头权限。 |
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="web" platform="harmonyos" />
:::info[信息]
- SDK 在返回错误码时，可能会返回一个负数。这个负数对应着错误码里的正整数。例如返回 `-2`，则对应错误码里的 `2`。
  - 本文中出现的 API 名称以 C++ 为准，其他平台的 API 名称可能会有所不同，请查阅对应平台的 API 文档。
:::

本节所列错误码适用于以下平台的声网 RTC v4.x SDK：

- 原生平台：Android、iOS、macOS、Windows、HarmonyOS NEXT。
- 第三方框架（即基于原生平台封装的第三方平台）：Electron、Unity、React Native、Flutter、Unreal。

声网 SDK 在运行过程中，可能通过如下方式返回错误码：

- 在方法调用失败的返回值中，返回一个负数，这个负数就对应着错误码的正数。
- 通过 `onError` 回调报告错误码。

## 通用错误码 [#通用错误码-4]

| 枚举值 | 说明 |
| --- | --- |
| `1` | 一般性的错误（没有明确归类的错误原因）。请重新调用方法。 |
| `2` | 方法中设置了无效的参数。例如指定的频道名中含有非法字符。请重新设置参数。 |
| `3` | [error-code-html-0-3-1-harmonyos details](#table-slot-error-code-html-0-3-1-harmonyos) |
| `4` | [error-code-html-0-4-1-harmonyos details](#table-slot-error-code-html-0-4-1-harmonyos) |
| `5` | [error-code-html-0-5-1-harmonyos details](#table-slot-error-code-html-0-5-1-harmonyos) |
| `6` | 缓冲区大小不足以存放返回的数据。 |
| `7` | `RtcEngine` 尚未初始化就调用方法。请确认在调用该方法前已创建 `RtcEngine` 对象并完成初始化。 |
| `8` | 当前状态无效。请查看 SDK 回调日志了解具体原因。 |
| `9` | 没有操作权限。请检查用户是否授予了 App 音视频设备的使用权限。 |
| `10` | 方法调用超时。有些方法调用需要 SDK 返回结果，如果 SDK 处理事件过长，超过 10 秒没有返回，会出现此错误。 |
| `17` | [error-code-html-0-11-1-harmonyos details](#table-slot-error-code-html-0-11-1-harmonyos) |
| `18` | [error-code-html-0-12-1-harmonyos details](#table-slot-error-code-html-0-12-1-harmonyos) |
| `19` | 资源已被占用，不能重复使用。 |
| `20` | SDK 放弃请求，可能由于请求的次数太多。 |
| `21` | Windows 下特定的防火墙设置导致 `RtcEngine` 初始化失败然后崩溃。 |
| `22` | SDK 分配资源失败，可能由于 App 占用资源过多或系统资源耗尽。 |
| `101` | 不是有效的 App ID。请更换有效的 App ID 重新加入频道。 |
| `102` | 不是有效的频道名。可能的原因是设置的参数数据类型不正确。请更换有效的频道名重新加入频道。 |
| `103` | 无法获取当前区域的服务器资源。请在初始化 `RtcEngine` 时尝试指定其他区域。 |
| `109` | [error-code-html-0-20-1-harmonyos details](#table-slot-error-code-html-0-20-1-harmonyos) |
| `110` | [error-code-html-0-21-1-harmonyos details](#table-slot-error-code-html-0-21-1-harmonyos) |
| `111` | 网络连接中断。SDK 在和服务器建立连接后，失去网络连接超过 4 秒。 |
| `112` | 网络连接丢失。网络连接中断，且 SDK 无法在 10 秒内连接服务器。 |
| `119` | 用户切换角色失败，请尝试重新加入频道。 |
| `120` | 解密失败。可能是用户加入频道时使用了错误的密码。请检查用户加入频道时填入的密码，或引导用户尝试重新加入频道。 |
| `121` | 该用户 ID 无效。 |
| `123` | 此用户被服务器禁止。当用户被服务端踢出时会报告这个错误。 |
| `134` | 用户账号无效，可能是因为设置了无效的参数。 |

<a id="table-slot-error-code-html-0-3-1-harmonyos"></a>

**error-code-html-0-3-1-harmonyos details**

SDK 尚未准备好。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 调用方法时用户尚未加入频道。请检查方法的调用逻辑。
- 调用 `rate` 或 `complain` 方法时用户尚未离开频道，请检查方法的调用逻辑。
- 音频模块未开启。
- 程序集不完整。

<a id="table-slot-error-code-html-0-4-1-harmonyos"></a>

**error-code-html-0-4-1-harmonyos details**

`RtcEngine` 当前状态不支持该操作。一般有以下原因：

- 使用内置加密时，设置的加密模式不正确。
- 加载外部加密库失败。
请检查加密的枚举值是否正确，或重新加载外部加密库。

<a id="table-slot-error-code-html-0-5-1-harmonyos"></a>

**error-code-html-0-5-1-harmonyos details**

方法调用被拒绝。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 在加入频道时，将频道名设为空字符 `""`。请重新设置频道名。
- 多频道场景下，在调用 `joinChannel` 方法加入频道时，设置的频道名已存在。请重新设置频道名。
- 多频道场景下，在调用 `joinChannelEx` 方法加入频道时，设置的频道名已存在。请重新设置频道名。

<a id="table-slot-error-code-html-0-11-1-harmonyos"></a>

**error-code-html-0-11-1-harmonyos details**

加入频道被拒绝。一般有以下原因：

- 用户已经在频道中。声网推荐通过 `onConnectionStateChanged` 回调判断用户是否在频道中。除非收到 `CONNECTION_STATE_DISCONNECTED`(1) 状态，否则请勿再次调用该方法加入频道。
- 用户在调用 `startEchoTest` 进行通话测试时，未调用 `stopEchoTest` 结束当前测试，就尝试加入频道。开始通话测试后，需要先调用 `stopEchoTest` 结束当前测试，再加入频道。

<a id="table-slot-error-code-html-0-12-1-harmonyos"></a>

**error-code-html-0-12-1-harmonyos details**

离开频道失败。一般有以下原因：

- 用户已离开频道，再次调用退出频道的方法，如 `leaveChannel` 时，会返回此错误。停止调用该方法即可。
- 用户尚未加入频道，就调用 `leaveChannel` 等退出频道的方法。这种情况下无需额外操作。

<a id="table-slot-error-code-html-0-20-1-harmonyos"></a>

**error-code-html-0-20-1-harmonyos details**

当前使用的 Token 过期，不再有效。请在服务端申请生成新的 Token，并调用 `renewToken` 更新 Token。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_TOKEN_EXPIRED`(9)。
:::

<a id="table-slot-error-code-html-0-21-1-harmonyos"></a>

**error-code-html-0-21-1-harmonyos details**

Token 无效。一般有以下原因：

- 在声网控制台中启用了 App 证书，但未使用 App ID + Token 鉴权。当项目启用了 App 证书，就必须使用 Token 鉴权。
- 生成 Token 时填入的 `uid` 字段，和用户加入频道时填入的 `uid` 不一致。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_INVALID_TOKEN`(8)。
:::

## 音频相关错误码 [#音频相关错误码-4]

| 枚举值 | 说明 |
| --- | --- |
| `1005` | 音频设备出现错误（未指明何种错误）。请检查音频设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1008` | 初始化播放设备出错。请检查播放设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1009` | 启动播放设备出错。请检查播放设备是否正常。 |
| `1010` | 停止播放设备出错。 |
| `1011` | 初始化录音设备出错。请检查录音设备是否正常，或者尝试重新进入频道。 |
| `1012` | 启动录音设备出错。请检查录音设备是否正常。 |
| `1013` | 停止录音设备出错。 |

## 数据流相关错误码 [#数据流相关错误码-4]

| 枚举值 | 说明 |
| --- | --- |
| `113` | 调用 `sendStreamMessage` 方法时，用户不在频道内。 |
| `114` | 调用 `sendStreamMessage` 时，发送的数据长度大于 1024 个字节。 |
| `115` | 调用 `sendStreamMessage` 时，发送数据的频率超过限制（6 KB/s）。 |
| `116` | 调用 `createDataStream` 时，创建的数据流超过限制（5 个）。 |
| `117` | 当发送端调用 `createDataStream`[1/2] 设置 `reliable` 为 `true`，或调用 `createDataStream`[2/2] 设置 `DataStreamConfig.ordered` 为 `true` 时，若接收端在 5 秒内未收到数据，或检测到数据丢失，将在接收端触发 `onStreamMessageError` 回调并返回错误码 `117`。 |

## 其他错误码 [#其他错误码-4]

| 枚举值 | 说明 |
| --- | --- |
| `130` | SDK 不支持将加密过的流推到 CDN 上。 |
| `1001` | 加载媒体引擎失败。 |
| `1501` | 没有摄像头使用权限。请检查是否已经打开摄像头权限。 |
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="web" platform="electron" />
:::info[信息]
- SDK 在返回错误码时，可能会返回一个负数。这个负数对应着错误码里的正整数。例如返回 `-2`，则对应错误码里的 `2`。
  - 本文中出现的 API 名称以 C++ 为准，其他平台的 API 名称可能会有所不同，请查阅对应平台的 API 文档。
:::

本节所列错误码适用于以下平台的声网 RTC v4.x SDK：

- 原生平台：Android、iOS、macOS、Windows、HarmonyOS NEXT。
- 第三方框架（即基于原生平台封装的第三方平台）：Electron、Unity、React Native、Flutter、Unreal。

声网 SDK 在运行过程中，可能通过如下方式返回错误码：

- 在方法调用失败的返回值中，返回一个负数，这个负数就对应着错误码的正数。
- 通过 `onError` 回调报告错误码。

## 通用错误码 [#通用错误码-5]

| 枚举值 | 说明 |
| --- | --- |
| `1` | 一般性的错误（没有明确归类的错误原因）。请重新调用方法。 |
| `2` | 方法中设置了无效的参数。例如指定的频道名中含有非法字符。请重新设置参数。 |
| `3` | [error-code-html-0-3-1-electron details](#table-slot-error-code-html-0-3-1-electron) |
| `4` | [error-code-html-0-4-1-electron details](#table-slot-error-code-html-0-4-1-electron) |
| `5` | [error-code-html-0-5-1-electron details](#table-slot-error-code-html-0-5-1-electron) |
| `6` | 缓冲区大小不足以存放返回的数据。 |
| `7` | `RtcEngine` 尚未初始化就调用方法。请确认在调用该方法前已创建 `RtcEngine` 对象并完成初始化。 |
| `8` | 当前状态无效。请查看 SDK 回调日志了解具体原因。 |
| `9` | 没有操作权限。请检查用户是否授予了 App 音视频设备的使用权限。 |
| `10` | 方法调用超时。有些方法调用需要 SDK 返回结果，如果 SDK 处理事件过长，超过 10 秒没有返回，会出现此错误。 |
| `17` | [error-code-html-0-11-1-electron details](#table-slot-error-code-html-0-11-1-electron) |
| `18` | [error-code-html-0-12-1-electron details](#table-slot-error-code-html-0-12-1-electron) |
| `19` | 资源已被占用，不能重复使用。 |
| `20` | SDK 放弃请求，可能由于请求的次数太多。 |
| `21` | Windows 下特定的防火墙设置导致 `RtcEngine` 初始化失败然后崩溃。 |
| `22` | SDK 分配资源失败，可能由于 App 占用资源过多或系统资源耗尽。 |
| `101` | 不是有效的 App ID。请更换有效的 App ID 重新加入频道。 |
| `102` | 不是有效的频道名。可能的原因是设置的参数数据类型不正确。请更换有效的频道名重新加入频道。 |
| `103` | 无法获取当前区域的服务器资源。请在初始化 `RtcEngine` 时尝试指定其他区域。 |
| `109` | [error-code-html-0-20-1-electron details](#table-slot-error-code-html-0-20-1-electron) |
| `110` | [error-code-html-0-21-1-electron details](#table-slot-error-code-html-0-21-1-electron) |
| `111` | 网络连接中断。SDK 在和服务器建立连接后，失去网络连接超过 4 秒。 |
| `112` | 网络连接丢失。网络连接中断，且 SDK 无法在 10 秒内连接服务器。 |
| `119` | 用户切换角色失败，请尝试重新加入频道。 |
| `120` | 解密失败。可能是用户加入频道时使用了错误的密码。请检查用户加入频道时填入的密码，或引导用户尝试重新加入频道。 |
| `121` | 该用户 ID 无效。 |
| `123` | 此用户被服务器禁止。当用户被服务端踢出时会报告这个错误。 |
| `134` | 用户账号无效，可能是因为设置了无效的参数。 |

<a id="table-slot-error-code-html-0-3-1-electron"></a>

**error-code-html-0-3-1-electron details**

SDK 尚未准备好。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 调用方法时用户尚未加入频道。请检查方法的调用逻辑。
- 调用 `rate` 或 `complain` 方法时用户尚未离开频道，请检查方法的调用逻辑。
- 音频模块未开启。
- 程序集不完整。

<a id="table-slot-error-code-html-0-4-1-electron"></a>

**error-code-html-0-4-1-electron details**

`RtcEngine` 当前状态不支持该操作。一般有以下原因：

- 使用内置加密时，设置的加密模式不正确。
- 加载外部加密库失败。
请检查加密的枚举值是否正确，或重新加载外部加密库。

<a id="table-slot-error-code-html-0-5-1-electron"></a>

**error-code-html-0-5-1-electron details**

方法调用被拒绝。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 在加入频道时，将频道名设为空字符 `""`。请重新设置频道名。
- 多频道场景下，在调用 `joinChannel` 方法加入频道时，设置的频道名已存在。请重新设置频道名。
- 多频道场景下，在调用 `joinChannelEx` 方法加入频道时，设置的频道名已存在。请重新设置频道名。

<a id="table-slot-error-code-html-0-11-1-electron"></a>

**error-code-html-0-11-1-electron details**

加入频道被拒绝。一般有以下原因：

- 用户已经在频道中。声网推荐通过 `onConnectionStateChanged` 回调判断用户是否在频道中。除非收到 `CONNECTION_STATE_DISCONNECTED`(1) 状态，否则请勿再次调用该方法加入频道。
- 用户在调用 `startEchoTest` 进行通话测试时，未调用 `stopEchoTest` 结束当前测试，就尝试加入频道。开始通话测试后，需要先调用 `stopEchoTest` 结束当前测试，再加入频道。

<a id="table-slot-error-code-html-0-12-1-electron"></a>

**error-code-html-0-12-1-electron details**

离开频道失败。一般有以下原因：

- 用户已离开频道，再次调用退出频道的方法，如 `leaveChannel` 时，会返回此错误。停止调用该方法即可。
- 用户尚未加入频道，就调用 `leaveChannel` 等退出频道的方法。这种情况下无需额外操作。

<a id="table-slot-error-code-html-0-20-1-electron"></a>

**error-code-html-0-20-1-electron details**

当前使用的 Token 过期，不再有效。请在服务端申请生成新的 Token，并调用 `renewToken` 更新 Token。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_TOKEN_EXPIRED`(9)。
:::

<a id="table-slot-error-code-html-0-21-1-electron"></a>

**error-code-html-0-21-1-electron details**

Token 无效。一般有以下原因：

- 在声网控制台中启用了 App 证书，但未使用 App ID + Token 鉴权。当项目启用了 App 证书，就必须使用 Token 鉴权。
- 生成 Token 时填入的 `uid` 字段，和用户加入频道时填入的 `uid` 不一致。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_INVALID_TOKEN`(8)。
:::

## 音频相关错误码 [#音频相关错误码-5]

| 枚举值 | 说明 |
| --- | --- |
| `1005` | 音频设备出现错误（未指明何种错误）。请检查音频设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1008` | 初始化播放设备出错。请检查播放设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1009` | 启动播放设备出错。请检查播放设备是否正常。 |
| `1010` | 停止播放设备出错。 |
| `1011` | 初始化录音设备出错。请检查录音设备是否正常，或者尝试重新进入频道。 |
| `1012` | 启动录音设备出错。请检查录音设备是否正常。 |
| `1013` | 停止录音设备出错。 |

## 数据流相关错误码 [#数据流相关错误码-5]

| 枚举值 | 说明 |
| --- | --- |
| `113` | 调用 `sendStreamMessage` 方法时，用户不在频道内。 |
| `114` | 调用 `sendStreamMessage` 时，发送的数据长度大于 1024 个字节。 |
| `115` | 调用 `sendStreamMessage` 时，发送数据的频率超过限制（6 KB/s）。 |
| `116` | 调用 `createDataStream` 时，创建的数据流超过限制（5 个）。 |
| `117` | 当发送端调用 `createDataStream`[1/2] 设置 `reliable` 为 `true`，或调用 `createDataStream`[2/2] 设置 `DataStreamConfig.ordered` 为 `true` 时，若接收端在 5 秒内未收到数据，或检测到数据丢失，将在接收端触发 `onStreamMessageError` 回调并返回错误码 `117`。 |

## 其他错误码 [#其他错误码-5]

| 枚举值 | 说明 |
| --- | --- |
| `130` | SDK 不支持将加密过的流推到 CDN 上。 |
| `1001` | 加载媒体引擎失败。 |
| `1501` | 没有摄像头使用权限。请检查是否已经打开摄像头权限。 |
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="web" platform="unity" />
:::info[信息]
- SDK 在返回错误码时，可能会返回一个负数。这个负数对应着错误码里的正整数。例如返回 `-2`，则对应错误码里的 `2`。
  - 本文中出现的 API 名称以 C++ 为准，其他平台的 API 名称可能会有所不同，请查阅对应平台的 API 文档。
:::

本节所列错误码适用于以下平台的声网 RTC v4.x SDK：

- 原生平台：Android、iOS、macOS、Windows、HarmonyOS NEXT。
- 第三方框架（即基于原生平台封装的第三方平台）：Electron、Unity、React Native、Flutter、Unreal。

声网 SDK 在运行过程中，可能通过如下方式返回错误码：

- 在方法调用失败的返回值中，返回一个负数，这个负数就对应着错误码的正数。
- 通过 `onError` 回调报告错误码。

## 通用错误码 [#通用错误码-6]

| 枚举值 | 说明 |
| --- | --- |
| `1` | 一般性的错误（没有明确归类的错误原因）。请重新调用方法。 |
| `2` | 方法中设置了无效的参数。例如指定的频道名中含有非法字符。请重新设置参数。 |
| `3` | [error-code-html-0-3-1-unity details](#table-slot-error-code-html-0-3-1-unity) |
| `4` | [error-code-html-0-4-1-unity details](#table-slot-error-code-html-0-4-1-unity) |
| `5` | [error-code-html-0-5-1-unity details](#table-slot-error-code-html-0-5-1-unity) |
| `6` | 缓冲区大小不足以存放返回的数据。 |
| `7` | `RtcEngine` 尚未初始化就调用方法。请确认在调用该方法前已创建 `RtcEngine` 对象并完成初始化。 |
| `8` | 当前状态无效。请查看 SDK 回调日志了解具体原因。 |
| `9` | 没有操作权限。请检查用户是否授予了 App 音视频设备的使用权限。 |
| `10` | 方法调用超时。有些方法调用需要 SDK 返回结果，如果 SDK 处理事件过长，超过 10 秒没有返回，会出现此错误。 |
| `17` | [error-code-html-0-11-1-unity details](#table-slot-error-code-html-0-11-1-unity) |
| `18` | [error-code-html-0-12-1-unity details](#table-slot-error-code-html-0-12-1-unity) |
| `19` | 资源已被占用，不能重复使用。 |
| `20` | SDK 放弃请求，可能由于请求的次数太多。 |
| `21` | Windows 下特定的防火墙设置导致 `RtcEngine` 初始化失败然后崩溃。 |
| `22` | SDK 分配资源失败，可能由于 App 占用资源过多或系统资源耗尽。 |
| `101` | 不是有效的 App ID。请更换有效的 App ID 重新加入频道。 |
| `102` | 不是有效的频道名。可能的原因是设置的参数数据类型不正确。请更换有效的频道名重新加入频道。 |
| `103` | 无法获取当前区域的服务器资源。请在初始化 `RtcEngine` 时尝试指定其他区域。 |
| `109` | [error-code-html-0-20-1-unity details](#table-slot-error-code-html-0-20-1-unity) |
| `110` | [error-code-html-0-21-1-unity details](#table-slot-error-code-html-0-21-1-unity) |
| `111` | 网络连接中断。SDK 在和服务器建立连接后，失去网络连接超过 4 秒。 |
| `112` | 网络连接丢失。网络连接中断，且 SDK 无法在 10 秒内连接服务器。 |
| `119` | 用户切换角色失败，请尝试重新加入频道。 |
| `120` | 解密失败。可能是用户加入频道时使用了错误的密码。请检查用户加入频道时填入的密码，或引导用户尝试重新加入频道。 |
| `121` | 该用户 ID 无效。 |
| `123` | 此用户被服务器禁止。当用户被服务端踢出时会报告这个错误。 |
| `134` | 用户账号无效，可能是因为设置了无效的参数。 |

<a id="table-slot-error-code-html-0-3-1-unity"></a>

**error-code-html-0-3-1-unity details**

SDK 尚未准备好。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 调用方法时用户尚未加入频道。请检查方法的调用逻辑。
- 调用 `rate` 或 `complain` 方法时用户尚未离开频道，请检查方法的调用逻辑。
- 音频模块未开启。
- 程序集不完整。

<a id="table-slot-error-code-html-0-4-1-unity"></a>

**error-code-html-0-4-1-unity details**

`RtcEngine` 当前状态不支持该操作。一般有以下原因：

- 使用内置加密时，设置的加密模式不正确。
- 加载外部加密库失败。
请检查加密的枚举值是否正确，或重新加载外部加密库。

<a id="table-slot-error-code-html-0-5-1-unity"></a>

**error-code-html-0-5-1-unity details**

方法调用被拒绝。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 在加入频道时，将频道名设为空字符 `""`。请重新设置频道名。
- 多频道场景下，在调用 `joinChannel` 方法加入频道时，设置的频道名已存在。请重新设置频道名。
- 多频道场景下，在调用 `joinChannelEx` 方法加入频道时，设置的频道名已存在。请重新设置频道名。

<a id="table-slot-error-code-html-0-11-1-unity"></a>

**error-code-html-0-11-1-unity details**

加入频道被拒绝。一般有以下原因：

- 用户已经在频道中。声网推荐通过 `onConnectionStateChanged` 回调判断用户是否在频道中。除非收到 `CONNECTION_STATE_DISCONNECTED`(1) 状态，否则请勿再次调用该方法加入频道。
- 用户在调用 `startEchoTest` 进行通话测试时，未调用 `stopEchoTest` 结束当前测试，就尝试加入频道。开始通话测试后，需要先调用 `stopEchoTest` 结束当前测试，再加入频道。

<a id="table-slot-error-code-html-0-12-1-unity"></a>

**error-code-html-0-12-1-unity details**

离开频道失败。一般有以下原因：

- 用户已离开频道，再次调用退出频道的方法，如 `leaveChannel` 时，会返回此错误。停止调用该方法即可。
- 用户尚未加入频道，就调用 `leaveChannel` 等退出频道的方法。这种情况下无需额外操作。

<a id="table-slot-error-code-html-0-20-1-unity"></a>

**error-code-html-0-20-1-unity details**

当前使用的 Token 过期，不再有效。请在服务端申请生成新的 Token，并调用 `renewToken` 更新 Token。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_TOKEN_EXPIRED`(9)。
:::

<a id="table-slot-error-code-html-0-21-1-unity"></a>

**error-code-html-0-21-1-unity details**

Token 无效。一般有以下原因：

- 在声网控制台中启用了 App 证书，但未使用 App ID + Token 鉴权。当项目启用了 App 证书，就必须使用 Token 鉴权。
- 生成 Token 时填入的 `uid` 字段，和用户加入频道时填入的 `uid` 不一致。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_INVALID_TOKEN`(8)。
:::

## 音频相关错误码 [#音频相关错误码-6]

| 枚举值 | 说明 |
| --- | --- |
| `1005` | 音频设备出现错误（未指明何种错误）。请检查音频设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1008` | 初始化播放设备出错。请检查播放设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1009` | 启动播放设备出错。请检查播放设备是否正常。 |
| `1010` | 停止播放设备出错。 |
| `1011` | 初始化录音设备出错。请检查录音设备是否正常，或者尝试重新进入频道。 |
| `1012` | 启动录音设备出错。请检查录音设备是否正常。 |
| `1013` | 停止录音设备出错。 |

## 数据流相关错误码 [#数据流相关错误码-6]

| 枚举值 | 说明 |
| --- | --- |
| `113` | 调用 `sendStreamMessage` 方法时，用户不在频道内。 |
| `114` | 调用 `sendStreamMessage` 时，发送的数据长度大于 1024 个字节。 |
| `115` | 调用 `sendStreamMessage` 时，发送数据的频率超过限制（6 KB/s）。 |
| `116` | 调用 `createDataStream` 时，创建的数据流超过限制（5 个）。 |
| `117` | 当发送端调用 `createDataStream`[1/2] 设置 `reliable` 为 `true`，或调用 `createDataStream`[2/2] 设置 `DataStreamConfig.ordered` 为 `true` 时，若接收端在 5 秒内未收到数据，或检测到数据丢失，将在接收端触发 `onStreamMessageError` 回调并返回错误码 `117`。 |

## 其他错误码 [#其他错误码-6]

| 枚举值 | 说明 |
| --- | --- |
| `130` | SDK 不支持将加密过的流推到 CDN 上。 |
| `1001` | 加载媒体引擎失败。 |
| `1501` | 没有摄像头使用权限。请检查是否已经打开摄像头权限。 |
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="web" platform="react-native" />
:::info[信息]
- SDK 在返回错误码时，可能会返回一个负数。这个负数对应着错误码里的正整数。例如返回 `-2`，则对应错误码里的 `2`。
  - 本文中出现的 API 名称以 C++ 为准，其他平台的 API 名称可能会有所不同，请查阅对应平台的 API 文档。
:::

本节所列错误码适用于以下平台的声网 RTC v4.x SDK：

- 原生平台：Android、iOS、macOS、Windows、HarmonyOS NEXT。
- 第三方框架（即基于原生平台封装的第三方平台）：Electron、Unity、React Native、Flutter、Unreal。

声网 SDK 在运行过程中，可能通过如下方式返回错误码：

- 在方法调用失败的返回值中，返回一个负数，这个负数就对应着错误码的正数。
- 通过 `onError` 回调报告错误码。

## 通用错误码 [#通用错误码-7]

| 枚举值 | 说明 |
| --- | --- |
| `1` | 一般性的错误（没有明确归类的错误原因）。请重新调用方法。 |
| `2` | 方法中设置了无效的参数。例如指定的频道名中含有非法字符。请重新设置参数。 |
| `3` | [error-code-html-0-3-1-react-native details](#table-slot-error-code-html-0-3-1-react-native) |
| `4` | [error-code-html-0-4-1-react-native details](#table-slot-error-code-html-0-4-1-react-native) |
| `5` | [error-code-html-0-5-1-react-native details](#table-slot-error-code-html-0-5-1-react-native) |
| `6` | 缓冲区大小不足以存放返回的数据。 |
| `7` | `RtcEngine` 尚未初始化就调用方法。请确认在调用该方法前已创建 `RtcEngine` 对象并完成初始化。 |
| `8` | 当前状态无效。请查看 SDK 回调日志了解具体原因。 |
| `9` | 没有操作权限。请检查用户是否授予了 App 音视频设备的使用权限。 |
| `10` | 方法调用超时。有些方法调用需要 SDK 返回结果，如果 SDK 处理事件过长，超过 10 秒没有返回，会出现此错误。 |
| `17` | [error-code-html-0-11-1-react-native details](#table-slot-error-code-html-0-11-1-react-native) |
| `18` | [error-code-html-0-12-1-react-native details](#table-slot-error-code-html-0-12-1-react-native) |
| `19` | 资源已被占用，不能重复使用。 |
| `20` | SDK 放弃请求，可能由于请求的次数太多。 |
| `21` | Windows 下特定的防火墙设置导致 `RtcEngine` 初始化失败然后崩溃。 |
| `22` | SDK 分配资源失败，可能由于 App 占用资源过多或系统资源耗尽。 |
| `101` | 不是有效的 App ID。请更换有效的 App ID 重新加入频道。 |
| `102` | 不是有效的频道名。可能的原因是设置的参数数据类型不正确。请更换有效的频道名重新加入频道。 |
| `103` | 无法获取当前区域的服务器资源。请在初始化 `RtcEngine` 时尝试指定其他区域。 |
| `109` | [error-code-html-0-20-1-react-native details](#table-slot-error-code-html-0-20-1-react-native) |
| `110` | [error-code-html-0-21-1-react-native details](#table-slot-error-code-html-0-21-1-react-native) |
| `111` | 网络连接中断。SDK 在和服务器建立连接后，失去网络连接超过 4 秒。 |
| `112` | 网络连接丢失。网络连接中断，且 SDK 无法在 10 秒内连接服务器。 |
| `119` | 用户切换角色失败，请尝试重新加入频道。 |
| `120` | 解密失败。可能是用户加入频道时使用了错误的密码。请检查用户加入频道时填入的密码，或引导用户尝试重新加入频道。 |
| `121` | 该用户 ID 无效。 |
| `123` | 此用户被服务器禁止。当用户被服务端踢出时会报告这个错误。 |
| `134` | 用户账号无效，可能是因为设置了无效的参数。 |

<a id="table-slot-error-code-html-0-3-1-react-native"></a>

**error-code-html-0-3-1-react-native details**

SDK 尚未准备好。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 调用方法时用户尚未加入频道。请检查方法的调用逻辑。
- 调用 `rate` 或 `complain` 方法时用户尚未离开频道，请检查方法的调用逻辑。
- 音频模块未开启。
- 程序集不完整。

<a id="table-slot-error-code-html-0-4-1-react-native"></a>

**error-code-html-0-4-1-react-native details**

`RtcEngine` 当前状态不支持该操作。一般有以下原因：

- 使用内置加密时，设置的加密模式不正确。
- 加载外部加密库失败。
请检查加密的枚举值是否正确，或重新加载外部加密库。

<a id="table-slot-error-code-html-0-5-1-react-native"></a>

**error-code-html-0-5-1-react-native details**

方法调用被拒绝。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 在加入频道时，将频道名设为空字符 `""`。请重新设置频道名。
- 多频道场景下，在调用 `joinChannel` 方法加入频道时，设置的频道名已存在。请重新设置频道名。
- 多频道场景下，在调用 `joinChannelEx` 方法加入频道时，设置的频道名已存在。请重新设置频道名。

<a id="table-slot-error-code-html-0-11-1-react-native"></a>

**error-code-html-0-11-1-react-native details**

加入频道被拒绝。一般有以下原因：

- 用户已经在频道中。声网推荐通过 `onConnectionStateChanged` 回调判断用户是否在频道中。除非收到 `CONNECTION_STATE_DISCONNECTED`(1) 状态，否则请勿再次调用该方法加入频道。
- 用户在调用 `startEchoTest` 进行通话测试时，未调用 `stopEchoTest` 结束当前测试，就尝试加入频道。开始通话测试后，需要先调用 `stopEchoTest` 结束当前测试，再加入频道。

<a id="table-slot-error-code-html-0-12-1-react-native"></a>

**error-code-html-0-12-1-react-native details**

离开频道失败。一般有以下原因：

- 用户已离开频道，再次调用退出频道的方法，如 `leaveChannel` 时，会返回此错误。停止调用该方法即可。
- 用户尚未加入频道，就调用 `leaveChannel` 等退出频道的方法。这种情况下无需额外操作。

<a id="table-slot-error-code-html-0-20-1-react-native"></a>

**error-code-html-0-20-1-react-native details**

当前使用的 Token 过期，不再有效。请在服务端申请生成新的 Token，并调用 `renewToken` 更新 Token。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_TOKEN_EXPIRED`(9)。
:::

<a id="table-slot-error-code-html-0-21-1-react-native"></a>

**error-code-html-0-21-1-react-native details**

Token 无效。一般有以下原因：

- 在声网控制台中启用了 App 证书，但未使用 App ID + Token 鉴权。当项目启用了 App 证书，就必须使用 Token 鉴权。
- 生成 Token 时填入的 `uid` 字段，和用户加入频道时填入的 `uid` 不一致。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_INVALID_TOKEN`(8)。
:::

## 音频相关错误码 [#音频相关错误码-7]

| 枚举值 | 说明 |
| --- | --- |
| `1005` | 音频设备出现错误（未指明何种错误）。请检查音频设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1008` | 初始化播放设备出错。请检查播放设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1009` | 启动播放设备出错。请检查播放设备是否正常。 |
| `1010` | 停止播放设备出错。 |
| `1011` | 初始化录音设备出错。请检查录音设备是否正常，或者尝试重新进入频道。 |
| `1012` | 启动录音设备出错。请检查录音设备是否正常。 |
| `1013` | 停止录音设备出错。 |

## 数据流相关错误码 [#数据流相关错误码-7]

| 枚举值 | 说明 |
| --- | --- |
| `113` | 调用 `sendStreamMessage` 方法时，用户不在频道内。 |
| `114` | 调用 `sendStreamMessage` 时，发送的数据长度大于 1024 个字节。 |
| `115` | 调用 `sendStreamMessage` 时，发送数据的频率超过限制（6 KB/s）。 |
| `116` | 调用 `createDataStream` 时，创建的数据流超过限制（5 个）。 |
| `117` | 当发送端调用 `createDataStream`[1/2] 设置 `reliable` 为 `true`，或调用 `createDataStream`[2/2] 设置 `DataStreamConfig.ordered` 为 `true` 时，若接收端在 5 秒内未收到数据，或检测到数据丢失，将在接收端触发 `onStreamMessageError` 回调并返回错误码 `117`。 |

## 其他错误码 [#其他错误码-7]

| 枚举值 | 说明 |
| --- | --- |
| `130` | SDK 不支持将加密过的流推到 CDN 上。 |
| `1001` | 加载媒体引擎失败。 |
| `1501` | 没有摄像头使用权限。请检查是否已经打开摄像头权限。 |
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="web" platform="flutter" />
:::info[信息]
- SDK 在返回错误码时，可能会返回一个负数。这个负数对应着错误码里的正整数。例如返回 `-2`，则对应错误码里的 `2`。
  - 本文中出现的 API 名称以 C++ 为准，其他平台的 API 名称可能会有所不同，请查阅对应平台的 API 文档。
:::

本节所列错误码适用于以下平台的声网 RTC v4.x SDK：

- 原生平台：Android、iOS、macOS、Windows、HarmonyOS NEXT。
- 第三方框架（即基于原生平台封装的第三方平台）：Electron、Unity、React Native、Flutter、Unreal。

声网 SDK 在运行过程中，可能通过如下方式返回错误码：

- 在方法调用失败的返回值中，返回一个负数，这个负数就对应着错误码的正数。
- 通过 `onError` 回调报告错误码。

## 通用错误码 [#通用错误码-8]

| 枚举值 | 说明 |
| --- | --- |
| `1` | 一般性的错误（没有明确归类的错误原因）。请重新调用方法。 |
| `2` | 方法中设置了无效的参数。例如指定的频道名中含有非法字符。请重新设置参数。 |
| `3` | [error-code-html-0-3-1-flutter details](#table-slot-error-code-html-0-3-1-flutter) |
| `4` | [error-code-html-0-4-1-flutter details](#table-slot-error-code-html-0-4-1-flutter) |
| `5` | [error-code-html-0-5-1-flutter details](#table-slot-error-code-html-0-5-1-flutter) |
| `6` | 缓冲区大小不足以存放返回的数据。 |
| `7` | `RtcEngine` 尚未初始化就调用方法。请确认在调用该方法前已创建 `RtcEngine` 对象并完成初始化。 |
| `8` | 当前状态无效。请查看 SDK 回调日志了解具体原因。 |
| `9` | 没有操作权限。请检查用户是否授予了 App 音视频设备的使用权限。 |
| `10` | 方法调用超时。有些方法调用需要 SDK 返回结果，如果 SDK 处理事件过长，超过 10 秒没有返回，会出现此错误。 |
| `17` | [error-code-html-0-11-1-flutter details](#table-slot-error-code-html-0-11-1-flutter) |
| `18` | [error-code-html-0-12-1-flutter details](#table-slot-error-code-html-0-12-1-flutter) |
| `19` | 资源已被占用，不能重复使用。 |
| `20` | SDK 放弃请求，可能由于请求的次数太多。 |
| `21` | Windows 下特定的防火墙设置导致 `RtcEngine` 初始化失败然后崩溃。 |
| `22` | SDK 分配资源失败，可能由于 App 占用资源过多或系统资源耗尽。 |
| `101` | 不是有效的 App ID。请更换有效的 App ID 重新加入频道。 |
| `102` | 不是有效的频道名。可能的原因是设置的参数数据类型不正确。请更换有效的频道名重新加入频道。 |
| `103` | 无法获取当前区域的服务器资源。请在初始化 `RtcEngine` 时尝试指定其他区域。 |
| `109` | [error-code-html-0-20-1-flutter details](#table-slot-error-code-html-0-20-1-flutter) |
| `110` | [error-code-html-0-21-1-flutter details](#table-slot-error-code-html-0-21-1-flutter) |
| `111` | 网络连接中断。SDK 在和服务器建立连接后，失去网络连接超过 4 秒。 |
| `112` | 网络连接丢失。网络连接中断，且 SDK 无法在 10 秒内连接服务器。 |
| `119` | 用户切换角色失败，请尝试重新加入频道。 |
| `120` | 解密失败。可能是用户加入频道时使用了错误的密码。请检查用户加入频道时填入的密码，或引导用户尝试重新加入频道。 |
| `121` | 该用户 ID 无效。 |
| `123` | 此用户被服务器禁止。当用户被服务端踢出时会报告这个错误。 |
| `134` | 用户账号无效，可能是因为设置了无效的参数。 |

<a id="table-slot-error-code-html-0-3-1-flutter"></a>

**error-code-html-0-3-1-flutter details**

SDK 尚未准备好。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 调用方法时用户尚未加入频道。请检查方法的调用逻辑。
- 调用 `rate` 或 `complain` 方法时用户尚未离开频道，请检查方法的调用逻辑。
- 音频模块未开启。
- 程序集不完整。

<a id="table-slot-error-code-html-0-4-1-flutter"></a>

**error-code-html-0-4-1-flutter details**

`RtcEngine` 当前状态不支持该操作。一般有以下原因：

- 使用内置加密时，设置的加密模式不正确。
- 加载外部加密库失败。
请检查加密的枚举值是否正确，或重新加载外部加密库。

<a id="table-slot-error-code-html-0-5-1-flutter"></a>

**error-code-html-0-5-1-flutter details**

方法调用被拒绝。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 在加入频道时，将频道名设为空字符 `""`。请重新设置频道名。
- 多频道场景下，在调用 `joinChannel` 方法加入频道时，设置的频道名已存在。请重新设置频道名。
- 多频道场景下，在调用 `joinChannelEx` 方法加入频道时，设置的频道名已存在。请重新设置频道名。

<a id="table-slot-error-code-html-0-11-1-flutter"></a>

**error-code-html-0-11-1-flutter details**

加入频道被拒绝。一般有以下原因：

- 用户已经在频道中。声网推荐通过 `onConnectionStateChanged` 回调判断用户是否在频道中。除非收到 `CONNECTION_STATE_DISCONNECTED`(1) 状态，否则请勿再次调用该方法加入频道。
- 用户在调用 `startEchoTest` 进行通话测试时，未调用 `stopEchoTest` 结束当前测试，就尝试加入频道。开始通话测试后，需要先调用 `stopEchoTest` 结束当前测试，再加入频道。

<a id="table-slot-error-code-html-0-12-1-flutter"></a>

**error-code-html-0-12-1-flutter details**

离开频道失败。一般有以下原因：

- 用户已离开频道，再次调用退出频道的方法，如 `leaveChannel` 时，会返回此错误。停止调用该方法即可。
- 用户尚未加入频道，就调用 `leaveChannel` 等退出频道的方法。这种情况下无需额外操作。

<a id="table-slot-error-code-html-0-20-1-flutter"></a>

**error-code-html-0-20-1-flutter details**

当前使用的 Token 过期，不再有效。请在服务端申请生成新的 Token，并调用 `renewToken` 更新 Token。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_TOKEN_EXPIRED`(9)。
:::

<a id="table-slot-error-code-html-0-21-1-flutter"></a>

**error-code-html-0-21-1-flutter details**

Token 无效。一般有以下原因：

- 在声网控制台中启用了 App 证书，但未使用 App ID + Token 鉴权。当项目启用了 App 证书，就必须使用 Token 鉴权。
- 生成 Token 时填入的 `uid` 字段，和用户加入频道时填入的 `uid` 不一致。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_INVALID_TOKEN`(8)。
:::

## 音频相关错误码 [#音频相关错误码-8]

| 枚举值 | 说明 |
| --- | --- |
| `1005` | 音频设备出现错误（未指明何种错误）。请检查音频设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1008` | 初始化播放设备出错。请检查播放设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1009` | 启动播放设备出错。请检查播放设备是否正常。 |
| `1010` | 停止播放设备出错。 |
| `1011` | 初始化录音设备出错。请检查录音设备是否正常，或者尝试重新进入频道。 |
| `1012` | 启动录音设备出错。请检查录音设备是否正常。 |
| `1013` | 停止录音设备出错。 |

## 数据流相关错误码 [#数据流相关错误码-8]

| 枚举值 | 说明 |
| --- | --- |
| `113` | 调用 `sendStreamMessage` 方法时，用户不在频道内。 |
| `114` | 调用 `sendStreamMessage` 时，发送的数据长度大于 1024 个字节。 |
| `115` | 调用 `sendStreamMessage` 时，发送数据的频率超过限制（6 KB/s）。 |
| `116` | 调用 `createDataStream` 时，创建的数据流超过限制（5 个）。 |
| `117` | 当发送端调用 `createDataStream`[1/2] 设置 `reliable` 为 `true`，或调用 `createDataStream`[2/2] 设置 `DataStreamConfig.ordered` 为 `true` 时，若接收端在 5 秒内未收到数据，或检测到数据丢失，将在接收端触发 `onStreamMessageError` 回调并返回错误码 `117`。 |

## 其他错误码 [#其他错误码-8]

| 枚举值 | 说明 |
| --- | --- |
| `130` | SDK 不支持将加密过的流推到 CDN 上。 |
| `1001` | 加载媒体引擎失败。 |
| `1501` | 没有摄像头使用权限。请检查是否已经打开摄像头权限。 |
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="web" platform="unreal" />
:::info[信息]
- SDK 在返回错误码时，可能会返回一个负数。这个负数对应着错误码里的正整数。例如返回 `-2`，则对应错误码里的 `2`。
  - 本文中出现的 API 名称以 C++ 为准，其他平台的 API 名称可能会有所不同，请查阅对应平台的 API 文档。
:::

本节所列错误码适用于以下平台的声网 RTC v4.x SDK：

- 原生平台：Android、iOS、macOS、Windows、HarmonyOS NEXT。
- 第三方框架（即基于原生平台封装的第三方平台）：Electron、Unity、React Native、Flutter、Unreal。

声网 SDK 在运行过程中，可能通过如下方式返回错误码：

- 在方法调用失败的返回值中，返回一个负数，这个负数就对应着错误码的正数。
- 通过 `onError` 回调报告错误码。

## 通用错误码 [#通用错误码-9]

| 枚举值 | 说明 |
| --- | --- |
| `1` | 一般性的错误（没有明确归类的错误原因）。请重新调用方法。 |
| `2` | 方法中设置了无效的参数。例如指定的频道名中含有非法字符。请重新设置参数。 |
| `3` | [error-code-html-0-3-1-unreal details](#table-slot-error-code-html-0-3-1-unreal) |
| `4` | [error-code-html-0-4-1-unreal details](#table-slot-error-code-html-0-4-1-unreal) |
| `5` | [error-code-html-0-5-1-unreal details](#table-slot-error-code-html-0-5-1-unreal) |
| `6` | 缓冲区大小不足以存放返回的数据。 |
| `7` | `RtcEngine` 尚未初始化就调用方法。请确认在调用该方法前已创建 `RtcEngine` 对象并完成初始化。 |
| `8` | 当前状态无效。请查看 SDK 回调日志了解具体原因。 |
| `9` | 没有操作权限。请检查用户是否授予了 App 音视频设备的使用权限。 |
| `10` | 方法调用超时。有些方法调用需要 SDK 返回结果，如果 SDK 处理事件过长，超过 10 秒没有返回，会出现此错误。 |
| `17` | [error-code-html-0-11-1-unreal details](#table-slot-error-code-html-0-11-1-unreal) |
| `18` | [error-code-html-0-12-1-unreal details](#table-slot-error-code-html-0-12-1-unreal) |
| `19` | 资源已被占用，不能重复使用。 |
| `20` | SDK 放弃请求，可能由于请求的次数太多。 |
| `21` | Windows 下特定的防火墙设置导致 `RtcEngine` 初始化失败然后崩溃。 |
| `22` | SDK 分配资源失败，可能由于 App 占用资源过多或系统资源耗尽。 |
| `101` | 不是有效的 App ID。请更换有效的 App ID 重新加入频道。 |
| `102` | 不是有效的频道名。可能的原因是设置的参数数据类型不正确。请更换有效的频道名重新加入频道。 |
| `103` | 无法获取当前区域的服务器资源。请在初始化 `RtcEngine` 时尝试指定其他区域。 |
| `109` | [error-code-html-0-20-1-unreal details](#table-slot-error-code-html-0-20-1-unreal) |
| `110` | [error-code-html-0-21-1-unreal details](#table-slot-error-code-html-0-21-1-unreal) |
| `111` | 网络连接中断。SDK 在和服务器建立连接后，失去网络连接超过 4 秒。 |
| `112` | 网络连接丢失。网络连接中断，且 SDK 无法在 10 秒内连接服务器。 |
| `119` | 用户切换角色失败，请尝试重新加入频道。 |
| `120` | 解密失败。可能是用户加入频道时使用了错误的密码。请检查用户加入频道时填入的密码，或引导用户尝试重新加入频道。 |
| `121` | 该用户 ID 无效。 |
| `123` | 此用户被服务器禁止。当用户被服务端踢出时会报告这个错误。 |
| `134` | 用户账号无效，可能是因为设置了无效的参数。 |

<a id="table-slot-error-code-html-0-3-1-unreal"></a>

**error-code-html-0-3-1-unreal details**

SDK 尚未准备好。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 调用方法时用户尚未加入频道。请检查方法的调用逻辑。
- 调用 `rate` 或 `complain` 方法时用户尚未离开频道，请检查方法的调用逻辑。
- 音频模块未开启。
- 程序集不完整。

<a id="table-slot-error-code-html-0-4-1-unreal"></a>

**error-code-html-0-4-1-unreal details**

`RtcEngine` 当前状态不支持该操作。一般有以下原因：

- 使用内置加密时，设置的加密模式不正确。
- 加载外部加密库失败。
请检查加密的枚举值是否正确，或重新加载外部加密库。

<a id="table-slot-error-code-html-0-5-1-unreal"></a>

**error-code-html-0-5-1-unreal details**

方法调用被拒绝。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 在加入频道时，将频道名设为空字符 `""`。请重新设置频道名。
- 多频道场景下，在调用 `joinChannel` 方法加入频道时，设置的频道名已存在。请重新设置频道名。
- 多频道场景下，在调用 `joinChannelEx` 方法加入频道时，设置的频道名已存在。请重新设置频道名。

<a id="table-slot-error-code-html-0-11-1-unreal"></a>

**error-code-html-0-11-1-unreal details**

加入频道被拒绝。一般有以下原因：

- 用户已经在频道中。声网推荐通过 `onConnectionStateChanged` 回调判断用户是否在频道中。除非收到 `CONNECTION_STATE_DISCONNECTED`(1) 状态，否则请勿再次调用该方法加入频道。
- 用户在调用 `startEchoTest` 进行通话测试时，未调用 `stopEchoTest` 结束当前测试，就尝试加入频道。开始通话测试后，需要先调用 `stopEchoTest` 结束当前测试，再加入频道。

<a id="table-slot-error-code-html-0-12-1-unreal"></a>

**error-code-html-0-12-1-unreal details**

离开频道失败。一般有以下原因：

- 用户已离开频道，再次调用退出频道的方法，如 `leaveChannel` 时，会返回此错误。停止调用该方法即可。
- 用户尚未加入频道，就调用 `leaveChannel` 等退出频道的方法。这种情况下无需额外操作。

<a id="table-slot-error-code-html-0-20-1-unreal"></a>

**error-code-html-0-20-1-unreal details**

当前使用的 Token 过期，不再有效。请在服务端申请生成新的 Token，并调用 `renewToken` 更新 Token。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_TOKEN_EXPIRED`(9)。
:::

<a id="table-slot-error-code-html-0-21-1-unreal"></a>

**error-code-html-0-21-1-unreal details**

Token 无效。一般有以下原因：

- 在声网控制台中启用了 App 证书，但未使用 App ID + Token 鉴权。当项目启用了 App 证书，就必须使用 Token 鉴权。
- 生成 Token 时填入的 `uid` 字段，和用户加入频道时填入的 `uid` 不一致。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_INVALID_TOKEN`(8)。
:::

## 音频相关错误码 [#音频相关错误码-9]

| 枚举值 | 说明 |
| --- | --- |
| `1005` | 音频设备出现错误（未指明何种错误）。请检查音频设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1008` | 初始化播放设备出错。请检查播放设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1009` | 启动播放设备出错。请检查播放设备是否正常。 |
| `1010` | 停止播放设备出错。 |
| `1011` | 初始化录音设备出错。请检查录音设备是否正常，或者尝试重新进入频道。 |
| `1012` | 启动录音设备出错。请检查录音设备是否正常。 |
| `1013` | 停止录音设备出错。 |

## 数据流相关错误码 [#数据流相关错误码-9]

| 枚举值 | 说明 |
| --- | --- |
| `113` | 调用 `sendStreamMessage` 方法时，用户不在频道内。 |
| `114` | 调用 `sendStreamMessage` 时，发送的数据长度大于 1024 个字节。 |
| `115` | 调用 `sendStreamMessage` 时，发送数据的频率超过限制（6 KB/s）。 |
| `116` | 调用 `createDataStream` 时，创建的数据流超过限制（5 个）。 |
| `117` | 当发送端调用 `createDataStream`[1/2] 设置 `reliable` 为 `true`，或调用 `createDataStream`[2/2] 设置 `DataStreamConfig.ordered` 为 `true` 时，若接收端在 5 秒内未收到数据，或检测到数据丢失，将在接收端触发 `onStreamMessageError` 回调并返回错误码 `117`。 |

## 其他错误码 [#其他错误码-9]

| 枚举值 | 说明 |
| --- | --- |
| `130` | SDK 不支持将加密过的流推到 CDN 上。 |
| `1001` | 加载媒体引擎失败。 |
| `1501` | 没有摄像头使用权限。请检查是否已经打开摄像头权限。 |
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="web" platform="blueprint" />
:::info[信息]
- SDK 在返回错误码时，可能会返回一个负数。这个负数对应着错误码里的正整数。例如返回 `-2`，则对应错误码里的 `2`。
  - 本文中出现的 API 名称以 C++ 为准，其他平台的 API 名称可能会有所不同，请查阅对应平台的 API 文档。
:::

本节所列错误码适用于以下平台的声网 RTC v4.x SDK：

- 原生平台：Android、iOS、macOS、Windows、HarmonyOS NEXT。
- 第三方框架（即基于原生平台封装的第三方平台）：Electron、Unity、React Native、Flutter、Unreal。

声网 SDK 在运行过程中，可能通过如下方式返回错误码：

- 在方法调用失败的返回值中，返回一个负数，这个负数就对应着错误码的正数。
- 通过 `onError` 回调报告错误码。

## 通用错误码 [#通用错误码-10]

| 枚举值 | 说明 |
| --- | --- |
| `1` | 一般性的错误（没有明确归类的错误原因）。请重新调用方法。 |
| `2` | 方法中设置了无效的参数。例如指定的频道名中含有非法字符。请重新设置参数。 |
| `3` | [error-code-html-0-3-1-blueprint details](#table-slot-error-code-html-0-3-1-blueprint) |
| `4` | [error-code-html-0-4-1-blueprint details](#table-slot-error-code-html-0-4-1-blueprint) |
| `5` | [error-code-html-0-5-1-blueprint details](#table-slot-error-code-html-0-5-1-blueprint) |
| `6` | 缓冲区大小不足以存放返回的数据。 |
| `7` | `RtcEngine` 尚未初始化就调用方法。请确认在调用该方法前已创建 `RtcEngine` 对象并完成初始化。 |
| `8` | 当前状态无效。请查看 SDK 回调日志了解具体原因。 |
| `9` | 没有操作权限。请检查用户是否授予了 App 音视频设备的使用权限。 |
| `10` | 方法调用超时。有些方法调用需要 SDK 返回结果，如果 SDK 处理事件过长，超过 10 秒没有返回，会出现此错误。 |
| `17` | [error-code-html-0-11-1-blueprint details](#table-slot-error-code-html-0-11-1-blueprint) |
| `18` | [error-code-html-0-12-1-blueprint details](#table-slot-error-code-html-0-12-1-blueprint) |
| `19` | 资源已被占用，不能重复使用。 |
| `20` | SDK 放弃请求，可能由于请求的次数太多。 |
| `21` | Windows 下特定的防火墙设置导致 `RtcEngine` 初始化失败然后崩溃。 |
| `22` | SDK 分配资源失败，可能由于 App 占用资源过多或系统资源耗尽。 |
| `101` | 不是有效的 App ID。请更换有效的 App ID 重新加入频道。 |
| `102` | 不是有效的频道名。可能的原因是设置的参数数据类型不正确。请更换有效的频道名重新加入频道。 |
| `103` | 无法获取当前区域的服务器资源。请在初始化 `RtcEngine` 时尝试指定其他区域。 |
| `109` | [error-code-html-0-20-1-blueprint details](#table-slot-error-code-html-0-20-1-blueprint) |
| `110` | [error-code-html-0-21-1-blueprint details](#table-slot-error-code-html-0-21-1-blueprint) |
| `111` | 网络连接中断。SDK 在和服务器建立连接后，失去网络连接超过 4 秒。 |
| `112` | 网络连接丢失。网络连接中断，且 SDK 无法在 10 秒内连接服务器。 |
| `119` | 用户切换角色失败，请尝试重新加入频道。 |
| `120` | 解密失败。可能是用户加入频道时使用了错误的密码。请检查用户加入频道时填入的密码，或引导用户尝试重新加入频道。 |
| `121` | 该用户 ID 无效。 |
| `123` | 此用户被服务器禁止。当用户被服务端踢出时会报告这个错误。 |
| `134` | 用户账号无效，可能是因为设置了无效的参数。 |

<a id="table-slot-error-code-html-0-3-1-blueprint"></a>

**error-code-html-0-3-1-blueprint details**

SDK 尚未准备好。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 调用方法时用户尚未加入频道。请检查方法的调用逻辑。
- 调用 `rate` 或 `complain` 方法时用户尚未离开频道，请检查方法的调用逻辑。
- 音频模块未开启。
- 程序集不完整。

<a id="table-slot-error-code-html-0-4-1-blueprint"></a>

**error-code-html-0-4-1-blueprint details**

`RtcEngine` 当前状态不支持该操作。一般有以下原因：

- 使用内置加密时，设置的加密模式不正确。
- 加载外部加密库失败。
请检查加密的枚举值是否正确，或重新加载外部加密库。

<a id="table-slot-error-code-html-0-5-1-blueprint"></a>

**error-code-html-0-5-1-blueprint details**

方法调用被拒绝。一般有以下原因：

- `RtcEngine` 初始化失败。请重新初始化 `RtcEngine`。
- 在加入频道时，将频道名设为空字符 `""`。请重新设置频道名。
- 多频道场景下，在调用 `joinChannel` 方法加入频道时，设置的频道名已存在。请重新设置频道名。
- 多频道场景下，在调用 `joinChannelEx` 方法加入频道时，设置的频道名已存在。请重新设置频道名。

<a id="table-slot-error-code-html-0-11-1-blueprint"></a>

**error-code-html-0-11-1-blueprint details**

加入频道被拒绝。一般有以下原因：

- 用户已经在频道中。声网推荐通过 `onConnectionStateChanged` 回调判断用户是否在频道中。除非收到 `CONNECTION_STATE_DISCONNECTED`(1) 状态，否则请勿再次调用该方法加入频道。
- 用户在调用 `startEchoTest` 进行通话测试时，未调用 `stopEchoTest` 结束当前测试，就尝试加入频道。开始通话测试后，需要先调用 `stopEchoTest` 结束当前测试，再加入频道。

<a id="table-slot-error-code-html-0-12-1-blueprint"></a>

**error-code-html-0-12-1-blueprint details**

离开频道失败。一般有以下原因：

- 用户已离开频道，再次调用退出频道的方法，如 `leaveChannel` 时，会返回此错误。停止调用该方法即可。
- 用户尚未加入频道，就调用 `leaveChannel` 等退出频道的方法。这种情况下无需额外操作。

<a id="table-slot-error-code-html-0-20-1-blueprint"></a>

**error-code-html-0-20-1-blueprint details**

当前使用的 Token 过期，不再有效。请在服务端申请生成新的 Token，并调用 `renewToken` 更新 Token。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_TOKEN_EXPIRED`(9)。
:::

<a id="table-slot-error-code-html-0-21-1-blueprint"></a>

**error-code-html-0-21-1-blueprint details**

Token 无效。一般有以下原因：

- 在声网控制台中启用了 App 证书，但未使用 App ID + Token 鉴权。当项目启用了 App 证书，就必须使用 Token 鉴权。
- 生成 Token 时填入的 `uid` 字段，和用户加入频道时填入的 `uid` 不一致。

:::info[废弃]
该错误码已废弃。请改用 `onConnectionStateChanged` 回调中的 `CONNECTION_CHANGED_INVALID_TOKEN`(8)。
:::

## 音频相关错误码 [#音频相关错误码-10]

| 枚举值 | 说明 |
| --- | --- |
| `1005` | 音频设备出现错误（未指明何种错误）。请检查音频设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1008` | 初始化播放设备出错。请检查播放设备是否被其他应用占用，或者尝试重新进入频道。 |
| `1009` | 启动播放设备出错。请检查播放设备是否正常。 |
| `1010` | 停止播放设备出错。 |
| `1011` | 初始化录音设备出错。请检查录音设备是否正常，或者尝试重新进入频道。 |
| `1012` | 启动录音设备出错。请检查录音设备是否正常。 |
| `1013` | 停止录音设备出错。 |

## 数据流相关错误码 [#数据流相关错误码-10]

| 枚举值 | 说明 |
| --- | --- |
| `113` | 调用 `sendStreamMessage` 方法时，用户不在频道内。 |
| `114` | 调用 `sendStreamMessage` 时，发送的数据长度大于 1024 个字节。 |
| `115` | 调用 `sendStreamMessage` 时，发送数据的频率超过限制（6 KB/s）。 |
| `116` | 调用 `createDataStream` 时，创建的数据流超过限制（5 个）。 |
| `117` | 当发送端调用 `createDataStream`[1/2] 设置 `reliable` 为 `true`，或调用 `createDataStream`[2/2] 设置 `DataStreamConfig.ordered` 为 `true` 时，若接收端在 5 秒内未收到数据，或检测到数据丢失，将在接收端触发 `onStreamMessageError` 回调并返回错误码 `117`。 |

## 其他错误码 [#其他错误码-10]

| 枚举值 | 说明 |
| --- | --- |
| `130` | SDK 不支持将加密过的流推到 CDN 上。 |
| `1001` | 加载媒体引擎失败。 |
| `1501` | 没有摄像头使用权限。请检查是否已经打开摄像头权限。 |
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="web" platform="web" />
SDK 可能以下列方式抛出错误码：

- 对于异步方法，SDK 返回 Promise 来通知异步操作的结果，Promise 被 reject 时 SDK 会抛出相应的错误码。
- 同步方法调用失败时，SDK 直接抛出错误码。
- SDK 内部运行过程中，也可能抛出一些网络相关的错误码。

你可参考本文了解这些错误码的详细含义及处理方法。

SDK 的错误码对象 `AgoraRTCError` 继承自浏览器的 [Error 对象](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error)。你需要通过 `AgoraRTCError.code` 在控制台上打印出错误码，直接打印 `AgoraRTCError` 对象只能看到错误信息。

## 通用错误码 [#通用错误码-11]

| 错误码 | 描述 | 处理方法 |
| --- | --- | --- |
| `UNEXPECTED_ERROR` | 无法处理的、非预期的错误，通常这个错误会有具体的错误提示。 | 无。 |
| `UNEXPECTED_RESPONSE` | 服务端返回了非预期的响应。这个错误通常是在网络问题导致客户端与服务端状态不一致时抛出。 | 等待网络稳定后重试该操作。 |
| `INVALID_PARAMS` | 非法参数。 | 根据具体提示确认操作，并根据文档传入正确的参数。 |
| `NOT_SUPPORTED` | 浏览器不支持。 | 参考[浏览器支持情况](/zh-CN/realtime-media/rtc/reference/browser-compatibility)。 |
| `INVALID_OPERATION` | 非法操作，通常是因为在当前状态不能进行该操作。 | 确认操作的先后顺序，比如发布前请确认已经加入频道。 |
| `OPERATION_ABORTED` | 操作中止，通常是因为网络质量差或连接断开导致与声网服务器通信失败。 | 通过 [AgoraRTCClient.on("user-joined")](/zh-CN/api-reference/rtc/web/interfaces/iagorartcclient#event_user_joined) 回调确认本地网络状况，并重试该操作。 |
| `WEB_SECURITY_RESTRICT` | 浏览器安全策略限制。 | 请确保 Web 页面运行在[安全环境](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts)中。 |
| `NO_ACTIVE_STATUS` | 声网项目未激活或被禁用。 | 请前往声网控制台确认项目状态是否为启用。 |

## 请求相关错误码 [#请求相关错误码]
### 网络连接 [#网络连接]

| 错误码 | 描述 | 处理方法 |
| --- | --- | --- |
| `NETWORK_TIMEOUT` | 请求超时，通常是因为网络质量差或连接断开导致与声网服务器通信失败。 | 通过 [AgoraRTCClient.on("user-joined")](/zh-CN/api-reference/rtc/web/interfaces/iagorartcclient#event_user_joined) 回调确认本地网络状况，并重试该操作。 |
| `NETWORK_RESPONSE_ERROR` | 响应错误，一般是状态码非法。 | 确认操作的参数是否正确，并根据文档传入正确的参数。 |
| `NETWORK_ERROR` | 无法定位的网络错误。 | 无。 |

### SDK 内部请求 [#sdk-内部请求]

| 错误码 | 描述 | 处理方法 |
| --- | --- | --- |
| `WS_ABORT` | 请求声网服务器过程中 WebSocket 断开。 | 监听 [AgoraRTCClient.on("connection-state-change")](/zh-CN/api-reference/rtc/web/interfaces/iagorartcclient#event_connection_state_change) 事件，待连接状态变为 `CONNECTED` 后重试。 |
| `WS_DISCONNECT` | 请求声网服务器前，WebSocket 就已经断开。 | 监听 [AgoraRTCClient.on("connection-state-change")](/zh-CN/api-reference/rtc/web/interfaces/iagorartcclient#event_connection_state_change) 事件，待连接状态变为 `CONNECTED` 后重试。 |
| `WS_ERR` | WebSocket 连接发生错误。 | 检查当前浏览器对 WebSocket 的支持情况。 |

## 设备管理相关错误码 [#设备管理相关错误码]

| 错误码 | 描述 | 处理方法 |
| --- | --- | --- |
| `ENUMERATE_DEVICES_FAILED` | 枚举本地设备失败，一般是由于浏览器限制。 | 无。 |
| `DEVICE_NOT_FOUND` | 无法找到指定设备。 | 传入正确的设备 ID。 |

## Track 相关错误码 [#track-相关错误码]

| 错误码 | 描述 | 处理方法 |
| --- | --- | --- |
| `TRACK_IS_DISABLED` | 轨道被禁用，通常因为轨道设置了 [Track.setEnabled(false)](/zh-CN/api-reference/rtc/web/interfaces/ilocaltrack#setenabled)。 | 对该轨道调用 [Track.setEnabled(true)](/zh-CN/api-reference/rtc/web/interfaces/ilocaltrack#setenabled) 后再进行操作。 |
| `SHARE_AUDIO_NOT_ALLOWED` | 屏幕共享音频时终端用户没有点击分享音频。 | 要求终端用户在弹出的屏幕共享窗口中勾选分享音频。 |
| `MEDIA_OPTION_INVALID` | 不支持的媒体采集的参数。 | 修改媒体采集参数或使用 SDK 预设的配置。 |
| `CONSTRAINT_NOT_SATISFIED` | 不支持的媒体采集的参数。 | 修改媒体采集参数或使用 SDK 预设的配置。 |
| `PERMISSION_DENIED` | 获取媒体设备权限被拒绝。 | 在弹出的获取设备权限窗口中选择允许。 |
| `NOT_READABLE` | 用户已经授权，但媒体设备无法访问。 | 检查当前采集设备和驱动程序是否出错。 |
| `FETCH_AUDIO_FILE_FAILED` | 下载在线音频文件失败。 | 填入正确的在线音频地址，并确保可以正常访问。 |
| `READ_LOCAL_AUDIO_FILE_ERROR` | 读取本地音频文件失败。 | 填入正确的本地音频文件路径。 |
| `DECODE_AUDIO_FILE_FAILED` | 音频文件解码失败，可能是因为音频文件的编码格式是浏览器 WebAudio 不支持的编码格式。 | 检查浏览器 WebAudio 是否支持音频文件的编码格式。 |

## Client 相关错误码 [#client-相关错误码]
### 加入频道 [#加入频道]
下表列出加入频道失败时 SDK 抛出的错误码。

| 错误码 | 描述 | 处理方法 |
| --- | --- | --- |
| `UID_CONFLICT` | 同一个频道内 UID 重复。 | 使用不同的 UID 进入频道。 |
| `INVALID_UINT_UID_FROM_STRING_UID` | String UID 分配服务返回了非法的 int UID。 | 使用不同的 UID 进入频道。 |
| `CAN_NOT_GET_PROXY_SERVER` | 无法获取云代理服务地址。 | 无。 |
| `CAN_NOT_GET_GATEWAY_SERVER` | 无法获取声网服务器地址。 | 无。 |

### 发布/取消发布 [#发布取消发布]
下表列出发布或取消发布失败时 SDK 抛出的错误码。

| 错误码 | 描述 | 处理方法 |
| --- | --- | --- |
| `INVALID_LOCAL_TRACK` | 传入了非法的 LocalTrack。 | 检查传入的 Track，并传入正确的 LocalTrack。 |
| `CAN_NOT_PUBLISH_MULTIPLE_VIDEO_TRACKS` | 一个 Client 发布多个视频轨道。 | 一个 Client 同一时间只能发布一个视频轨道，如果想发布多个视频轨道请创建多个 Client。 |

### 订阅/取消订阅 [#订阅取消订阅]
下表列出订阅或取消订阅失败时 SDK 抛出的错误码。

| 错误码 | 描述 | 处理方法 |
| --- | --- | --- |
| `INVALID_REMOTE_USER` | 非法的远端用户，可能是远端用户不在频道内或还未发布任何媒体轨道。 | 收到 [AgoraRTCClient.on("user-published")](/zh-CN/api-reference/rtc/web/interfaces/iagorartcclient#event_user_published) 事件后再进行订阅操作。 |
| `REMOTE_USER_IS_NOT_PUBLISHED` | 远端用户已发布了音频或视频轨道，但不是与你的订阅操作所指定的类型不符。 | 请确保订阅操作传入的轨道类型需要与 [AgoraRTCClient.on("user-published")](/zh-CN/api-reference/rtc/web/interfaces/iagorartcclient#event_user_published) 事件给出的类型一致，或者在订阅前通过 [AgoraRTCRemoteUser.hasVideo](/zh-CN/api-reference/rtc/web/interfaces/iagorartcremoteuser#hasvideo) 和 [AgoraRTCRemoteUser.hasAudio](/zh-CN/api-reference/rtc/web/interfaces/iagorartcremoteuser#hasaudio) 确认远端用户是否发布了该类型的轨道。 |
| `ERR_TOO_MANY_BROADCASTERS` | 频道内主播人数超过上限。 | 控制主播人数。例如：仅在用户需要发布音视频轨道的时候调用 [Client.setClientRole](/zh-CN/api-reference/rtc/web/interfaces/iagorartcclient#setclientrole)，将用户角色切换为主播。 |
| `ERR_TOO_MANY_SUBSCRIBERS` | 当前用户订阅的主播人数超过上限。 | 按需订阅主播。 |

## 推流到 CDN [#推流到-cdn]
下表列出推流到 CDN 失败时 SDK 抛出的错误码。

| 错误码 | 描述 | 处理方法 |
| --- | --- | --- |
| `LIVE_STREAMING_TASK_CONFLICT` | 推流任务已经存在。 | 先调用 [Client.stopLiveStreaming](/zh-CN/api-reference/rtc/web/interfaces/iagorartcclient#stoplivestreaming) 停止该推流任务再重新进行推流操作。 |
| `LIVE_STREAMING_INVALID_ARGUMENT` | 推流参数错误。 | 参考 [Client.startLiveStreaming](/zh-CN/api-reference/rtc/web/interfaces/iagorartcclient#startlivestreaming) 的 API 文档检查推流操作的参数。 |
| `LIVE_STREAMING_INTERNAL_SERVER_ERROR` | 推流服务器内部错误。 | 重新进行推流操作，如果仍然失败，刷新页面重试。 |
| `LIVE_STREAMING_PUBLISH_STREAM_NOT_AUTHORIZED` | 推流 URL 被占用。 | 检查填入的 URL 是否被占用。 |
| `LIVE_STREAMING_CDN_ERROR` | 推流的目标 CDN 出现错误导致推流失败。 | 确认目标 CDN 的健康状况。 |
| `LIVE_STREAMING_INVALID_RAW_STREAM` | 推流超时。 | 确认目标流是否存在。 |

## 跨频道连麦 [#跨频道连麦]
下表列出跨频道连麦失败时 SDK 抛出的错误码。

| 错误码 | 描述 |
| --- | --- |
| `CROSS_CHANNEL_WAIT_STATUS_ERROR` | 等待 [AgoraRTCClient.on("channel-media-relay-state")](/zh-CN/api-reference/rtc/web/interfaces/iagorartcclient#event_channel_media_relay_state) 回调出错。 |
| `CROSS_CHANNEL_FAILED_JOIN_SRC` | 发起跨频道转发媒体流请求失败。 |
| `CROSS_CHANNEL_FAILED_JOIN_DEST` | 接受跨频道转发媒体流请求失败。 |
| `CROSS_CHANNEL_FAILED_PACKET_SENT_TO_DEST` | 服务器接收跨频道转发媒体流失败。 |
| `CROSS_CHANNEL_SERVER_ERROR_RESPONSE` | 服务器响应出错。 |
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="web" platform="mini-program" />
调用声网 RTC 小程序 API 或运行时，SDK 可能会返回一个错误码对象，也可能会返回一个错误码：

- 错误码对象：包含错误码和对报错原因的描述，你可以根据 `reason` 中的描述自行判断发生引起错误的原因，然后进行排查
- 错误码：该类错误码中没有相应的`reason`，你可以对照错误码参考本文进行排查。

| 错误码 | 报错原因 | 排查方法 |
| --- | --- | --- |
| `401` | 请求异常 | 根据 `reason` 描述检查使用是否符合要求；如果报的是 `invalid vendor key`，请开通小程序服务权限，详见[开启小程序服务](/zh-CN/realtime-media/rtc/build/setup-and-access/enable-service#开启小程序服务)。 |
| `429` | 请求太频繁 | 根据 `reason` 描述检查使用是否符合要求。 |
| `430` | [error-code-mini-program-html-0-3-1 details](#table-slot-error-code-mini-program-html-0-3-1) | 根据 `reason` 描述检查使用是否符合要求。 |
| `431` | [error-code-mini-program-html-0-4-1 details](#table-slot-error-code-mini-program-html-0-4-1) | 根据 `reason` 描述检查使用是否符合要求。 |
| `432` | 订阅了一个非主播的 `uid` | 根据 `reason` 描述检查使用是否符合要求。 |
| `433` | [error-code-mini-program-html-0-6-1 details](#table-slot-error-code-mini-program-html-0-6-1) | 根据 `reason` 描述检查使用是否符合要求。 |
| `434` | [error-code-mini-program-html-0-7-1 details](#table-slot-error-code-mini-program-html-0-7-1) | 根据 `reason` 描述检查使用是否符合要求。 |
| `500` | 内部错误 | 退出频道并销毁 `client` 对象后，重建 `client` 对象，调用 `rejoin` 方法尝试重连。 |
| `501` | 服务进程异常失去连接 | 退出频道并销毁 `client` 对象后，重建 `client` 对象，调用 `rejoin` 方法尝试重连。 |
| `502` | 当前服务器过载 | 退出频道并销毁 `client` 对象后，重建 `client` 对象，调用 `rejoin` 方法尝试重连。 |
| `503` | 服务进程正常退出 | 无。 |
| `901` | 未找到服务器 | 检查是否开启小程序的服务权限；也可能是没有配置域名或 `uid` 参数格式不正确；你还可以检查网络；检查传入的 `App ID`、Token 是否有效。 |
| `903` | 发送消息超时 | 鉴权失败，可能是因为未填入 Token；也可能是因为网络连接状况不理想，请检查网络。 |
| `904` | websocket 断开 | 退出频道并销毁 `client` 对象后，重建 `client` 对象，调用 `rejoin` 方法尝试重连。 |
| `905` | websocket 连接失败 | 退出频道并销毁 `client` 对象后，重建 `client` 对象，调用 `rejoin` 方法尝试重连。 |

<a id="table-slot-error-code-mini-program-html-0-3-1"></a>

**error-code-mini-program-html-0-3-1 details**

- 在订阅前尝试 mute 远端流
- 在订阅前尝试 unmute 远端流
- 请求异常

<a id="table-slot-error-code-mini-program-html-0-4-1"></a>

**error-code-mini-program-html-0-4-1 details**

- `setRole` 传入的参数错误
- 加入频道失败
- 登录时的 role 传入出错
- 加入频道时的 `uid` 传入出错
- 重复加入频道，且 `uid` 不匹配

<a id="table-slot-error-code-mini-program-html-0-6-1"></a>

**error-code-mini-program-html-0-6-1 details**

- 观众端无法发布流
- 观众端无法取消发布流

<a id="table-slot-error-code-mini-program-html-0-7-1"></a>

**error-code-mini-program-html-0-7-1 details**

- 在加入频道前尝试退出在加入频道前尝试`setRole`发布流时的 `uid` 和加入频道时的 `uid` 不一致
- 取消发布流时的 `uid` 和加入频道时的 `uid` 不一致
- 更新 URL 时的 `uid` 和加入频道时的 `uid` 不一致
<_PlatformProcessedMarker close="true" />
</_PlatformTabsGroup>
