声网 Web SDK 是通过 HTML 网页加载的 JavaScript 和 Typescript 库。你可以使用声网 Web SDK 在网页浏览器中调用 API 建立连接,控制音视频通话和直播服务。
请务必使用 HTTPS 协议或者 localhost,否则 SDK 无法正常工作。
AgoraRTC 是声网 Web SDK 中所有可调用方法的入口,主要包含以下方法。
方法 | 描述 |
---|---|
createClient | 创建本地客户端 |
方法 | 描述 |
---|---|
createMicrophoneAudioTrack | 通过麦克风创建一个音频轨道对象 |
createCameraVideoTrack | 通过摄像头创建一个视频轨道对象 |
createMicrophoneAndCameraTracks | 同时创建麦克风音频轨道和摄像头视频轨道 |
createScreenVideoTrack | 通过屏幕共享创建一个视频轨道对象 |
createBufferSourceAudioTrack | 通过音频文件创建一个音频轨道对象 |
createCustomAudioTrack | 创建一个自定义的音频轨道对象 |
createCustomVideoTrack | 创建一个自定义的视频轨道对象 |
方法 | 描述 |
---|---|
getDevices | 获取媒体设备列表 |
getCameras | 获取摄像头列表 |
getMicrophones | 获取麦克风列表 |
getPlaybackDevices | 获取音频播放设备列表 |
getElectronScreenSources | 获取 Electron 屏幕共享源列表 |
方法 | 描述 |
---|---|
enableLogUpload | 打开日志上传功能 |
disableLogUpload | 关闭日志上传功能 |
setLogLevel | 设置日志等级 |
回调 | 描述 |
---|---|
onCameraChanged | 视频采集设备状态变化回调 |
onMicrophoneChanged | 音频采集设备状态变化回调 |
onAudioAutoplayFailed | 音频轨道自动播放失败回调 |
方法 | 描述 |
---|---|
checkSystemRequirements | 检测浏览器兼容性 |
getSupportedCodec | 获取支持的编码格式 |
createChannelMediaRelayConfiguration | 创建跨频道媒体流转发的配置对象 |
调用 createClient 创建一个本地客户端对象 AgoraRTCClient,代表一个通话中的本地用户。AgoraRTCClient
类提供音视频通话的核心功能,主要包含以下方法。
方法 | 描述 |
---|---|
join | 加入频道 |
leave | 离开频道 |
publish | 发布本地音视频轨道 |
unpublish | 取消发布本地音视频轨道 |
subscribe | 订阅远端用户的音视频轨道 |
unsubscribe | 取消订阅远端用户的音视频轨道 |
LocalTrack
是声网 Web SDK 中定义本地音视频轨道的抽象类,可用于本地播放和发布。
SDK 通过不同的方式创建不同的 LocalTrack
,返回不同的 LocalTrack
派生类对象。以下列举了所有的 LocalTrack
派生类以及所对应的创建方式。
根据创建方式的不同,本地音频轨道可分为以下三种。其中 LocalAudioTrack
派生自 LocalTrack
,MicrophoneAudioTrack
和 BufferSourceAudioTrack
派生自 LocalAudioTrack
。
本地音频轨道 | 描述 |
---|---|
LocalAudioTrack | 最基础的本地音频轨道对象,包含了基础的本地音频控制,如播放、设置音量控制。 通过调用 AgoraRTC.createCustomAudioTrack 创建。 |
MicrophoneAudioTrack | 本地麦克风音频轨道对象,比 LocalAudioTrack 多一些控制麦克风的方法。 通过调用 AgoraRTC.createMicrophoneAudioTrack 创建。 |
BufferSourceAudioTrack | 通过读取音频数据源创建的本地音频轨道,比基础的 LocalAudioTrack 多一些控制音频数据源的方法。 通过调用 AgoraRTC.createBufferSourceAudioTrack 创建。 |
根据创建方式的不同,本地视频可分为以下两种。其中 LocalVideoTrack
派生自 LocalTrack
,CameraVideoTrack
派生自 LocalVideoTrack
。
本地视频轨道 | 描述 |
---|---|
LocalVideoTrack | 最基础的本地视频轨道对象,包含了基础的本地视频控制,如播放、美颜。 通过调用 AgoraRTC.createCustomVideoTrack 或 AgoraRTC.createScreenVideoTrack 创建。 |
CameraVideoTrack | 本地摄像头视频轨道对象,比 LocalVideoTrack 多一些控制摄像头和编码参数的方法。 通过调用 AgoraRTC.createCameraVideoTrack 创建。 |
RemoteTrack
是声网 Web SDK 中用于定义远端音视频轨道的抽象类。
在实际操作中,你需要先调用 AgoraRTCClient.subscribe 订阅远端用户,然后从远端用户对象 AgoraRTCRemoteUser 中获取派生自 RemoteTrack
的 RemoteAudioTrack 对象和 RemoteVideoTrack 对象。
如果你通过 <script>
的方式引入声网 Web SDK,可以通过访问 AgoraRTC.createClient 来获取导出的模块。
如果你通过 npm
或者模块化的方式引入声网 Web SDK,可以通过以下方式访问 AgoraRTC
:
import AgoraRTC from "agora-rtc-sdk-ng";
console.log(AgoraRTC.createClient);
对于 Typescript 开发者,我们提供了 .d.ts
文件导出详细的类型定义。通过 npm 集成 SDK 后,你可以在 node_modules/agora-rtc-sdk-ng
路径下找到该文件。API 文档的 Global 页面列出了所有 SDK 导出的模块和类型。
import AgoraRTC, { IAgoraRTCClient } from "agora-rtc-sdk-ng";
const client: IAgoraRTCClient = AgoraRTC.createClient();
SDK 可能以下列方式抛出错误码:
你可参考本文了解这些错误码的详细含义及处理方法。
AgoraRTCError
继承自浏览器的 Error 对象。你需要通过 AgoraRTCError.code
在控制台上打印出错误码,直接打印 AgoraRTCError
对象只能看到错误信息。错误码 | 描述 | 处理方法 |
---|---|---|
UNEXPECTED_ERROR |
无法处理的、非预期的错误,通常这个错误会有具体的错误提示。 | 无 |
UNEXPECTED_RESPONSE |
服务端返回了非预期的响应。这个错误通常是在网络问题导致客户端与服务端状态不一致时抛出。 | 等待网络稳定后重试该操作。 |
INVALID_PARAMS |
非法参数。 | 根据具体提示确认操作,并根据文档传入正确的参数。 |
NOT_SUPPORTED |
浏览器不支持。 | 参考浏览器支持情况。 |
INVALID_OPERATION |
非法操作,通常是因为在当前状态不能进行该操作。 | 确认操作的先后顺序,比如发布前请确认已经加入频道。 |
OPERATION_ABORTED |
操作中止,通常是因为网络质量差或连接断开导致与声网服务器通信失败。 | 通过 AgoraRTCClient.on("user-joined") 回调确认本地网络状况,并重试该操作。 |
WEB_SECURITY_RESTRICT |
浏览器安全策略限制。 | 请确保 Web 页面运行在安全环境中。 |
NO_ACTIVE_STATUS |
声网项目未激活或被禁用。 | 请前往声网控制台确认项目状态是否为启用。 |
网络连接
错误码 | 描述 | 处理方法 |
---|---|---|
NETWORK_TIMEOUT |
请求超时,通常是因为网络质量差或连接断开导致与声网服务器通信失败。 | 通过 AgoraRTCClient.on("user-joined") 回调确认本地网络状况,并重试该操作。 |
NETWORK_RESPONSE_ERROR |
响应错误,一般是状态码非法。 | 确认操作的参数是否正确,并根据文档传入正确的参数。 |
NETWORK_ERROR |
无法定位的网络错误。 | 无 |
SDK 内部请求
错误码 | 描述 | 处理方法 |
---|---|---|
WS_ABORT |
请求声网服务器过程中 WebSocket 断开。 | 监听 AgoraRTCClient.on("connection-state-change") 事件,待连接状态变为 CONNECTED 后重试。 |
WS_DISCONNECT |
请求声网服务器前,WebSocket 就已经断开。 | 监听 AgoraRTCClient.on("connection-state-change") 事件,待连接状态变为 CONNECTED 后重试。 |
WS_ERR |
WebSocket 连接发生错误。 | 检查当前浏览器对 WebSocket 的支持情况。 |
错误码 | 描述 | 处理方法 |
---|---|---|
ENUMERATE_DEVICES_FAILED |
枚举本地设备失败,一般是由于浏览器限制。 | 无 |
DEVICE_NOT_FOUND |
无法找到指定设备。 | 传入正确的设备 ID。 |
错误码 | 描述 | 处理方法 |
---|---|---|
TRACK_IS_DISABLED |
轨道被禁用,通常因为轨道设置了 Track.setEnabled(false)。 | 对该轨道调用 Track.setEnabled(true) 后再进行操作。 |
SHARE_AUDIO_NOT_ALLOWED |
屏幕共享音频时终端用户没有点击分享音频。 | 要求终端用户在弹出的屏幕共享窗口中勾选分享音频。 |
CHROME_PLUGIN_NO_RESPONSE |
Chrome 屏幕共享插件无响应。 | 确认 Chrome 屏幕共享插件的状态或重新安装屏幕共享插件。 |
CHROME_PLUGIN_NOT_INSTALL |
Chrome 屏幕共享插件没有安装。 | 安装 Chrome 屏幕共享插件。 |
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 是否支持音频文件的编码格式。 |
加入频道
下表列出加入频道失败时 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") 事件后再进行订阅操作。 |
REMOTE_USER_IS_NOT_PUBLISHED |
远端用户已发布了音频或视频轨道,但不是与你的订阅操作所指定的类型不符。 | 请确保订阅操作传入的轨道类型需要与 AgoraRTCClient.on("user-published")) 事件给出的类型一致,或者在订阅前通过 AgoraRTCRemoteUser.hasVideo 和 AgoraRTCRemoteUser.hasAudio 确认远端用户是否发布了该类型的轨道。 |
ERR_TOO_MANY_BROADCASTERS |
频道内主播人数超过上限。 | 控制主播人数。例如:仅在用户需要发布音视频轨道的时候调用 Client.setClientRole,将用户角色切换为主播。 |
ERR_TOO_MANY_SUBSCRIBERS |
当前用户订阅的主播人数超过上限。 | 按需订阅主播。 |
下表列出推流到 CDN 失败时 SDK 抛出的错误码。
错误码 | 描述 | 处理方法 |
---|---|---|
LIVE_STREAMING_TASK_CONFLICT |
推流任务已经存在。 | 先调用 Client.stopLiveStreaming 停止该推流任务再重新进行推流操作。 |
LIVE_STREAMING_INVALID_ARGUMENT |
推流参数错误。 | 参考 Client.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") 回调出错。 |
CROSS_CHANNEL_FAILED_JOIN_SRC |
发起跨频道转发媒体流请求失败。 |
CROSS_CHANNEL_FAILED_JOIN_DEST |
接受跨频道转发媒体流请求失败。 |
CROSS_CHANNEL_FAILED_PACKET_SENT_TO_DEST |
服务器接收跨频道转发媒体流失败。 |
CROSS_CHANNEL_SERVER_ERROR_RESPONSE |
服务器响应出错。 |