onWarning
{
"engineEvent":"onWarning",
"warningCode":0
}
发生警告回调。
该回调方法表示 SDK 运行时出现了(网络或媒体相关的)警告。通常情况下,SDK 上报的警告信息 App 可以忽略,SDK 会自动恢复。 例如和服务器失去连接时,SDK 可能会上报 WARN_LOOKUP_CHANNEL_TIMEOUT 警告,同时自动尝试重连。
类型 | 参数 | 描述 |
---|---|---|
int | warningCode | 警告代码,详细定义见 Warning Code |
onError
{
"engineEvent":"onError",
"errorCode":0
}
发生错误回调。
表示 SDK 运行时出现了(网络或媒体相关的)错误。通常情况下,SDK 上报的错误意味着 SDK 无法自动恢复,需要 App 干预或提示用户。例如启动通话失败时,SDK 会上报 ERR_START_CALL 错误。App 可以提示用户启动通话失败,并调用 leaveChannel 退出频道。
类型 | 参数 | 描述 |
---|---|---|
int | errorCode | 错误代码,详细定义见 Error Code |
onJoinChannelSuccess
{
"engineEvent":"onJoinChannelSuccess",
"channel":"909090",
"uid":"123",
"elapsed":0
}
加入频道回调。
表示客户端已经登入服务器,且分配了频道 ID 和用户 ID。频道 ID 的分配是根据 joinChannel 方法中指定的频道名称。如果调用 joinChannel 时并未指定用户 ID,服务器就会分配一个。
类型 | 参数 | 描述 |
---|---|---|
String | channel | 频道名。 |
String | uid | 用户 ID。如果 joinChannel 中指定了 uid,则此处返回该 ID;否则使用服务器自动分配的 ID。 |
int | elapsed | 从 joinChannel 开始到发生此事件过去的时间(毫秒)。 |
onRejoinChannelSuccess
{
"engineEvent":"onRejoinChannelSuccess",
"channel":"909090",
"uid":"123",
"elapsed":0
}
重新加入频道回调。
有时候由于网络原因,客户端可能会和服务器失去连接,SDK 会进行自动重连,自动重连成功后触发此回调方法
类型 | 参数 | 描述 |
---|---|---|
String | channel | 频道名。 |
String | uid | 用户 ID。如果 joinChannel 中指定了 uid,则此处返回该 ID;否则使用服务器自动分配的 ID |
int | elapsed | 从开始重连到重连成功的时间(毫秒) |
onLeaveChannel
{
"engineEvent":"onLeaveChannel",
"duration":0,
"txBytes":0,
"rxBytes":0,
"txAudioBytes":0,
"txVideoBytes":0,
"rxAudioBytes":0,
"rxVideoBytes":0,
"txKBitrate":0,
"rxKBitrate":0,
"txAudioKBitrate":0,
"rxAudioKBitrate":0,
"txVideoKBitrate":0,
"rxVideoKBitrate":0,
"lastmileDelay":0,
"txPacketLossRate":0,
"rxPacketLossRate":0,
"userCount":0,
"cpuAppUsage":0.0,
"cpuTotalUsage":0.0,
"gatewayRtt":0,
"memoryAppUsageRatio":0.0,
"memoryTotalUsageRatio":0.0,
"memoryAppUsageInKbytes":0
}
离开频道回调。
App 调用 leaveChannel 方法时,SDK 提示 App 离开频道成功。 在该回调方法中,App 可以得到此次通话的总通话时长、SDK 收发数据的流量等信息。
类型 | 参数 | 描述 |
---|---|---|
int | totalDuration | 通话时长,单位为秒,累计值。 |
int | txBytes | 发送字节数(bytes),累计值。 |
int | rxBytes | 接收字节数(bytes),累计值。 |
int | txAudioBytes | 发送音频字节数(bytes),累计值。 |
int | txVideoBytes | 发送视频字节数(bytes),累计值。 |
int | rxAudioBytes | 接收音频字节数(bytes),累计值。 |
int | rxVideoBytes | 接收视频字节数(bytes),累计值。 |
int | txKBitRate | 发送码率(Kbps),瞬时值。 |
int | rxKBitRate | 接收码率(Kbps),瞬时值。 |
int | txAudioKBitRate | 音频包的发送码率(Kbps),瞬时值。 |
int | rxAudioKBitRate | 音频接收码率(Kbps),瞬时值。 |
int | txVideoKBitRate | 视频发送码率(Kbps),瞬时值。 |
int | rxVideoKBitRate | 视频接收码率(Kbps),瞬时值。 |
int | users | 1.通信场景下,返回当前频道内的人数。 2.直播场景下: 如果本地用户为观众,则返回频道内的主播数 + 1; 如果本地用户为主播,则返回频道内的总主播数。 |
int | lastmileDelay | 客户端到服务器的延迟(毫秒)。 |
int | txPacketLossRate | 网络对抗前,本地客户端到边缘服务器的丢包率 (%)。 |
int | rxPacketLossRate | 网络对抗前,边缘服务器到本地客户端的丢包率 (%)。 |
double | cpuTotalUsage | 当前系统的 CPU 使用率 (%)。 |
double | cpuAppUsage | 当前 App 的 CPU 使用率 (%)。 |
int | gatewayRtt | 客户端到本地路由器的往返时延 (ms)。 |
double | memoryAppUsageRatio | 当前 App 的内存占比 (%)。 |
double | memoryTotalUsageRatio | 当前系统的内存占比 (%)。 |
int | memoryAppUsageInKbytes | 当前 App 的内存大小 (KB)。 |
onClientRoleChanged
{
"engineEvent":"onClientRoleChanged",
"oldRole":0,
"newRole":1
}
直播场景下用户角色已切换回调。如从观众切换为主播,反之亦然。
该回调由本地用户在加入频道后调用 setClientRole 改变用户角色触发的。
类型 | 参数 | 描述 |
---|---|---|
int | oldRole | 切换前的角色 |
int | newRole | 切换后的角色 |
onUserJoined
{
"engineEvent":"onUserJoined",
"uid":"123",
"elapsed":0
}
远端用户(通信场景)/主播(直播场景)加入当前频道回调。
- 通信场景下,该回调提示有远端用户加入了频道,并返回新加入用户的 ID;如果加入之前,已经有其他用户在频道中了,新加入的用户也会收到这些已有用户加入频道的回调
- 直播场景下,该回调提示有主播加入了频道,并返回该主播的用户 ID。如果在加入之前,已经有主播在频道中了,新加入的用户也会收到已有主播加入频道的回调。我们建议连麦主播不超过 17 人
该回调在如下情况下会被触发:
- 远端用户/主播调用 joinChannel 方法加入频道。
- 远端用户加入频道后调用 setClientRole 将用户角色改变为主播。
- 远端用户/主播网络中断后重新加入频道。
参数 | 描述 | |
---|---|---|
String | uid | 新加入频道的远端用户/主播 ID |
int | elapsed | 从本地用户调用 joinChannel/setClientRole 到触发该回调的延迟(毫秒) |
注解
直播场景下:主播间能相互收到新主播加入频道的回调,并能获得该主播的用户 ID观众也能收到新主播加入频道的回调,并能获得该主播的用户 ID当 Web 端加入直播频道时,只要 Web 端有推流,SDK 会默认该 Web 端为主播,并触发该回调。
onUserOffline
{
"engineEvent":"onUserOffline",
"uid":"123",
"reason":0
}
远端用户(通信场景)/主播(直播场景)离开当前频道回调。
提示有远端用户/主播离开了频道(或掉线)。用户离开频道有两个原因,即正常离开和超时掉线:
- 正常离开的时候,远端用户/主播会收到类似“再见”的消息,接收此消息后,判断用户离开频道
- 超时掉线的依据是,在一定时间内(约 20 秒),用户没有收到对方的任何数据包,则判定为对方掉线。在网络较差的情况下,有可能会误报。我们建议使用 我们实时消息 SDK 来做可靠的掉线检测。
参数 | 描述 | |
---|---|---|
String | uid | 主播 ID |
int | reason | 0 :用户主动离开 1 :因过长时间收不到对方数据包,超时掉线。注意:由于 SDK 使用的是不可靠通道,也有可能对方主动离开本方没收到对方离开消息而误判为超时掉线。2 :直播场景下,用户身份从主播切换为观众。 |
onConnectionStateChanged
{
"engineEvent":"onConnectionStateChanged",
"state":0,
"reason":0
}
网络连接状态已改变回调。
该回调在网络连接状态发生改变的时候触发,并告知用户当前的网络连接状态,和引起网络状态改变的原因。
类型 | 参数 | 描述 |
---|---|---|
int | state | 当前的网络连接状态: 1 :网络连接断开。2 :建立网络连接中 。3 :网络已连接 。4 :重新建立网络连接中。5 :网络连接失败。 |
int | reason | 引起当前网络连接状态发生改变的原因:0 :建立网络连接中。1 :成功加入频道。2 :网络连接中断。3 :网络连接被服务器禁止。4 :加入频道失败。5 :离开频道。6 :不是有效的 APP ID。请更换有效的 APP ID 重新加入频道。 7 :不是有效的频道名。请更换有效的频道名重新加入频道。 8 :生成的 Token 无效。一般有以下原因:在控制台上启用了 App Certificate,但加入频道未使用 Token。当启用了 App Certificate,必须使用 Token在调用 joinChannel 加入频道时指定的 uid 与生成 Token 时传入的 uid 不一致。9 :当前使用的 Token 过期,不再有效,需要重新在你的服务端申请生成 Token。 10 :此用户被服务器禁止。11 :由于设置了代理服务器,SDK 尝试重连。12 :更新 Token 引起网络连接状态改变。13 :客户端 IP 地址变更,可能是由于网络类型,或网络运营商的 IP 或端口发生改变引起。14 :SDK 和服务器连接保活超时,进入自动重连状态。 |
onNetworkTypeChanged
{
"engineEvent":"onNetworkTypeChanged",
"type":0
}
本地网络类型发生改变回调。
本地网络连接类型发生改变时,SDK 会触发该回调,并在回调中明确当前的网络连接类型。 你可以通过该回调获取正在使用的网络类型;当连接中断时,该回调能辨别引起中断的原因是网络切换还是网络条件不好。
类型 | 参数 | 描述 |
---|---|---|
int | type | 网络连接类型: -1 :网络连接类型未知 0 :网络连接已断开 1 :网络类型为 2 :网络类型为 Wi-Fi(包含热点) 3 :网络类型为 2G 移动网络 4 :网络类型为 3G 移动网络 5 :网络类型为 4G 移动网络 |
onConnectionLost
{
"engineEvent":"onConnectionLost"
}
网络连接中断,且 SDK 无法在 10 秒内连接服务器回调。
SDK 在调用 joinChannel() 后,无论是否加入成功,只要 10 秒和服务器无法连接就会触发该回调。
如果 SDK 在断开连接后,20 分钟内还是没能重新加入频道,SDK 会停止尝试重连。
onTokenPrivilegeWillExpire
{
"engineEvent":"onTokenPrivilegeWillExpire",
"token":"token"
}
Token 服务即将过期回调。
在调用 joinChannel 时如果指定了 Token,由于 Token 具有一定的时效,在通话过程中如果 Token 即将失效,SDK 会提前 30 秒触发该回调,提醒 App 更新 Token。当收到该回调时,你需要重新在服务端生成新的 Token,然后调用 renewToken 将新生成的 Token 传给 SDK。
类型 | 参数 | 描述 |
---|---|---|
Sting | token | 即将服务失效的 Token |
onRequestToken
{
"engineEvent":"onRequestToken"
}
Token 过期回调。
在调用 joinChannel 时如果指定了 Token,由于 Token 具有一定的时效,在通话过程中 SDK 可能由于网络原因和服务器失去连接,重连时可能需要新的 Token。该回调通知 App 需要生成新的 Token,并需调用 joinChannel 重新加入频道。
onAudioVolumeIndication
{
"engineEvent":"onAudioVolumeIndication",
"totalVolume":0,
"speakers":speakersArr
}
提示频道内谁正在说话、说话者音量及本地用户是否在说话的回调。
该回调提示频道内瞬时音量最高的几个用户(最多三个)的用户 ID、他们的音量及本地用户是否在说话。
该回调默认禁用。可以通过启用说话者音量提示 enableAudioVolumeIndication 方法开启; 开启后,无论频道内是否有人说话,都会按方法中设置的时间间隔返回提示音量。
每次触发,用户会收到两个独立的 onAudioVolumeIndication 回调,其中一个包含本地用户的音量信息,另一个包含远端所有用户的音量信息,详见下方参数描述。
注解
如需使用该回调 speakers 数组中的 vad 参数(即本地人声检测功能),请在 enableAudioVolumeIndication 方法中设置 report_vad 为 true。用户调用 muteLocalAudioStream 方法会对 SDK 行为产生影响:本地用户调用该方法后 SDK 即不再返回本地用户的音量提示回调。远端用户调用该方法后 20 秒,远端说话者的音量提示回调将不再包含该用户;如果所有远端用户调用该方法后 20 秒,SDK 即不再返回远端说话者的音量提示回调。
类型 | 参数 | 描述 |
---|---|---|
AudioVolumeInfo[] | speakers | 每个说话者的用户 ID 和音量信息的数组,详见 AudioVolumeInfo。在本地用户的回调中,此数组中包含以下成员:uid =“0”,表示本地用户;volume,等于 totalVolume,报告本地用户混音后的音量;vad,报告本地用户人声状态。channelId,表示当前说话者在哪个频道。在远端用户的回调中,此数组中包含以下成员:uid,表示每位说话者的用户 ID。volume,表示各说话者混音后的音量。vad 为 0,该参数对远端用户无效。channelId,表示当前说话者在哪个频道。 如果报告的 speakers 数组为空,则表示远端此时没有人说话。 |
int | totalVolume | 为本地用户混音后的音量。在远端用户的回调中,totalVolume 为所有说话者混音后的总音量。 |
onActiveSpeaker
{
"engineEvent":"onActiveSpeaker",
"speakerUid":"123"
}
监测到活跃用户回调。
该回调获取当前时间段内累积音量最大者。如果该用户开启了 enableAudioVolumeIndication 功能,则当音量检测模块监测到频道内有新的活跃用户说话时,会通过本回调返回该用户的 uid。
注解
你需要开启 enableAudioVolumeIndication 方法才能收到该回调uid 返回的是当前时间段内声音最大的用户 ID,而不是瞬时声音最大的用户 ID。
onFirstLocalAudioFrame
{
"engineEvent":"onFirstLocalAudioFrame",
"elapsed":0
}
已发送本地音频首帧回调。
类型 | 参数 | 描述 |
---|---|---|
int | elapsed | 从本地用户调用 joinChannel 方法直至该回调被触发的延迟(毫秒) |
onFirstLocalVideoFrame
{
"engineEvent":"onFirstLocalVideoFrame",
"width":480,
"height":640,
"elapsed":0
}
已显示本地视频首帧回调。
第一帧本地视频显示在本地视图上时,触发此回调。
类型 | 参数 | 描述 |
---|---|---|
int | width | 本地渲染视频的宽(px) |
int | height | height本地渲染视频的高(px) |
int | elapsed | 从本地用户调用 joinChannel 方法直至该回调被触发的延迟(毫秒) 如果在 joinChannel 之前调用了 startPreview,则返回的是从调用 startPreview 直至该回调被触发的延迟(毫秒) |
onRemoteAudioStateChanged
{
"engineEvent":"onRemoteAudioStateChanged",
"uid":"123",
"state":0,
"reason":0,
"elapsed":0
}
远端音频状态发生改变回调。
远端用户(通信场景)或主播(直播场景)音频状态发生改变时,SDK 会触发该回调向本地用户报告当前的远端音频流状态。
注解
当频道内的用户(通信场景)或主播(直播场景)的人数超过 17 时,该回调可能不准确。
类型 | 参数 | 描述 |
---|---|---|
String | uid | 发生音频状态改变的远端用户 ID |
int | state | 远端音频流状态: REMOTE_AUDIO_STATE_STOPPED(0):远端音频流默认初始状态。 在 REMOTE_AUDIO_REASON_LOCAL_MUTED(3)、REMOTE_AUDIO_REASON_REMOTE_MUTED(5) 或 REMOTE_AUDIO_REASON_REMOTE_OFFLINE(7) 的情况下,会报告该状态。 REMOTE_AUDIO_STATE_STARTING(1):本地用户已接收远端音频首包。 REMOTE_AUDIO_STATE_DECODING(2):远端音频流正在解码,正常播放。在 REMOTE_AUDIO_REASON_NETWORK_RECOVERY(2)、 REMOTE_AUDIO_REASON_LOCAL_UNMUTED(4) 或 REMOTE_AUDIO_REASON_REMOTE_UNMUTED(6) 的情况下,会报告该状态。 REMOTE_AUDIO_STATE_FROZEN(3):远端音频流卡顿。在 REMOTE_AUDIO_REASON_NETWORK_CONGESTION(1) 的情况下,会报告该状态。 REMOTE_AUDIO_STATE_FAILED(4):远端音频流播放失败。在 REMOTE_AUDIO_REASON_INTERNAL(0) 的情况下,会报告该状态。 |
int | reason | 远端音频流状态改变的具体原因: REMOTE_AUDIO_REASON_INTERNAL(0):内部原因。REMOTE_AUDIO_REASON_NETWORK_CONGESTION(1):网络阻塞。REMOTE_AUDIO_REASON_NETWORK_RECOVERY(2):网络恢复正常。REMOTE_AUDIO_REASON_LOCAL_MUTED(3):本地用户停止接收远端音频流或本地用户禁用音频模块。 REMOTE_AUDIO_REASON_LOCAL_UNMUTED(4):本地用户恢复接收远端音频流或本地用户启用音频模块。 REMOTE_AUDIO_REASON_REMOTE_MUTED(5):远端用户停止发送音频流或远端用户禁用音频模块。 REMOTE_AUDIO_REASON_REMOTE_UNMUTED(6):远端用户恢复发送音频流或远端用户启用音频模块。 REMOTE_AUDIO_REASON_REMOTE_OFFLINE(7):远端用户离开频道。 |
int | elapsed | 从本地用户调用 joinChannel 方法到发生本事件经历的时间,单位为 ms。 |
onLocalAudioStateChanged
{
"engineEvent":"onLocalAudioStateChanged",
"state":0,
"error":0
}
本地音频状态发生改变回调。
本地音频的状态发生改变时(包括本地麦克风录制状态和音频编码状态),SDK 会触发该回调报告当前的本地音频状态。 在本地音频出现故障时,该回调可以帮助你了解当前音频的状态以及出现故障的原因,方便你排查问题。
注解
当状态为 3
时,你可以在 error 参数中查看返回的错误信息。
类型 | 参数 | 描述 |
---|---|---|
int | state | 当前的本地音频状态: LOCAL_AUDIO_STREAM_STATE_STOPPED(0):本地音频默认初始状态。LOCAL_AUDIO_STREAM_STATE_CAPTURING(1):本地音频录制设备启动成功。LOCAL_AUDIO_STREAM_STATE_ENCODING(2):本地音频首帧编码成功。LOCAL_AUDIO_STREAM_STATE_FAILED(3):本地音频启动失败。 |
int | error | 本地音频出错原因: LOCAL_AUDIO_STREAM_ERROR_OK(0):本地音频状态正常。LOCAL_AUDIO_STREAM_ERROR_FAILURE(1):本地音频出错原因不明确。LOCAL_AUDIO_STREAM_ERROR_DEVICE_NO_PERMISSION(2):没有权限启动本地音频录制设备。 LOCAL_AUDIO_STREAM_ERROR_DEVICE_BUSY(3):本地音频录制设备已经在使用中。LOCAL_AUDIO_STREAM_ERROR_CAPTURE_FAILURE(4):本地音频录制失败,建议你检查录制设备是否正常工作。 LOCAL_AUDIO_STREAM_ERROR_ENCODE_FAILURE(5):本地音频编码失败。 |
onFirstRemoteVideoFrame
{
"engineEvent":"onFirstRemoteVideoFrame",
"uid":"123",
"width":480,
"height":640,
"elapsed":0
}
已显示远端视频首帧回调。 第一帧远端视频显示在视图上时,触发此调用。App 可在此调用中获知出图时间(elapsed)。
参数 | 描述 | |
---|---|---|
String | uid | 用户 ID,指定是哪个用户的视频流。 |
int | width | 视频流宽(像素)。 |
int | height | 视频流高(像素)。 |
int | elapsed | 从本地用户调用 joinChannel 加入频道开始到发生此事件过去的时间(毫秒)。 |
onVideoSizeChanged
{
"engineEvent":"onVideoSizeChanged",
"uid":"123",
"width":480,
"height":640,
"rotation":0
}
本地或远端视频大小或旋转信息发生改变回调。
类型 | 参数 | 描述 |
---|---|---|
String | uid | 图像尺寸和旋转信息发生变化的用户 ID。如果返回的 uid 为"0",则表示本地用户。 |
int | width | 视频流的宽度(像素)。 |
int | height | 视频流的高度(像素)。 |
int | rotation | 旋转信息 [0,360]。 |
onRemoteVideoStateChanged
{
"engineEvent":"onRemoteVideoStateChanged",
"uid":"123",
"state":0,
"reason":0,
"elapsed":0
}
远端用户视频状态发生已变化回调。
注解
当频道内的用户(通信场景)或主播(直播场景)的人数超过 17 时,该回调可能不准确。
类型 | 参数 | 描述 |
---|---|---|
String | uid | 发生视频状态改变的远端用户 ID |
int | state | 远端视频流状态: REMOTE_VIDEO_STATE_STOPPED(0):远端视频默认初始状态。在 REMOTE_VIDEO_STATE_REASON_LOCAL_MUTED(3)、REMOTE_VIDEO_STATE_REASON_REMOTE_MUTED(5) 或 REMOTE_VIDEO_STATE_REASON_REMOTE_OFFLINE(7) 的情况下,会报告该状态。 REMOTE_VIDEO_STATE_STARTING(1):本地用户已接收远端视频首包。 REMOTE_VIDEO_STATE_DECODING(2):远端视频流正在解码,正常播放。在 REMOTE_VIDEO_STATE_REASON_NETWORK_RECOVERY(2)、REMOTE_VIDEO_STATE_REASON_LOCAL_UNMUTED(4)、REMOTE_VIDEO_STATE_REASON_REMOTE_UNMUTED(6) 或 REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK_RECOVERY(9) 的情况下,会报告该状态。 REMOTE_VIDEO_STATE_FROZEN(3):远端视频流卡顿。在 REMOTE_VIDEO_STATE_REASON_NETWORK_CONGESTION(1) 或 REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK(8) 的情况下,会报告该状态。 REMOTE_VIDEO_STATE_FAILED(4):远端视频流播放失败。在 REMOTE_VIDEO_STATE_REASON_INTERNAL(0) 的情况下,会报告该状态。 |
int | reason | 远端视频流状态改变的具体原因: REMOTE_VIDEO_STATE_REASON_INTERNAL(0):内部原因。REMOTE_VIDEO_STATE_REASON_NETWORK_CONGESTION(1):网络阻塞。REMOTE_VIDEO_STATE_REASON_NETWORK_RECOVERY(2):网络恢复正常。REMOTE_VIDEO_STATE_REASON_LOCAL_MUTED(3):本地用户停止接收远端视频流或本地用户禁用视频模块。 REMOTE_VIDEO_STATE_REASON_LOCAL_UNMUTED(4):本地用户恢复接收远端视频流或本地用户启动视频模块。 REMOTE_VIDEO_STATE_REASON_REMOTE_MUTED(5):远端用户停止发送视频流或远端用户禁用视频模块。 REMOTE_VIDEO_STATE_REASON_REMOTE_UNMUTED(6):远端用户恢复发送视频流或远端用户启用视频模块。 REMOTE_VIDEO_STATE_REASON_REMOTE_OFFLINE(7):远端用户离开频道REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK(8):远端视频流已回退为音频流。 REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK_RECOVERY(9):回退的远端音频流恢复为视频流。 |
int | elapsed | 从本地用户调用 joinChannel 方法到发生本事件经历的时间,单位为 ms。 |
onLocalVideoStateChanged
{
"engineEvent":"onLocalVideoStateChanged",
"state":0,
"error":0
}
本地视频状态发生改变回调。
本地视频的状态发生改变时,SDK 会触发该回调返回当前的本地视频状态;当状态为 LOCAL_VIDEO_STREAM_STATE_FAILED(3) 时,你可以在 error 参数中查看返回的错误信息。 该接口在本地视频出现故障时,方便你了解当前视频的状态以及出现故障的原因,方便排查问题。
类型 | 参数 | 描述 |
---|---|---|
int | localVideoState | 当前的本地视频状态: LOCAL_VIDEO_STREAM_STATE_STOPPED(0):本地视频默认初始状态。LOCAL_VIDEO_STREAM_STATE_CAPTURING(1):本地视频采集设备启动成功。LOCAL_VIDEO_STREAM_STATE_ENCODING(2):本地视频首帧编码成功。LOCAL_VIDEO_STREAM_STATE_FAILED(3):本地视频启动失败。 |
int | error | 本地视频出错原因: LOCAL_VIDEO_STREAM_ERROR_OK(0):本地视频状态正常。LOCAL_VIDEO_STREAM_ERROR_FAILURE(1):出错原因不明确。LOCAL_VIDEO_STREAM_ERROR_DEVICE_NO_PERMISSION(2):没有权限启动本地视频采集设备。 LOCAL_VIDEO_STREAM_ERROR_DEVICE_BUSY(3):本地视频采集设备正在使用中。LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE(4):本地视频采集失败,建议检查采集设备是否正常工作Android 9 及以上版本,app 切后台一段时间后,系统收回相机权限Android 6 及以上版本,如果相机被第三方应用占用,且未被及时释放。如果一段时间后,相机被释放,则 SDK 会再次出发该回调,并报告 state 为 CAPTURING,error 为。 ERROR_OK.LOCAL_VIDEO_STREAM_ERROR_ENCODE_FAILURE(5):本地视频编码失败。 |
onRemoteAudioStats
{
"engineEvent":"onRemoteAudioStats",
"uid": "123",
"quality": 0,
"networkTransportDelay": 0,
"jitterBufferDelay":0,
"audioLossRate": 0,
"numChannels": 0,
"receivedSampleRate": 0,
"receivedBitrate": 0,
"totalFrozenTime":0,
"frozenRate": 0
}
通话中远端音频流的统计信息回调。
该回调描述远端用户在通话中端到端的音频流统计信息,针对每个远端用户/主播每 2 秒触发一次。如果远端同时存在多个用户/主播,该回调每 2 秒会被触发多次。
类型 | 参数 | 描述 |
---|---|---|
String | uid | 用户 ID,指定是哪个用户/主播的音频流。 |
int | quality | 远端用户发送的音频流质量:0 :质量未知1 :质量极好2 :用户主观感觉和极好差不多 ,但码率可能略低于极好3 :用户主观感受有瑕疵,但不影响沟通4 :勉强能沟通但不顺畅5 :网络质量非常差,基本不能沟通6 :网络连接已断开,完全无法沟通 |
int | networkTransportDelay | 音频发送端到接收端的网络延迟(毫秒)。 |
int | jitterBufferDelay | 接收端到网络抖动缓冲的网络延迟 (ms)。 |
int | audioLossRate | 统计周期内的远端音频流的丢帧率 (%)。 |
int | numChannels | 声道数。 |
int | receivedSampleRate | 统计周期内接收到的远端音频采样率(Hz)。 |
int | receivedBitrate | 接收流在统计周期内的平均码率(Kbps)。 |
int | totalFrozenTime | 远端用户在加入频道后发生音频卡顿的累计时长 (ms)。一个统计周期内,音频丢帧率达到 4% 即记为一次音频卡顿。 |
int | frozenRate | 远端用户在加入频道后发生音频卡顿的累计时长占音频总有效时长的百分比 (%)。 |
int | totalActiveTime | 远端用户在音频通话开始到本次回调之间的有效时长(ms)。 |
onRtcStats
{
"engineEvent":"onRtcStats",
"duration":0,
"txBytes":0,
"rxBytes":0,
"txAudioBytes":0,
"txVideoBytes":0,
"rxAudioBytes":0,
"rxVideoBytes":0,
"txKBitrate":0,
"rxKBitrate":0,
"txAudioKBitrate":0,
"rxAudioKBitrate":0,
"txVideoKBitrate":0,
"rxVideoKBitrate":0,
"lastmileDelay":0,
"txPacketLossRate":0,
"rxPacketLossRate":0,
"userCount":0,
"cpuAppUsage":0,
"cpuTotalUsage":0.0,
"gatewayRtt":0,
"memoryAppUsageRatio":0.0,
"memoryTotalUsageRatio":0.0,
"memoryAppUsageInKbytes":0
}
当前通话统计回调。 该回调在通话中每两秒触发一次。
类型 | 参数 | 描述 |
---|---|---|
int | totalDuration | 通话时长,单位为秒,累计值。 |
int | txBytes | 发送字节数(bytes),累计值。 |
int | rxBytes | 接收字节数(bytes),累计值。 |
int | txAudioBytes | 发送音频字节数(bytes),累计值。 |
int | txVideoBytes | 发送视频字节数(bytes),累计值。 |
int | rxAudioBytes | 接收音频字节数(bytes),累计值。 |
int | rxVideoBytes | 接收视频字节数(bytes),累计值。 |
int | txKBitRate | 发送码率(Kbps),瞬时值。 |
int | rxKBitRate | 接收码率(Kbps),瞬时值。 |
int | txAudioKBitRate | 音频包的发送码率(Kbps),瞬时值。 |
int | rxAudioKBitRate | 音频接收码率(Kbps),瞬时值。 |
int | txVideoKBitRate | 视频发送码率(Kbps),瞬时值。 |
int | rxVideoKBitRate | 视频接收码率(Kbps),瞬时值。 |
int | users | 1.通信场景下,返回当前频道内的人数。 2.直播场景下: 如果本地用户为观众,则返回频道内的主播数 + 1; 如果本地用户为主播,则返回频道内的总主播数。 |
int | lastmileDelay | 客户端到服务器的延迟(毫秒)。 |
int | txPacketLossRate | 网络对抗前,本地客户端到边缘服务器的丢包率 (%)。 |
int | rxPacketLossRate | 网络对抗前,边缘服务器到本地客户端的丢包率 (%)。 |
double | cpuTotalUsage | 当前系统的 CPU 使用率 (%)。 |
double | cpuAppUsage | 当前 App 的 CPU 使用率 (%)。 |
int | gatewayRtt | 客户端到本地路由器的往返时延 (ms)。 |
double | memoryAppUsageRatio | 当前 App 的内存占比 (%)。 |
double | memoryTotalUsageRatio | 当前系统的内存占比 (%)。 |
int | memoryAppUsageInKbytes | 当前 App 的内存大小 (KB)。 |
onNetworkQuality
{
"engineEvent":"onNetworkQuality",
"uid":"123",
"txQuality":0,
"rxQuality":0
}
通话中每个用户的网络上下行 last mile 质量报告回调。
该回调描述每个用户在通话中的 last mile 网络状态,其中 last mile 是指设备到 anyRTC 边缘服务器的网络状态。该回调每 2 秒触发一次。如果远端有多个用户/主播,该回调每 2 秒会被触发多次。
参数 | 描述 | |
---|---|---|
String | uid | 用户 ID。表示该回调报告的是持有该 ID 的用户的网络质量。当 uid 为 0 时,返回的是本地用户的网络质量。 |
int | txQuality | 该用户的上行网络质量,基于上行视频的发送码率、上行丢包率、平均往返时延和网络抖动计算。该值代表当前的上行网络质量,帮助判断是否可以支持当前设置的视频编码属性。假设上行码率是 1000 Kbps,那么支持 640 × 480 的分辨率、30 fps 的帧率没有问题,但是支持 1280 x 720 的分辨率就会有困难QUALITY_UNKNOWN(0):质量未知。 QUALITY_EXCELLENT(1):质量极好。 QUALITY_GOOD(2):用户主观感觉和极好差不多,但码率可能略低于极好。 QUALITY_POOR(3):用户主观感受有瑕疵但不影响沟通。 QUALITY_BAD(4):勉强能沟通但不顺畅。 QUALITY_VBAD(5):网络质量非常差,基本不能沟通。 QUALITY_DOWN(6):网络连接断开,完全无法沟通。 QUALITY_DETECTING(8):SDK 正在探测网络质量。 |
int | rxQuality | 该用户的下行网络质量,基于下行网络的丢包率、平均往返延时和网络抖动计算QUALITY_UNKNOWN(0):质量未知。 QUALITY_EXCELLENT(1):质量极好。 QUALITY_GOOD(2):用户主观感觉和极好差不多,但码率可能略低于极好。 QUALITY_POOR(3):用户主观感受有瑕疵但不影响沟通。 QUALITY_BAD(4):勉强能沟通但不顺畅。 QUALITY_VBAD(5):网络质量非常差,基本不能沟通。 QUALITY_DOWN(6):网络连接断开,完全无法沟通。 QUALITY_DETECTING(8):SDK 正在探测网络质量。 |
onLocalVideoStats
{
"engineEvent":"onLocalVideoStats",
"sentBitrate":0,
"sentFrameRate":0,
"encoderOutputFrameRate":0,
"rendererOutputFrameRate":0,
"sentTargetBitrate":0,
"sentTargetFrameRate":0,
"qualityAdaptIndication":0,
"encodedBitrate":0,
"encodedFrameWidth": 640,
"encodedFrameHeight": 480,
"encodedFrameCount":0,
"codecType":0
}
通话中本地视频流的统计信息回调。
该回调描述本地设备发送视频流的统计信息,每 2 秒触发一次。
类型 | 参数 | 描述 |
---|---|---|
int | sentBitrate | 实际发送码率,单位为 Kbps,不包含丢包后重传视频等的发送码率。 |
int | sentFrameRate | 实际发送帧率,单位为 fps,不包含丢包后重传视频等的发送帧率。 |
int | encoderOutputFrameRate | 本地编码器的输出帧率,单位为 fps。 |
int | rendererOutputFrameRate | 本地渲染器的输出帧率,单位为 fps。 |
int | targetBitrate | 当前编码器的目标编码码率,单位为 Kbps,该码率为 SDK 根据当前网络状况预估的一个值。 |
int | targetFrameRate | 当前编码器的目标编码帧率,单位为 fps。 |
int | qualityAdaptIndication | 自上次统计后本地视频质量的自适应情况(基于目标帧率和目标码率)。 |
int | encodedBitrate | 视频编码码率(Kbps)。该参数不包含丢包后重传视频等的编码码率。 |
int | encodedFrameWidth | 视频编码宽度(px)。 |
int | encodedFrameHeight | 视频编码高度(px)。 |
int | encodedFrameCount | 视频发送的帧数,累计值。 |
int | codecType | 视频的编码类型: VIDEO_CODEC_VP8(1): VP8 VIDEO_CODEC_H264(2): (Default) H.264 |
onLocalAudioStats
{
"engineEvent":"onLocalAudioStats",
"numChannels":0,
"sentSampleRate":0,
"sentBitrate":0
}
通话中本地音频流的统计信息回调。
该回调描述本地设备发送音频流的统计信息。SDK 每 2 秒触发该回调一次。
类型 | 参数 | 描述 |
---|---|---|
int | numChannels | 声道数。 |
int | sentSampleRate | 发送的采样率,单位为 Hz。 |
int | sentBitrate | 发送码率的平均值,单位为 Kbps。 |
onRemoteVideoStats
{
"engineEvent":"onRemoteVideoStats",
"uid": "123",
"delay": 0,
"width": 480,
"height": 640,
"receivedBitrate":0,
"decoderOutputFrameRate": 0,
"rendererOutputFrameRate":0,
"packetLossRate":0,
"rxStreamType":0,
"totalFrozenTime":0,
"frozenRate":0
}
通话中远端视频流的统计信息回调。
该回调描述远端用户在通话中端到端的视频流状态,针对每个远端用户/主播每 2 秒触发一次。如果远端同时存在多个用户/主播,该回调每 2 秒会被触发多次。
类型 | 参数 | 描述 |
---|---|---|
String | uid | 用户 ID,指定是哪个用户的视频流。 |
int | width | 远端视频流宽度。 |
int | height | 远端视频流高度。 |
int | receivedBitrate | 接收码率,单位为 Kbps。 |
int | decoderOutputFrameRate | 远端视频解码器的输出帧率,单位为 fps。 |
int | rendererOutputFrameRate | 远端视频渲染器的输出帧率,单位为 fps。 |
int | packetLossRate | 远端视频在网络对抗之后的丢包率 (%)。 |
int | rxStreamType | 视频流类型,大流或小流。 |
int | totalFrozenTime | 远端用户在加入频道后发生视频卡顿的累计时长(毫秒)。 |
int | frozenRate | 远端用户在加入频道后发生视频卡顿的累计时长占视频总有效时长的百分比 (%)。 |
int | totalActiveTime | 视频总有效时长(毫秒)。 |
onAudioEffectFinished
{
"engineEvent":"onAudioEffectFinished",
"soundId":6060
}
本地音效文件播放已结束回调。
当调用 playEffect 播放音效结束后,会触发该回调。
参数 | 描述 | |
---|---|---|
int | soundId | 指定音效的 ID。每个音效均有唯一的 ID。 |
onAudioRouteChanged
{
"engineEvent":"onAudioRouteChanged",
"routing":0
}
语音路由已变更回调。
当调用 setEnableSpeakerphone 成功时, SDK 会通过该回调通知 App 语音路由状态已发生变化。该回调返回当前的语音路由已切换至听筒,外放(扬声器),耳机或蓝牙。 其中 routing
定义如下:
- AUDIO_ROUTE_DEFAULT(-1):使用默认的音频路由。
- AUDIO_ROUTE_HEADSET(0):使用耳机为语音路由。
- AUDIO_ROUTE_EARPIECE(1):使用听筒为语音路由。
- AUDIO_ROUTE_HEADSETNOMIC(2):使用不带麦的耳机为语音路由。
- AUDIO_ROUTE_SPEAKERPHONE(3):使用手机的扬声器为语音路由。
- AUDIO_ROUTE_LOUDSPEAKER(4):使用外接的扬声器为语音路由。
- AUDIO_ROUTE_HEADSETBLUETOOTH(5):使用蓝牙耳机为语音路由。
onChannelMediaRelayStateChanged
{
"engineEvent":"onChannelMediaRelayStateChanged",
"state":0,
"error":0
}
跨频道媒体流转发状态发生改变回调。
当跨频道媒体流转发状态发生改变时,SDK 会触发该回调,并报告当前的转发状态以及相关的错误信息。
参数 | 描述 |
---|---|
state | 跨频道媒体流转发状态: RELAY_STATE_IDLE(0):SDK 正在初始化。 RELAY_STATE_CONNECTING(1):SDK 尝试跨频道。 RELAY_STATE_RUNNING(2):源频道主播成功加入目标频道 。 RELAY_STATE_FAILURE(3):发生异常,详见 code 中提示的错误信息。 |
error | 跨频道媒体流转发出错的错误码: RELAY_OK(0):一切正常。 RELAY_ERROR_SERVER_ERROR_RESPONSE(1):服务器回应出错 。 RELAY_ERROR_SERVER_NO_RESPONSE(2):服务器无回应。你可以调用 leaveChannel 方法离开频道。 RELAY_ERROR_NO_RESOURCE_AVAILABLE(3):SDK 无法获取服务,可能是因为服务器资源有限导致。 RELAY_ERROR_FAILED_JOIN_SRC(4):发起跨频道转发媒体流请求失败。 RELAY_ERROR_FAILED_JOIN_DEST(5):接受跨频道转发媒体流请求失败。 RELAY_ERROR_FAILED_PACKET_RECEIVED_FROM_SRC(6):服务器接收跨频道转发媒体流失败。 RELAY_ERROR_FAILED_PACKET_SENT_TO_DEST(7):服务器发送跨频道转发媒体流失败。 RELAY_ERROR_SERVER_CONNECTION_LOST(8):SDK 因网络质量不佳与服务器断开。你可以调用 leaveChannel 方法离开当前频道。 RELAY_ERROR_INTERNAL_ERROR(9):服务器内部出错 。 RELAY_ERROR_SRC_TOKEN_EXPIRED(10):源频道的 Token 已过期。 RELAY_ERROR_DEST_TOKEN_EXPIRED(11):目标频道的 Token 已过期。 |
onChannelMediaRelayEvent
{
"engineEvent":"onChannelMediaRelayEvent",
"event":0
}
跨频道媒体流转发事件回调。
该回调报告跨频道媒体流转发过程中发生的事件。
参数 | 描述 |
---|---|
event | 跨频道媒体流转发事件码: RELAY_EVENT_NETWORK_DISCONNECTED(0):网络中断导致用户与服务器连接断开。RELAY_EVENT_NETWORK_CONNECTED(1):用户与服务器建立连接。RELAY_EVENT_PACKET_JOINED_SRC_CHANNEL(2):用户已加入源频道。RELAY_EVENT_PACKET_JOINED_DEST_CHANNEL(3):用户已加入目标频道。RELAY_EVENT_PACKET_SENT_TO_DEST_CHANNEL(4):SDK 开始向目标频道发送数据包。RELAY_EVENT_PACKET_RECEIVED_VIDEO_FROM_SRC(5):服务器收到了目标频道发送的视频流。RELAY_EVENT_PACKET_RECEIVED_AUDIO_FROM_SRC(6):服务器收到了目标频道发送的音频流。RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL(7):目标频道已更新。RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_REFUSED(8):内部原因导致目标频道更新失败。RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_NOT_CHANGE(9):目标频道未发生改变,即目标频道更新失败。 RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_IS_NULL(10):目标频道名为 NULL 。RELAY_EVENT_VIDEO_PROFILE_UPDATE(11):视频属性已发送至服务器。 |
onRtmpStreamingStateChanged
{
"engineEvent":"onRtmpStreamingStateChanged",
"url": "",
"state": 0.0,
"errorCode": 0.0
}
RTMP 推流状态发生改变回调
该回调返回本地用户调用 addPublishStreamUrl 或 removePublishStreamUrl 方法的结果。
RTMP 推流状态发生改变时,SDK 会触发该回调,并在回调中明确状态发生改变的 URL 地址及当前推流状态。
该回调方便推流用户了解当前的推流状态;推流出错时,你可以通过返回的错误码了解出错的原因,方便排查问题
类型 | 参数 | 描述 |
---|---|---|
string | url | 推流状态发生改变的 URL 地址 |
int | errorCode | 错误代码 |
int | state | 当前的推流状态 |
onTranscodingUpdated
{
"engineEvent":"onTranscodingUpdated"
}
旁路推流设置被更新回调
setLiveTranscoding 方法中的直播参数 LiveTranscoding rtcEngineTranscodingUpdated 回调会被触发并向主播报告更新信息。
onRtmpStreamingEvent
{
"engineEvent":"onRtmpStreamingEvent",
"url": "",
"errorCode": 1
}
RTMP 推流事件回调
类型 | 参数 | 描述 |
---|---|---|
string | url | RTMP 推流 URL |
int | errorCode | 错误代码 |
onStreamPublished
{
"engineEvent":"onStreamPublished",
"url": "",
"errorCode": 1
}
开启旁路推流的结果回调
返回 addPublishStreamUrl 方法的调用结果。如果调用不成功,你可以在 errorCode 参数中查看详细的错误信息。
类型 | 参数 | 描述 |
---|---|---|
string | url | 主播停止推流的 RTMP 地址 |
int | errorCode | 错误代码 |
onStreamUnpublished
{
"engineEvent":"onStreamUnpublished",
"url": ""
}
停止旁路推流的结果回调
类型 | 参数 | 描述 |
---|---|---|
string | url | 主播停止推流的 RTMP 地址 |