Interface IAgoraRTCClient
提供音视频通话的核心功能,比如加入频道、发布和订阅音视频轨道等。
你可以通过 createClient 创建一个 AgoraRTCClient
对象。一个 AgoraRTCClient
对象代表一个本地客户端。
Events
channel-media-relay-event
channel-media-relay-state
channel-media-relay-state(state: ChannelMediaRelayState, code: ChannelMediaRelayError): void
跨频道媒体流转发状态回调。
当跨频道媒体流转发状态发生改变时,SDK 会触发该回调,并报告当前的转发状态以及相关的错误信息。
回调会携带当前跨频道媒体流转发服务的状态 ChannelMediaRelayState,如果状态异常,相应的错误码可以通过 ChannelMediaRelayError 获取(比如 token 过期,重连失败等)。
参数
参数名 | 类型 | 描述 |
---|---|---|
state | 跨频道媒体流转发服务的状态。 | |
code | 跨频道媒体流转发错误码。 |
返回值
void
connection-state-change
connection-state-change(curState: ConnectionState, revState: ConnectionState, reason?: ConnectionDisconnectedReason): void
SDK 与服务器的连接状态发生改变回调。
参数
参数名 | 类型 | 描述 |
---|---|---|
curState | 当前的连接状态。 | |
revState | 之前的连接状态。 | |
reason | 如果 |
返回值
void
content-inspect-connection-state-change
content-inspect-connection-state-change(preState: InspectState, newState: InspectState): void
视频截图上传服务的连接状态发生改变回调。
client.on("content-inspect-connection-state-change", (preState, state) => {
console.error(`Content Inspect Connection State Change: ${preState} -> ${state}` )
})
参数
参数名 | 类型 | 描述 |
---|---|---|
preState | 之前的连接状态。 | |
newState | 新的连接状态。 |
返回值
void
content-inspect-error
content-inspect-error(error?: AgoraRTCError): void
开启视频截图上传服务出错回调。
参数
参数名 | 类型 | 描述 | ||||||
---|---|---|---|---|---|---|---|---|
error | AgoraRTCError | 抛出的错误。目前包括:
|
返回值
void
crypt-error
crypt-error(): void
解密失败回调。
该回调表示用户在订阅过程中出现了解密失败,通常是由于和发布端设置的加密参数不一致导致的。详见 setEncryptionConfig。
返回值
void
exception
exception(event: object): void
SDK 监测到异常事件回调。
该回调报告频道内 SDK 监测出的异常事件。
异常事件不是错误,但是一般会引起通话质量问题。发生异常事件后,如果恢复正常,也会收到该回调。
每个异常事件都有对应的恢复事件。
异常事件见下表:
事件码 | 提示消息 | 异常 |
---|---|---|
1001 | FRAMERATE_INPUT_TOO_LOW | 视频采集帧率过低 |
1002 | FRAMERATE_SENT_TOO_LOW | 视频发送帧率过低 |
1003 | SEND_VIDEO_BITRATE_TOO_LOW | 视频发送码率过低 |
1005 | RECV_VIDEO_DECODE_FAILED | 接收视频解码失败 |
2001 | AUDIO_INPUT_LEVEL_TOO_LOW | 发送音量过低 |
2002 | AUDIO_OUTPUT_LEVEL_TOO_LOW | 接收音量过低 |
2003 | SEND_AUDIO_BITRATE_TOO_LOW | 音频发送码率过低 |
2005 | RECV_AUDIO_DECODE_FAILED | 接收音频解码失败 |
恢复事件详见下表:
事件码 | 提示消息 | 恢复 |
---|---|---|
3001 | FRAMERATE_INPUT_TOO_LOW_RECOVER | 视频采集帧率恢复正常 |
3002 | FRAMERATE_SENT_TOO_LOW_RECOVER | 视频发送帧率恢复正常 |
3003 | SEND_VIDEO_BITRATE_TOO_LOW_RECOVER | 视频发送码率恢复正常 |
3005 | RECV_VIDEO_DECODE_FAILED_RECOVER | 接收视频解码恢复正常 |
4001 | AUDIO_INPUT_LEVEL_TOO_LOW_RECOVER | 发送音量恢复正常 |
4002 | AUDIO_OUTPUT_LEVEL_TOO_LOW_RECOVER | 接收音量恢复正常 |
4003 | SEND_AUDIO_BITRATE_TOO_LOW_RECOVER | 音频发送码率恢复正常 |
4005 | RECV_AUDIO_DECODE_FAILED_RECOVER | 接收音频解码恢复正常 |
参数
参数名 | 类型 | 描述 |
---|---|---|
event | object |
|
返回值
void
is-using-cloud-proxy
join-fallback-to-proxy
live-streaming-error
live-streaming-error(url: string, err: AgoraRTCError): void
推流发生错误回调。
在调用 startLiveStreaming 成功开始推流后,推流中途发生错误时,会通过这个事件抛出。
你可以访问 err.code
来获取错误码字符串,下面列出可能出现的错误:
-
LIVE_STREAMING_INVALID_ARGUMENT
: 推流参数错误。 -
LIVE_STREAMING_INTERNAL_SERVER_ERROR
: 推流服务器内部错误。 -
LIVE_STREAMING_PUBLISH_STREAM_NOT_AUTHORIZED
: 推流 URL 被占用。 -
LIVE_STREAMING_TRANSCODING_NOT_SUPPORTED
: 在非转码推流中调用了转码参数。 -
LIVE_STREAMING_CDN_ERROR
: 推流的目标 CDN 出现错误导致推流失败。 -
LIVE_STREAMING_INVALID_RAW_STREAM
: 推流超时,请确认目标流是否存在。
参数
参数名 | 类型 | 描述 |
---|---|---|
url | string | 发生错误的直播推流地址。 |
err | AgoraRTCError | 详细的错误信息。 |
返回值
void
live-streaming-warning
live-streaming-warning(url: string, warning: AgoraRTCError): void
推流发生警告回调。
在调用 startLiveStreaming 成功开始推流后,推流中途发生警告时,会通过这个事件抛出。
你可以访问 err.code
来获取警告码字符串,下面列举可能出现的警告:
-
LIVE_STREAMING_WARN_STREAM_NUM_REACH_LIMIT
: 推流超过 10 路流。 -
LIVE_STREAMING_WARN_FAILED_LOAD_IMAGE
: 推流中的背景图片或者水印地址无法拉取。 -
LIVE_STREAMING_WARN_FREQUENT_REQUEST
: 推流请求太频繁。
参数
参数名 | 类型 | 描述 |
---|---|---|
url | string | 发生警告的直播推流地址。 |
warning | AgoraRTCError |
返回值
void
media-reconnect-end
media-reconnect-start
network-quality
network-quality(stats: NetworkQuality): void
网络上下行质量报告回调。
用户加入频道后,SDK 会每 2 秒触发一次该回调,报告本地用户当前的上行和下行网络质量。
我们推荐使用此回调来展示你的网络状态。
参数
参数名 | 类型 | 描述 |
---|---|---|
stats | 网络质量。 |
返回值
void
published-user-list
published-user-list(users: IAgoraRTCRemoteUser): void
自从 4.11.0
如果开启了单频道支持 128 位主播的功能,该回调会在调用 join 时触发,返回当前频道内发布音频和视频轨道的用户。
注意事项:
-
频道内所有用户必须都使用整数型用户 ID(
uid
),published-user-list
才会触发。 -
published-user-list
对 AgoraRTCClient.on("user-joined") 和 AgoraRTCClient.on("user-published") 有以下影响:-
如果监听了
published-user-list
,已经在published-user-list
中返回的用户不会再通过user-joined
和user-published
重复返回。 -
如果没有监听
published-user-list
,user-joined
和user-published
会正常触发。
-
参数
参数名 | 类型 | 描述 |
---|---|---|
users | 远端用户对象。 |
返回值
void
stream-fallback
stream-fallback(uid: UID, isFallbackOrRecover: "fallback" | "recover"): void
订阅的音视频流回退为音频流或恢复为音视频流回调。
如果在 setStreamFallbackOption 中将 fallbackType
设为 2,当下行网络环境不理想、仅接收远端音频流时,或当下行网络改善、恢复订阅音视频流时,会触发该回调。
参数
参数名 | 类型 | 描述 |
---|---|---|
uid | 远端流对应的用户 ID。 | |
isFallbackOrRecover | "fallback" | "recover" | 订阅流是回退还是恢复:
|
返回值
void
stream-type-changed
stream-type-changed(uid: UID, streamType: RemoteStreamType): void
订阅的视频流类型发生改变回调。
视频流类型改变指视频大流(高码率、高分辨率)变为视频小流(低码率、低分辨率),或视频小流变为视频大流。
参数
参数名 | 类型 | 描述 |
---|---|---|
uid | 远端流对应的用户 ID。 | |
streamType | 改变后的视频流类型:
|
返回值
void
token-privilege-did-expire
token-privilege-will-expire
token-privilege-will-expire(): void
Token 即将过期回调。
在 token 过期前 30 秒,会收到该回调。
在收到该回调之后,应向服务端重新申请 token,并调用 renewToken 方法传入新的 token。
client.on("token-privilege-will-expire", async function(){
// 重新申请 token 后
await client.renewToken(token);
});
返回值
void
user-info-updated
user-info-updated(uid: UID, msg: "mute-audio" | "mute-video" | "enable-local-video" | "unmute-audio" | "unmute-video" | "disable-local-video"): void
该回调用于提示用户状态变化。
在大部分情况下,你只需要监听 user-published 和 user-unpublished 就可以完成订阅、取消订阅、展示远端用户是否打开了摄像头和麦克风等工作,无需特别关注实际用户状态的变化,SDK 会自动处理用户状态变化。
即使用户状态表示该用户的音视频流是活跃的,不一定意味着该用户可订阅。是否可订阅的唯一标志是收到 user-published 事件。
参数
参数名 | 类型 | 描述 |
---|---|---|
uid | 发生状态变化的用户 ID。 | |
msg | "mute-audio" | "mute-video" | "enable-local-video" | "unmute-audio" | "unmute-video" | "disable-local-video" | 当前用户状态。其中, |
返回值
void
user-joined
user-joined(user: IAgoraRTCRemoteUser): void
远端用户或主播加入频道回调。
-
通信场景下,该回调提示有远端用户加入了频道,并返回新加入用户的 ID;如果加入之前,已经有其他用户在频道中了,新加入的用户也会收到这些已有用户加入频道的回调。
-
直播场景下,该回调提示有主播加入了频道,并返回该主播的 ID。如果在加入之前,已经有主播在频道中了,新加入的用户也会收到已有主播加入频道的回调。声网建议连麦主播不超过 17 人。
该回调在以下情况下会被触发:
-
通信场景的远端用户/直播场景的远端主播调用 join 方法加入频道。
-
直播场景的远端观众加入频道后调用 setClientRole 将用户角色改变为主播。
-
通信场景的远端用户/直播场景的远端主播网络中断后重新加入频道。
参数
参数名 | 类型 | 描述 |
---|---|---|
user | 加入频道的用户信息。 |
返回值
void
user-left
user-left(user: IAgoraRTCRemoteUser, reason: string): void
远端用户离线回调。
该回调通知 app 有远端用户离线,离线包括以下情况:
-
正常离开:用户会收到类似“再见”的消息,接收此消息后,判断对方离开频道。
-
超时掉线:在 20 秒内,用户没有收到对方的任何数据包,则判定为对方掉线。在网络较差的情况下,有可能会误报。
-
用户角色从主播变为观众。
在直播场景中,只有角色为主播的用户会触发该回调。
参数
参数名 | 类型 | 描述 |
---|---|---|
user | 离线的用户信息。 | |
reason | string | 用户离线的原因。
|
返回值
void
user-published
user-published(user: IAgoraRTCRemoteUser, mediaType: "audio" | "video"): void
该回调通知远端用户发布了新的音频轨道或者视频轨道。
你可以在该回调中订阅并播放远端用户的音视频轨道。详见 subscribe 和 RemoteTrack.play。
如果用户加入频道时频道内已经有其他用户的音视频轨道,也会收到该回调报告已经存在的远端轨道。
client.on("user-published", async (user, mediaType) => {
await client.subscribe(user, mediaType);
if (mediaType === "video") {
console.log("subscribe video success");
user.videoTrack.play("xxx");
}
if (mediaType === "audio") {
console.log("subscribe audio success");
user.audioTrack.play();
}
})
参数
参数名 | 类型 | 描述 |
---|---|---|
user | 远端用户信息。 | |
mediaType | "audio" | "video" | 远端用户发布的媒体类型。
|
返回值
void
user-unpublished
user-unpublished(user: IAgoraRTCRemoteUser, mediaType: "audio" | "video"): void
该回调通知远端用户取消发布了音频或视频轨道。
参数
参数名 | 类型 | 描述 |
---|---|---|
user | 远端用户信息。 | |
mediaType | "audio" | "video" | 远端用户取消发布的媒体类型。
|
返回值
void
volume-indicator
volume-indicator(result: object[]): void
报告频道内正在说话的远端用户及其音量的回调。
默认禁用。可以通过 enableAudioVolumeIndicator 方法开启;开启后,无论频道内是否有人说话,都会每两秒返回提示音量。
音量范围为 0 到 100 之间。通常在列表中音量大于 60 的用户为持续说话的人。
client.on("volume-indicator", function(result){
result.forEach(function(volume, index){
console.log(`${index} UID ${volume.uid} Level ${volume.level}`);
});
});
参数
参数名 | 类型 | 描述 |
---|---|---|
result | object[] | 包含以下属性:
|
返回值
void
Properties
channelName
channelName: undefined | string
当前加入的频道名称
如果本地用户没有加入频道,该属性值为 undefined
。
connectionState
connectionState: ConnectionState
SDK 和声网服务器的连接状态。
localTracks
localTracks: ILocalTrack[]
自从 4.0.0
保存当前正在发布的本地轨道对象列表。
remoteUsers
remoteUsers: IAgoraRTCRemoteUser[]
远端用户信息列表,包含频道中各个远端用户的用户 ID 和轨道信息。
如果本地用户没有加入频道,该列表为空。
uid
uid: UID
本地用户的用户 ID。
如果本地用户没有加入频道,该属性值为 undefined
。
Agora Core Methods
join
加入频道。
该方法让用户加入通话频道,在同一个频道内的用户可以互相通话。
调用该方法加入频道时,本地会触发 AgoraRTCClient.on("connection-state-change") 回调。
通信场景下的用户和直播场景下的主播加入频道后,远端会触发 AgoraRTCClient.on("user-joined") 回调。
参数
参数名 | 类型 | 描述 |
---|---|---|
appid | string | 你的声网项目的 App ID。 |
channel | string | 标识通话的频道名称,长度在 64 字节以内的字符串。以下为支持的字符集范围(共 89 个字符):
|
token | string | null | 用于鉴权的 token。
|
uid | UID | null | 标识用户的 ID。整数或字符串,ASCII 字符,需保证唯一性。如果不指定或设为
为保证最佳的用户体验,声网强烈建议你不要使用字符串作为用户 ID。
|
返回值
Promise<UID>
leave
leave(): Promise<void>
离开频道。
离开频道即挂断或退出通话。
调用该方法离开频道时,本地会触发 AgoraRTCClient.on("connection-state-change") 回调。
通信场景下的用户和直播场景下的主播离开频道后,远端会触发 AgoraRTCClient.on("user-left") 回调。
返回值
Promise<void>
publish
publish(tracks: ILocalTrack | ILocalTrack[]): Promise<void>
发布本地音视频轨道。
该方法将本地音视频轨道发布至频道中。
发布音视频轨道之后,远端会触发 AgoraRTCClient.on("user-published") 回调。
注意事项:
-
直播场景中,调用该方法前,必须先调用 setClientRole 将用户角色设为主播。
-
你可以多次调用该方法添加要发布的轨道。
-
一个
AgoraRTCClient
对象可以发布多个音频轨道,SDK 会自动混音,将多个音频轨道合并为一个音频轨道。Safari 12 之前的版本不支持发布多个音频轨道。 -
一个
AgoraRTCClient
对象只能发布一个视频轨道。如果你想要更换视频轨道,例如已经发布了一个摄像头视频轨道,想要切换为屏幕共享视频轨道,你必须先取消发布。
参数
参数名 | 类型 | 描述 |
---|---|---|
tracks | 通过 AgoraRTC.createMicrophoneAudioTrack / AgoraRTC.createCameraTrack 或其他方法创建的本地 Track 对象。 |
返回值
Promise<void>
subscribe
subscribe(user: IAgoraRTCRemoteUser, mediaType: "video"): Promise<IRemoteVideoTrack>
订阅远端用户的音视频轨道。
await client.subscribe(user,"audio");
user.audioTrack.play();
参数
参数名 | 类型 | 描述 |
---|---|---|
user | 远端用户对象。 | |
mediaType | "video" | 订阅的轨道媒体类型。
|
返回值
Promise<IRemoteVideoTrack>
subscribe(user: IAgoraRTCRemoteUser, mediaType: "audio"): Promise<IRemoteAudioTrack>
订阅远端用户的音视频轨道。
await client.subscribe(user,"audio");
user.audioTrack.play();
参数
参数名 | 类型 | 描述 |
---|---|---|
user | 远端用户对象。 | |
mediaType | "audio" | 订阅的轨道媒体类型。
|
返回值
Promise<IRemoteAudioTrack>
subscribe(user: IAgoraRTCRemoteUser, mediaType: "video" | "audio"): Promise<IRemoteTrack>
订阅远端用户的音视频轨道。
await client.subscribe(user,"audio");
user.audioTrack.play();
参数
参数名 | 类型 | 描述 |
---|---|---|
user | 远端用户对象。 | |
mediaType | "video" | "audio" | 订阅的轨道媒体类型。
|
返回值
Promise<IRemoteTrack>
unpublish
unpublish(tracks?: ILocalTrack | ILocalTrack[]): Promise<void>
取消发布本地音视频轨道。
取消发布音视频轨道之后,远端会触发 AgoraRTCClient.on("user-unpublished") 回调。
注意事项:直播场景中,主播调用 unpublish 取消发布轨道之后,用户角色不会自动切换为观众。如需将用户角色切换为观众,必须调用 setClientRole。
参数
参数名 | 类型 | 描述 |
---|---|---|
tracks | 要取消发布的轨道。如果留空,会将所有发布过的音视频轨道取消发布。 |
返回值
Promise<void>
unsubscribe
unsubscribe(user: IAgoraRTCRemoteUser, mediaType?: "video" | "audio"): Promise<void>
取消订阅远端用户的音视频轨道。
参数
参数名 | 类型 | 描述 |
---|---|---|
user | 远端用户对象。 | |
mediaType | "video" | "audio" | 取消订阅的轨道媒体类型。
|
返回值
Promise<void>
Channel Media Relay Methods
startChannelMediaRelay
startChannelMediaRelay(config: IChannelMediaRelayConfiguration): Promise<void>
开始跨频道媒体流转发。
调用该方法后,SDK 会触发以下回调:
-
AgoraRTCClient.on("channel-media-relay-state"),报告当前的跨频道媒体流转发状态和错误码。
-
如果转发中途出现异常,该回调中
state
为 3,code
为错误码。你可以尝试再次调用本方法。
-
-
AgoraRTCClient.on("channel-media-relay-event"),报告跨频道媒体流转发相关的事件。
-
如果跨频道服务开始向目标频道发送数据包,会触发回调,
code
为 4.
-
注意事项:
-
跨频道媒体流转发功能需要联系 sales@agora.io 开通。
-
该功能不支持 String 型 UID。
-
请在成功加入频道后调用该方法。
-
直播场景下,只有主播可以调用该方法。
-
成功调用该方法后,若你想再次调用该方法,必须先调用 stopChannelMediaRelay 方法退出当前的转发状态。
client.startChannelMediaRelay(config).then(() => {
console.log("startChannelMediaRelay success");
}).catch(e => {
console.log("startChannelMediaRelay failed", e);
})
参数
参数名 | 类型 | 描述 |
---|---|---|
config | 跨频道媒体流转发参数配置,详见 ChannelMediaRelayConfiguration。 |
返回值
Promise<void>
stopChannelMediaRelay
updateChannelMediaRelay
updateChannelMediaRelay(config: IChannelMediaRelayConfiguration): Promise<void>
更新媒体流转发的目标频道。
成功开始跨频道转发媒体流后,如果你希望添加或删除媒体流转发的目标频道,可以调用该方法。
注意事项:
-
请在 startChannelMediaRelay 后调用该方法,更新媒体流转发的频道。
-
跨频道媒体流转发最多支持 4 个目标频道。
参数
参数名 | 类型 | 描述 |
---|---|---|
config | 跨频道媒体流转发参数配置,详见 ChannelMediaRelayConfiguration。 |
返回值
Promise<void>
Dual Stream Methods
disableDualStream
enableDualStream
enableDualStream(): Promise<void>
开启双流模式。
该方法为本地流开启双流模式。双流为视频大流和视频小流:
-
视频大流指高分辨率、高码率的视频流。
-
视频小流指低分辨率、低码率的视频流。小流的视频属性默认值固定为分辨率(宽 × 高) 160 × 120,码率 50 Kbps,帧率 15 fps。如果你不想要使用默认的小流视频属性,可以调用 setLowStreamParameter 自定义小流参数,防止因小流码率过高而造成带宽压力。
注意事项:
-
enableDualStream
对纯音频通话无效。 -
Android Chrome 上无法使用 H.264 编码发送大小流。
client.enableDualStream().then(() => {
console.log("Enable Dual stream success!");
}).catch(err => {
console.log(err);
})
返回值
Promise<void>
setLowStreamParameter
setLowStreamParameter(streamParameter: LowStreamParameter): void
设置小流视频属性。
如果你调用 enableDualStream 开启了双流模式,该方法设置小流的视频属性。
如果你不设置小流的视频属性,SDK 会根据你的视频流属性自动适配小流的视频属性。
注意事项:
-
Firefox 上设置帧率不生效,浏览器会把帧率固定在 30 fps。
-
iOS Safari 上不支持设置
LowStreamParameter.bitrate
,且小流分辨率需要与大流分辨率成比例。 -
请在 publish 之前调用此方法。
-
由于设备和浏览器的限制,部分浏览器设置视频分辨率可能不会生效,这种情况下浏览器会自动调整分辨率,计费也将按照实际分辨率计算。
参数
参数名 | 类型 | 描述 |
---|---|---|
streamParameter | 小流的视频属性。 |
返回值
void
setRemoteDefaultVideoStreamType
setRemoteDefaultVideoStreamType(streamType: RemoteStreamType): Promise<void>
设置订阅所有远端用户的视频类型。
如果远端用户开启了双流模式,本地用户调用 subscribe
后会直接订阅本方法中 streamType
参数所指定的流类型。如不设置,默认订阅大流。
-
建议在加入频道前调用
setRemoteDefaultVideoStreamType
。 -
如果你调用了 setRemoteVideoStreamType 指定某个用户的流类型,则以该调用为准。
参数
参数名 | 类型 | 描述 |
---|---|---|
streamType | 订阅的视频流类型,0 代表大流,1 代表小流,详见 RemoteStreamType。 |
返回值
Promise<void>
setRemoteVideoStreamType
setRemoteVideoStreamType(uid: UID, streamType: RemoteStreamType): Promise<void>
设置订阅特定远端用户的视频类型。
如果远端用户开启了双流模式,该用户会发送两路视频流(一路大流和一路小流)。你可以通过 setRemoteVideoStreamType
在接收端选择订阅该用户的大流还是小流。如不设置,默认订阅大流。
该方法只可在发送端通过 enableDualStream 开启双流模式的情况下使用。 如果该方法和 setStreamFallbackOption 都调用了,实际订阅的视频流类型取决于在 setStreamFallbackOption 中设置的回退策略。
参数
参数名 | 类型 | 描述 |
---|---|---|
uid | 远端用户的 ID。 | |
streamType | 订阅的视频流类型,0 代表大流,1 代表小流,详见 RemoteStreamType。 |
返回值
Promise<void>
setStreamFallbackOption
setStreamFallbackOption(uid: UID, fallbackType: RemoteStreamFallbackType): Promise<void>
设置远端用户音视频流回退策略。
该方法用于设置在弱网情况下订阅音视频流的回退策略。网络不理想的情况下,为保证通话质量,可以选择自动订阅视频小流(低分辨率、低码率视频流)或者仅订阅音频流。
开启自动回退之后,当订阅流从视频大流回退为视频小流或从视频小流恢复为视频大流时,本地会触发AgoraRTCClient.on("stream-type-changed") 回调。当订阅流回退为音频流或从音频流恢复为音视频流时,本地会触发 AgoraRTCClient.on("stream-fallback") 回调。
该方法仅在发送端开启双流模式后生效。
参数
参数名 | 类型 | 描述 |
---|---|---|
uid | 远端用户的 UID | |
fallbackType | 回退策略选项,详见 RemoteStreamFallbackType。 |
返回值
Promise<void>
Live Streaming Methods
setLiveTranscoding
setLiveTranscoding(config: LiveStreamingTranscodingConfig): Promise<void>
设置直播推流转码的配置。
该方法用于旁路推流的视图布局及音频设置等。
使用前请确保已开通旁路推流。
参数
参数名 | 类型 | 描述 |
---|---|---|
config | 直播转码的设置,详见 LiveStreamingTranscodingConfig。 |
返回值
Promise<void>
startLiveStreaming
startLiveStreaming(url: string, transcodingEnabled?: undefined | false | true): Promise<void>
将本地流发布到 CDN。
详见推流到 CDN。
注意事项:
-
该方法每次只能增加一路旁路推流地址。
-
移动端不支持推流到 CDN 功能。
await client.setLiveTranscoding(config);
await client.startLiveStreaming("rtmp://xxxx", true);
参数
参数名 | 类型 | 描述 |
---|---|---|
url | string | 直播推流的地址,ASCII 字符。支持 RTMP 协议。 |
transcodingEnabled | undefined | false | true | (可选) 是否启用直播转码。转码是指在旁路推流时对音视频流进行转码处理后,再推送到其他 RTMP 服务器,适用于频道内有多个主播,需要进行混流、合图的场景。如果设为
|
返回值
Promise<void>
stopLiveStreaming
Other Methods
disableContentInspect
enableAudioVolumeIndicator
enableAudioVolumeIndicator(): void
启用说话者音量提示。
该方法允许 SDK 定期报告正在说话的远端用户及其音量。
启用音量提示后,无论频道中有没有人说话,SDK 都会每两秒触发 AgoraRTCClient.on("volume-indicator") 回调。
如果本地用户离开频道后再加入频道,你需要重新调用 enableAudioVolumeIndicator
。
client.enableAudioVolumeIndicator();
client.on("volume-indicator", volumes => {
volumes.forEach((volume, index) => {
console.log(`${index} UID ${volume.uid} Level ${volume.level}`);
});
})
返回值
void
enableContentInspect
enableContentInspect(inspectConfig: InspectConfiguration): Promise<void>
开启视频截图上传。
开启视频截图上传后,SDK 会根据你在 InspectConfiguration 中设置的类型和频率,对本地用户发送的视频进行截图并上传。
截图完成后,声网服务器会以 HTTPS 请求的形式,向你的服务器发送回调通知,并将所有截图发送至你指定的第三方云存储。
-
调用该方法前,请确保满足以下要求:
-
已经联系技术支持开通声网视频截图上传服务。
-
本地用户已加入频道,本地视频轨道已经发布且正在播放。
-
-
SDK 目前支持的最高截图频率为 1000 毫秒/次。
client.enableContentInspect({
// 设置每 5000ms 对本地视频轨道截一次图
interval:5000,
// 设置第三方云存储地址的前缀
ossFilePrefix:`${channelName}/${uid}`,
// 设置附加信息,附加信息随截图一起发送给你的服务器
extraInfo:"fromAgora",
})
参数
参数名 | 类型 | 描述 |
---|---|---|
inspectConfig | 视频截图上传配置。 |
返回值
Promise<void>
getListeners
getLocalAudioStats
getLocalVideoStats
getRTCStats
getRemoteAudioStats
getRemoteAudioStats(): object
自从 4.1.0
获取远端用户的音频相关信息。
Note: 统计信息需要在订阅远端流后进行计算,可能耗费 0-3 秒时间。你可以循环调用该方法。
参数
参数名 | 类型 | 描述 |
---|---|---|
[ | uid: string]: RemoteAudioTrackStats |
返回值
object
getRemoteNetworkQuality
getRemoteNetworkQuality(): object
自从 4.2.0
获取本地订阅的所有远端用户的上下行网络质量。
参数
参数名 | 类型 | 描述 |
---|---|---|
[ | uid: string]: NetworkQuality |
返回值
object
getRemoteVideoStats
getRemoteVideoStats(): object
自从 4.1.0
获取远端用户的视频统计信息。
Note: 统计信息需要在订阅远端流后进行计算,可能耗费 0-3 秒时间。你可以循环调用该方法。
参数
参数名 | 类型 | 描述 |
---|---|---|
[ | uid: string]: RemoteVideoTrackStats |
返回值
object
massSubscribe
massSubscribe(subscribeList: object[]): Promise<object[]>
自从 4.11.0
批量订阅远端用户的音视频轨道。
const result = await client.massSubscribe([{user:userA, mediaType:'audio'}, {user: userB, mediaType:'audio'}]);
for(const {track, mediaType, error} of result) {
if(error) {
console.error(error);
continue;
}
if(track) {
if(mediaType === 'audio') {
track.play();
}else{
track.play(document.querySelector('.video-container'));
}
}
}
参数
参数名 | 类型 | 描述 |
---|---|---|
subscribeList | object[] | 订阅的远端用户列表。列表中的每一条都包含以下信息:
|
返回值
Promise<object[]>
massUnsubscribe
massUnsubscribe(unsubscribeList: object[]): Promise<void>
自从 4.11.0
批量取消订阅远端用户的音视频轨道。
client.massUnsubscribe([{user:userA}, {user: userB}]);
参数
参数名 | 类型 | 描述 |
---|---|---|
unsubscribeList | object[] | 取消订阅的远端用户列表。列表中的每一条都包含以下信息:
|
返回值
Promise<void>
off
on
once
removeAllListeners
renewToken
renewToken(token: string): Promise<void>
更新 token。
如果启用了 token 机制,过一段时间后 token 会失效。当收到 AgoraRTCClient.on("token-privilege-will-expire") 回调时, 调用该方法传入新的 token,否则 SDK 会无法和服务器建立连接。
参数
参数名 | 类型 | 描述 |
---|---|---|
token | string | 新的 token。 |
返回值
Promise<void>
sendCustomReportMessage
sendCustomReportMessage(reports: EventCustomReportParams[] | EventCustomReportParams): Promise<void>
自定义事件上报,用于将自定义的数据格式上报到声网的数据中心。
- 目前支持 5s 内最多上报 20 条事件。
参数
参数名 | 类型 | 描述 |
---|---|---|
reports |
返回值
Promise<void>
setClientRole
setClientRole(role: ClientRole, options?: ClientRoleOptions): Promise<void>
设置直播场景中(mode 设为 "live"
)的用户角色。
-
用户角色 (role) 确定用户在 SDK 层的权限,包含是否可以发送流、是否可以接收流、是否可以推流到 CDN 等。用户角色有
"host"
(主播)和"audience"
(观众)。主播既可发布轨道,也可订阅轨道;观众不能进行 publish 操作。直播场景中的用户角色默认为观众。如需发布音视频,必须先调用本方法切换角色为主播。 -
用户角色具体设置包含用户级别 (level)。用户级别确定用户在其权限范围内可以操作和享受到的服务级别。例如对于观众,选择接收低延时还是超低延时的视频流。不同的级别会影响计费。
注意事项:
-
通信场景(mode 设为
"rtc"
)无法使用本方法,默认所有用户都是"host"
角色。 -
如果在加入频道后调用该方法切换用户角色,远端会触发 AgoraRTCClient.on("user-joined") 或者 AgoraRTCClient.on("user-left") 回调。
-
如果已经调用了 publish,想要将用户角色切换为
"audience"
时,必须先调用 unpublish 取消发布后再调用本方法,否则会设置失败并抛出异常。
参数
参数名 | 类型 | 描述 |
---|---|---|
role | 用户角色。 | |
options | 用户具体设置,包含观众延时级别。 |
返回值
Promise<void>
setEncryptionConfig
setEncryptionConfig(encryptionMode: EncryptionMode, secret: string, salt?: Uint8Array): void
设置加密方案。
该方法用于设置 SDK 内置的加密算法和密钥,开启内置加密功能。
如果该方法设置错误,在发布或者订阅时会触发 AgoraRTCClient.on("crypt-error") 回调。
注意事项:
-
同一频道内的所有用户必须设置相同的加密模式、密钥和盐值才能进行互通。
-
该方法必须在加入频道前调用,否则加密不生效。
-
自 v4.7.0 起,用户离开频道后,SDK 会自动关闭加密。如需重新开启加密,你需要在用户再次加入频道前调用该方法。
-
请勿在 CDN 推流场景中使用内置加密功能。
参数
参数名 | 类型 | 描述 |
---|---|---|
encryptionMode | 加密模式。 | |
secret | string | ASCII 字符。当用户设置的密码为弱密码时,SDK 会在控制台打印警告信息,提醒用户设置强密码,即密码必须包含大写字母、小写字母、数字和特殊字符,以及长度至少 8 个字符。由于浏览器加密算法限制,密钥长度不能超过 62 个字符。声网推荐你在服务端使用 OpenSSL 生成密钥,详见媒体流加密。 |
salt | Uint8Array | 盐值,仅当加密模式为 |
返回值
void
setImageModeration
setImageModeration(enabled: true, config: ImageModerationConfiguration): Promise<void>
参数
参数名 | 类型 | 描述 |
---|---|---|
enabled | true | |
config |
返回值
Promise<void>
setLocalAccessPointsV2
setLocalAccessPointsV2(config: LocalAccessPointConfig): void
自从 4.16.0
配置声网混合云或私有化平台的相关服务。
成功部署声网混合云或私有化平台并在内网终端集成 Agora Web SDK 后,你可以调用该方法设置访问节点和相关服务。
联系 sales@agora.io 了解和部署声网混合云或声网私有化平台。
Note:
-
使用混合云或私有化平台时,不支持开启云代理服务,因此该方法不能与 startProxyServer 一起调用。
-
成功配置混合云或私有化平台后,SDK 如果直接连接 SD-RTN™ 失败,将不会自动切换到 TCP/TLS 443 通道,即不会再触发
join-fallback-to-proxy
回调。 -
由于 Chrome 已知问题,使用该接口过程中 Chrome 控制台可能会误报错误信息提示,开发者可以忽略。
client.setLocalAccessPointsV2({
accessPoints: {
serverList:["192.168.1.1","192.168.2.2"],
domain: 'test.agora.io'
},
log:{
hostname:"abc.com",
port: 3000
},
report:{}
})
参数
参数名 | 类型 | 描述 |
---|---|---|
config | 混合云或私有化平台的配置参数。详见 LocalAccessPointConfig。 |
返回值
void
Proxy Methods
setProxyServer
setProxyServer(proxyServer: string): void
自从 4.18.0
部署你的代理服务器。
该方法不能与 startProxyServer 同时调用,二者区别如下:
-
setProxyServer
:自定义代理,可以用于信令传输、日志上传、事件上报等,但不能用于媒体传输。 -
startProxyServer
:声网提供的云代理服务,可以传输媒体流、信令等,只需简单设置即可使用。详见使用云代理服务。
注意事项:
-
该方法必须在 join 之前调用。
-
在使用 Firefox 浏览器时,跨运营商代理速度会比较慢。声网建议使用同运营商进行代理。如果必须使用跨运营商代理,则避免使用 Firefox 浏览器。
参数
参数名 | 类型 | 描述 |
---|---|---|
proxyServer | string | 你的代理服务器域名,ASCII 字符。 |
返回值
void
startProxyServer
startProxyServer(mode?: undefined | number): void
开启云代理服务。
该方法必须在加入频道前或离开频道后调用。
使用云代理服务还需要一些额外设置,详见使用云代理服务。
参数
参数名 | 类型 | 描述 |
---|---|---|
mode | undefined | number | 云代理模式:
|
返回值
void
事件码,详见 ChannelMediaRelayEvent。