网络及其他
介绍跟网络相关的方法以及其他方法和回调。
complain
enableEncryption
开启或关闭内置加密。
public abstract int enableEncryption(boolean enabled, EncryptionConfig config);
用户离开频道后,SDK 会自动关闭加密。如需重新开启加密,你需要在用户再次加入频道前调用该方法。
适用场景
对安全要求较高的场景。
调用时机
该方法需要在加入频道前调用。
调用限制
- 同一频道内的所有用户在调用该方法时,必须设置相同的加密模式和密钥。
- 如果开启了内置加密,则不能使用旁路推流功能。
参数
- enabled
- 是否开启内置加密:
- true: 开启内置加密。
- false:(默认)关闭内置加密。
- config
- 配置内置加密模式和密钥。详见 EncryptionConfig。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败
- -2: 调用了无效的参数。需重新指定参数。
- -4: 设置的加密模式不正确或加载外部加密库失败。需检查枚举值是否正确或重新加载外部加密库。
- -7: SDK 尚未初始化。需在调用 API 之前已创建 RtcEngine 对象并完成初始化。
enableEncryptionEx
开启或关闭内置加密。
public abstract int enableEncryptionEx(
boolean enabled, EncryptionConfig config, RtcConnection connection);
用户离开频道后,SDK 会自动关闭加密。如需重新开启加密,你需要在用户再次加入频道前调用该方法。
适用场景
对安全要求较高的场景。
调用时机
该方法需要在加入频道前调用。
调用限制
- 同一频道内的所有用户在调用该方法时,必须设置相同的加密模式和密钥。
- 如果开启了内置加密,则不能使用旁路推流功能。
参数
- enabled
- 是否开启内置加密:
- true: 开启内置加密。
- false:(默认)关闭内置加密。
- config
- 配置内置加密模式和密钥。详见 EncryptionConfig。
- connection
- Connection 信息。详见 RtcConnection。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
enableWebSdkInteroperability
打开与 Web SDK 的互通(仅在直播场景适用)。
public abstract int enableWebSdkInteroperability(boolean enabled);
详情
该方法打开或关闭与 Web SDK 的互通。如果有用户通过 Web SDK 加入频道,请确保调用该方法,否则 Web 端用户看 Native 端的画面会是黑屏。
该方法仅在直播场景下适用,通信场景下默认互通是打开的。
参数
- enabled
- 是否打开与 Web SDK 的互通:
true
: 打开互通。false
: (默认) 关闭互通。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
getCallId
getCallIdEx
使用连接 ID 获取通话 ID。
public abstract String getCallIdEx(RtcConnection connection);
调用时机
该方法需要在加入频道后调用。
调用限制
无。
参数
- connection
- Connection 信息。详见 RtcConnection。
getConnectionState
getConnectionStateEx
获取当前网络连接状态。
public abstract RtcConnection.CONNECTION_STATE_TYPE getConnectionStateEx(
RtcConnection connection);
调用时机
加入频道前后均可调用。
调用限制
无。
参数
- connection
- Connection 信息。详见 RtcConnection。
返回值
当前网络连接状态。
所属接口类getCurrentMonotonicTimeInMs
获取 SDK 当前的 Monotonic Time。
public abstract long getCurrentMonotonicTimeInMs();
Monotonic Time 是指一个单调递增的时间序列,它的值会随着时间的推移而增加。单位为毫秒。
在自定义视频采集、自定义音频采集场景中,为确保音视频同步,声网建议你调用该方法获取 SDK 当前的 Monotonic Time 后,将该值传入采集的视频帧(VideoFrame)、音频帧(AudioFrame)的时间戳参数。
调用时机
加入频道前后均可调用。
调用限制
无。
返回值
- ≥ 0: 方法调用成功,返回 SDK 当前的 Monotonic Time(毫秒)。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
getErrorDescription
getNativeHandle
getNetworkType
getNtpWallTimeInMs
getSdkVersion
isFeatureAvailableOnDevice
查询设备是否支持指定进阶功能。
public abstract boolean isFeatureAvailableOnDevice(int type);
详情
查询当前设备能力是否满足虚拟背景、美颜等进阶功能的要求。
适用场景
在使用进阶音视频功能前,你可以根据查询结果判断当前设备是否支持这些功能,从而避免在低端设备上开启进阶功能导致性能下降或功能不可用的问题。你可以根据该方法的返回值,决定是否显示或启用相应的功能按钮,或者在设备能力不足时,为用户提示相应信息。
参数
- type
- 进阶功能类型:
- VIDEO_VIRTUAL_BACKGROUND (1):虚拟背景功能。
- VIDEO_BEAUTY_EFFECT (2):美颜功能。
返回值
true
: 设备支持指定进阶功能。false
: 设备不支持指定进阶功能。
queryDeviceScore
rate
sendCustomReportMessage
sendCustomReportMessageEx
setAVSyncSource
设置发流端音画同步。
public abstract int setAVSyncSource(String channelId, int uid);
详情
同一用户可能使用两个设备分别发送音频流和视频流,为保证接收端听到和看到的音频和视频的时间同步性,你可以在视频发送端调用该方法,并传入音频发送端的频道名、用户 ID。 SDK 会以发送的音频流的时间戳为基准进行自动调节发送的视频流,以保证即使在两个发送端的上行网络情况不一致(如分别使用 Wi-Fi 和 4G 网络)的情况下,也能让接收到的音视频具有时间同步性。
参数
- channelId
- 标识音频发送端所在频道的频道名。
- uid
- 音频发送端的用户 ID。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
setCloudProxy
设置云代理服务。
public abstract int setCloudProxy(int proxyType);
详情
当用户的网络访问受到防火墙限制时,你需要将声网提供的 IP 和端口号添加到防火墙白名单,然后调用该方法开启云代理,并通过 proxyType 参数设置云代理类型。
成功连接云代理后,SDK 会触发 onConnectionStateChanged (CONNECTION_STATE_CONNECTING, CONNECTION_CHANGED_SETTING_PROXY_SERVER) 回调。
如果你想关闭已设置的 Force UDP 或 Force TCP 云代理,请调用 setCloudProxy(TRANSPORT_TYPE_NONE_PROXY)
。
如果你想更改已设置的云代理类型,请先调用 setCloudProxy(TRANSPORT_TYPE_NONE_PROXY)
,再调用 setCloudProxy 并传入你期望的 proxyType 值。
- 建议你在频道外调用该方法。
- 如果用户处于内网防火墙环境下,使用 Force UDP 云代理时,旁路推流和跨频道媒体流转发功能不可用。
- 使用 Force UDP 云代理时,调用 startAudioMixing [2/2] 方法时无法播放 HTTP 协议的在线音频文件。旁路推流和跨频道媒体流转发功能会使用 TCP 协议的云代理。
参数
- proxyType
- 云代理类型。
- TRANSPORT_TYPE_NONE_PROXY(0):自动模式。SDK 默认开启该模式。在该模式下,SDK 优先连接 SD-RTN™,如果连接失败,自动切换到 TLS 443。
- TRANSPORT_TYPE_UDP_PROXY(1):UDP 协议的云代理,即 Force UDP 云代理模式。在该模式下,SDK 始终通过 UDP 协议传输数据。
- TRANSPORT_TYPE_TCP_PROXY(2):TCP(加密)协议的云代理,即 Force TCP 云代理模式。在该模式下,SDK 始终通过 TLS 443 传输数据。
该参数为必填参数,如果你不赋值,SDK 会报错。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
- -2: 传入的参数无效。
- -7: SDK 尚未初始化。
setLocalAccessPoint
配置与声网私有媒体服务器接入模块的连接。
public abstract int setLocalAccessPoint(LocalAccessPointConfiguration config);
成功部署声网私有媒体服务器并在内网终端集成 4.x RTC SDK 后,你可以调用该方法指定 Local Access Point,给 SDK 分配接入模块。
调用时机
该方法需要在加入频道前调用。
调用限制
该方法仅在部署声网混合云方案后生效。你可以联系销售了解和部署声网混合云。
参数
- config
- Local Access Point 配置。详见 LocalAccessPointConfiguration。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
setLogFile
设置日志文件
public abstract int setLogFile(String filePath);
设置 SDK 的输出 log 文件。SDK 运行时产生的所有 log 将写入该文件。
调用时机
该方法需要在 create [2/2] 后立即调用,否则输出日志可能不完整。
调用限制
App 必须保证指定的目录存在而且可写。
参数
- filePath
- 日志文件的完整路径。该日志文件为 UTF-8 编码。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
setLogFileSize
设置 SDK 输出的日志文件的大小。
public abstract int setLogFileSize(long fileSizeInKBytes);
详情
logConfig
参数设置日志文件大小。默认情况下,SDK 会生成 5 个 SDK 日志文件和 5 个 API 调用日志文件,规则如下:
- SDK 日志文件的名称分别为:
agorasdk.log
、agorasdk.1.log
、agorasdk.2.log
、agorasdk.3.log
、agorasdk.4.log
。 - API 调用日志文件的名称分别为:
agoraapi.log
、agoraapi.1.log
、agoraapi.2.log
、agoraapi.3.log
、agoraapi.4.log
。 - 每个 SDK 日志文件的默认大小为 2,048 KB;API 调用日志文件的默认大小为 2,048 KB。日志文件均为 UTF-8 编码。
- 最新的日志永远写在
agorasdk.log
和agoraapi.log
中。 - 当
agorasdk.log
写满后,SDK 会按照以下顺序对日志文件进行操作:- 删除
agorasdk.4.log
文件(如有)。 - 将
agorasdk.3.log
重命名为agorasdk.4.log
。 - 将
agorasdk.2.log
重命名为agorasdk.3.log
。 - 将
agorasdk.1.log
重命名为agorasdk.2.log
。 - 新建
agorasdk.log
文件。
- 删除
agoraapi.log
文件的覆盖规则与agorasdk.log
相同。
该方法仅用于设置 agorasdk.log
文件的大小,对agoraapi.log
不生效。
参数
- fileSizeInKBytes
- 单个
agorasdk.log
日志文件的大小,单位为 KB,取值范围为 [128,20480],默认值为 2,048 KB。如果你将fileSizeInKByte
设为小于 128 KB,SDK 会自动调整到 128 KB;如果你将fileSizeInKByte
设为大于 20,480 KB,SDK 会自动调整到 20,480 KB。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
setLogFilter
设置日志输出等级。
public abstract int setLogFilter(int filter);
详情
该方法设置 SDK 的输出日志输出等级。不同的输出等级可以单独或组合使用。日志级别顺序依次为 LOG_FILTER_OFF、LOG_FILTER_CRITICAL、LOG_FILTER_ERROR、LOG_FILTER_WARN、LOG_FILTER_INFO 和 LOG_FILTER_DEBUG。 选择一个级别,你就可以看到在该级别之前所有级别的日志信息。
例如,你选择 LOG_FILTER_WARN 级别,就可以看到在 LOG_FILTER_CRITICAL、LOG_FILTER_ERROR 和 LOG_FILTER_WARN 级别的日志信息。
参数
- filter
- 日志过滤等级。
- LOG_FILTER_OFF (0):不输出日志信息。
- LOG_FILTER_DEBUG (0x80f):输出所有 API 日志信息。如果你想获取最完整的日志,可以将日志级别设为该等级。
- LOG_FILTER_INFO (0x0f):输出 LOG_FILTER_CRITICAL、LOG_FILTER_ERROR、LOG_FILTER_WARN 和 LOG_FILTER_INFO 级别的日志信息。建议你将日志级别设为该等级。
- LOG_FILTER_WARN (0x0e):输出 LOG_FILTER_CRITICAL、LOG_FILTER_ERROR 和 LOG_FILTER_WARN 级别的日志信息。
- LOG_FILTER_ERROR (0x0c):输出 LOG_FILTER_CRITICAL 和 LOG_FILTER_ERROR 级别的日志信息。
- LOG_FILTER_CRITICAL (0x08):输出 LOG_FILTER_CRITICAL 级别的日志信息。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
setLogLevel
setParameters
setRemoteSubscribeFallbackOption [1/2]
设置弱网环境下订阅的音视频流回退选项。
public abstract int setRemoteSubscribeFallbackOption(int option);
详情
网络不理想的环境下,实时通信音视频的质量会下降。你可以调用该方法并将 option 设置为 STREAM_FALLBACK_OPTION_VIDEO_STREAM_LOW 或 STREAM_FALLBACK_OPTION_AUDIO_ONLY,SDK 会在下行弱网且音视频质量严重受影响时,将视频流切换为小流或关闭视频流,从而保证音频质量。同时,SDK 会持续监控网络质量,并在网络质量改善时恢复订阅音视频流。
当订阅流回退为音频流或由音频流恢复为音视频流时,SDK 会触发 onRemoteSubscribeFallbackToAudioOnly 回调。
参数
- option
- 订阅流的回退选项。
- STREAM_FALLBACK_OPTION_DISABLED (0): 网络条件较差时,不对音视频流作回退处理,但不能保证音视频流的质量。
- STREAM_FALLBACK_OPTION_VIDEO_STREAM_LOW (1):(默认)网络条件较差时,只接收视频小流(低分辨率、低码率视频流)。
- STREAM_FALLBACK_OPTION_AUDIO_ONLY (2): 网络条件较差时,先尝试只接收视频小流;如果因网络环境太差无法显示视频,则再回退到只接收订阅的音频流。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
setRemoteSubscribeFallbackOption [2/2]
设置弱网环境下订阅的音视频流回退选项。
public abstract int setRemoteSubscribeFallbackOption(Constants.StreamFallbackOptions option);
详情
网络不理想的环境下,实时通信音视频的质量会下降。你可以调用该方法并将 option 设置为 STREAM_FALLBACK_OPTION_VIDEO_STREAM_LOW 或 STREAM_FALLBACK_OPTION_AUDIO_ONLY,SDK 会在下行弱网且音视频质量严重受影响时,将视频流切换为小流或关闭视频流,从而保证音频质量。同时,SDK 会持续监控网络质量,并在网络质量改善时恢复订阅音视频流。
当订阅流回退为音频流或由音频流恢复为音视频流时,SDK 会触发 onRemoteSubscribeFallbackToAudioOnly 回调。
参数
- option
- 订阅流的回退选项。详见 StreamFallbackOptions。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
startEchoTest
开始音视频通话回路测试。
public abstract int startEchoTest(EchoTestConfiguration config);
为测试用户本地发流、收流是否正常,你可以调用该方法进行音视频通话回路测试,即测试系统的音视频设备和用户的上下行网络是否正常。
开始测试后,用户需发出声音或面对摄像头,音频或视频会在约 2 秒后播放出来。如果音频播放正常,则表示系统音频设备和用户上下行网络均正常; 如果视频播放正常,则表示系统视频设备和用户上下行网络均正常。
调用时机
该方法在加入频道前后均可调用。
调用限制
- 在频道内调用该方法时,需确保当前没有发布音视频流。
- 调用该方法后,必须调用 stopEchoTest 结束测试,否则该用户无法进行下一次音视频通话回路测试,也无法加入频道。
- 直播场景下,该方法仅能由主播调用。
参数
- config
- 音视频通话回路测试的配置。详见 EchoTestConfiguration。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
startLastmileProbeTest
开始通话前网络质量探测。
public abstract int startLastmileProbeTest(LastmileProbeConfig config);
开始通话前网络质量探测,向用户反馈上下行网络的带宽、丢包、网络抖动和往返时延数据。
调用时机
该方法需要在加入频道前调用,且在收到 onLastmileQuality 和 onLastmileProbeResult 回调之前请不要调用其他方法,否则可能会由于 API 操作过于频繁导致此方法无法执行。
调用限制
无。
相关回调
- onLastmileQuality,视网络情况约 2 秒内返回。该回调通过打分反馈上下行网络质量,更贴近用户的主观感受。
- onLastmileProbeResult,视网络情况约 30 秒内返回。该回调通过具体数据反馈上下行网络质量,更加客观。
参数
- config
- Last mile 网络探测配置,详见 LastmileProbeConfig。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
stopEchoTest
停止语音通话回路测试。
public abstract int stopEchoTest();
调用 startEchoTest 后,必须调用该方法结束测试,否则该用户无法进行下一次音视频通话回路测试,也无法加入频道。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。详见错误码了解详情和解决建议。
- -5(ERR_REFUSED): 停止测试失败,可能是测试不在运行中。
stopLastmileProbeTest
onConnectionBanned
onConnectionInterrupted
网络连接中断回调。
public void onConnectionInterrupted() {}
详情
- onConnectionInterrupted 回调一定是发生在成功加入频道后,且 SDK 刚失去和服务器连接超过 4 秒时触发。
- onConnectionLost 回调是无论是否成功加入频道,只要 10 秒内和服务器无法建立连接都会触发。
onConnectionLost
网络连接中断,且 SDK 无法在 10 秒内连接服务器回调。
public void onConnectionLost() {}
详情
SDK 在调用 joinChannel [2/2] 后,无论是否加入成功,只要 10 秒和服务器无法连接就会触发该回调。如果 SDK 在断开连接后,20 分钟内还是没能重新加入频道,SDK 会停止尝试重连。
所属接口类onConnectionStateChanged
网络连接状态已改变回调。
public void onConnectionStateChanged(int state, int reason) {}
详情
该回调在网络连接状态发生改变的时候触发,并告知用户当前的网络连接状态和引起网络状态改变的原因。
参数
- state
当前网络连接状态。
- CONNECTION_STATE_DISCONNECTED(1):网络连接断开。
- CONNECTION_STATE_CONNECTING(2):建立网络连接中。
- CONNECTION_STATE_CONNECTED(3):网络已连接。
- CONNECTION_STATE_RECONNECTING(4):重新建立网络连接中。
- CONNECTION_STATE_FAILED(5):网络连接失败。
- reason
- CONNECTION_CHANGED_CONNECTING (0):建立网络连接中。
- CONNECTION_CHANGED_JOIN_SUCCESS (1):成功加入频道。
- CONNECTION_CHANGED_INTERRUPTED (2):网络连接中断。
- CONNECTION_CHANGED_BANNED_BY_SERVER (3):网络连接被服务器禁止,例如,当用户被踢出频道时,会返回该状态。
- CONNECTION_CHANGED_JOIN_FAILED (4):加入频道失败。SDK 在尝试加入频道 20 分钟后仍未能加入频道,会返回该状态并不再尝试重连。请提示用户尝试切换网络后重新加入频道。
- CONNECTION_CHANGED_LEAVE_CHANNEL (5):离开频道。
- CONNECTION_CHANGED_INVALID_APP_ID (6):App ID 无效。请使用有效的 APP ID 重新加入频道,并确保你使用的 App ID 与在声网控制台生成的一致。
- CONNECTION_CHANGED_INVALID_CHANNEL_NAME (7):频道名无效。请更换有效的频道名重新加入频道。有效的频道名为长度在 64 字节以内的字符串。以下为支持的字符集范围(共 89 个字符):
- 26 个小写英文字母 a~z
- 26 个大写英文字母 A~Z
- 10 个数字 0~9
- "!"、"#"、"$"、"%"、"&"、"("、")"、"+"、"-"、":"、";"、"<"、"="、"."、">"、"?"、"@"、"["、"]"、"^"、"_"、"{"、"}"、"|"、"~"、","
- CONNECTION_CHANGED_INVALID_TOKEN (8):Token 无效。一般有以下原因:
- 你的项目启用了 App Certificate,但加入频道未使用 Token。
- 在调用 joinChannel [2/2] 加入频道时指定的用户 ID 与生成 Token 时传入的用户 ID 不一致。
- 生成的 Token 和加入频道使用的 Token 不一致。
- 当你的项目启用了 App Certificate 时,使用 Token 加入频道。
- 生成 Token 时指定的用户 ID 与加入频道时使用的用户 ID 一致,
- 生成的 Token 和加入频道使用的 Token 一致。
- CONNECTION_CHANGED_TOKEN_EXPIRED (9):当前使用的 Token 已过期。请重新在你的服务端生成 Token,然后用新的 Token 重新加入频道。
- CONNECTION_CHANGED_REJECTED_BY_SERVER (10):此用户被服务器禁止 。
- CONNECTION_CHANGED_SETTING_PROXY_SERVER (11):由于设置了代理服务器,SDK 尝试重连 。
- CONNECTION_CHANGED_RENEW_TOKEN (12):更新 Token 引起网络连接状态改变 。
- CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED (13):客户端 IP 地址变更。如多次收到该状态码,请提示用户更换网络后尝试重新加入频道。
- CONNECTION_CHANGED_KEEP_ALIVE_TIMEOUT (14):SDK 和服务器连接保活超时,进入自动重连状态。
- CONNECTION_CHANGED_REJOIN_SUCCESS (15):重新加入频道成功。
- CONNECTION_CHANGED_LOST (16):SDK 和服务器失去连接。
- CONNECTION_CHANGED_ECHO_TEST (17):连接状态变化由回声测试引起。
- CONNECTION_CHANGED_CLIENT_IP_ADDRESS_CHANGED_BY_USER (18):本地 IP 地址被用户更改。
- CONNECTION_CHANGED_SAME_UID_LOGIN (19):使用相同的 UID 从不同的设备加入同一频道。
- CONNECTION_CHANGED_TOO_MANY_BROADCASTERS (20):频道内主播人数已达上限。
onEncryptionError
内置加密出错回调。
public void onEncryptionError(int errorType) {}
详情
调用 enableEncryption 开启加密后, 如果发流端、收流端出现加解密出错,SDK 会触发该回调。
参数
- errorType
- 错误类型。
- ENCRYPTION_ERROR_INTERNAL_FAILURE (0): 内部原因。
- ENCRYPTION_ERROR_DECRYPTION_FAILURE (1): 媒体流解密错误。请确保接收端和发送端使用的加密模式或密钥一致。
- ENCRYPTION_ERROR_ENCRYPTION_FAILURE (2): 媒体流加密错误。
- ENCRYPTION_ERROR_DATASTREAM_DECRYPTION_FAILURE (3): 数据流解密错误。请确保接收端和发送端使用的加密模式或密钥一致。
- ENCRYPTION_ERROR_DATASTREAM_ENCRYPTION_FAILURE (4): 数据流加密错误。
onLastmileProbeResult
通话前网络上下行 Last mile 质量探测报告回调。
public void onLastmileProbeResult(LastmileProbeResult result) {}
详情
在调用 startLastmileProbeTest 之后,SDK 会在约 30 秒内返回该回调。
参数
- result
- 上下行 Last mile 质量探测结果。详见 LastmileProbeResult。
onLastmileQuality
网络上下行 last mile 质量报告回调。
public void onLastmileQuality(int quality) {}
详情
该回调描述本地用户在加入频道前的 last mile 网络探测的结果,其中 last mile 是指设备到声网边缘服务器的网络状态。
加入频道前,调用 startLastmileProbeTest 之后,SDK 触发该回调报告本地用户在加入频道前的 last mile 网络探测的结果。
参数
- quality
- Last mile 网络质量。
- QUALITY_UNKNOWN (0):质量未知。
- QUALITY_EXCELLENT (1):质量极好。
- QUALITY_GOOD (2):用户主观感觉和极好差不多,但码率可能略低于极好。
- QUALITY_POOR (3):用户主观感受有瑕疵但不影响沟通。
- QUALITY_BAD (4):勉强能沟通但不顺畅。
- QUALITY_VBAD (5):网络质量非常差,基本不能沟通。
- QUALITY_DOWN (6):网络连接断开,完全无法沟通。
- QUALITY_DETECTING (8):网络质量检测进行中。
onNetworkQuality
通话中每个用户的网络上下行 last mile 质量报告回调。
public void onNetworkQuality(int uid, int txQuality, int rxQuality) {}
详情
该回调描述每个用户在通话中的 last mile 网络状态,其中 last mile 是指设备到声网边缘服务器的网络状态。
该回调每 2 秒触发一次。如果远端有多个用户,该回调每 2 秒会被触发多次。
该回调通过频道内的广播包反馈网络质量。过多的广播包可能引发广播风暴。为防止广播风暴导致频道内大量数据传输,该回调默认支持同时反馈最多 4 个远端主播的网络质量。
UNKNOWN
;用户不收流时,rxQuality 为 UNKNOWN
。参数
- uid
用户 ID。表示该回调报告的是持有该 ID 的用户的网络质量。如果当 uid 为 0 时,返回的是本地用户的网络质量。
- txQuality
- 该用户的上行网络质量,基于发送码率、上行丢包率、平均往返时延和网络抖动计算。 该值代表当前的上行网络质量,帮助判断是否可以支持当前设置的视频编码属性。 假设上行码率是 1000 Kbps,那么支持直播场景下 640 × 480 的分辨率、15 fps 的帧率没有问题,但是支持 1280 × 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):网络质量检测进行中。
- 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):网络质量检测进行中。
onNetworkTypeChanged
本地网络类型发生改变回调。
public void onNetworkTypeChanged(int type) {}
详情
本地网络连接类型发生改变时,SDK 会触发该回调,并在回调中明确当前的网络连接类型。你可以通过该回调获取正在使用的网络类型;当连接中断时,该回调能辨别引起中断的原因是网络切换还是网络条件不好。
参数
- type
- 网络连接类型:
- NETWORK_TYPE_UNKNOWN (-1):网络连接类型未知。
- NETWORK_TYPE_DISCONNECTED (0):网络连接已断开。
- NETWORK_TYPE_LAN (1):网络类型为 LAN。
- NETWORK_TYPE_WIFI (2):网络类型为 Wi-Fi(包含热点)。
- NETWORK_TYPE_MOBILE_2G (3):网络类型为 2G 移动网络。
- NETWORK_TYPE_MOBILE_3G (4):网络类型为 3G 移动网络。
- NETWORK_TYPE_MOBILE_4G (5):网络类型为 4G 移动网络。
- NETWORK_TYPE_MOBILE_5G (6):网络类型为 5G 移动网络。
onPermissionError
onProxyConnected
代理连接状态回调。
public void onProxyConnected(
String channel, int uid, int proxyType, String localProxyIp, int elapsed) {}
详情
通过该回调你可以监听 SDK 连接代理的状态。例如,当用户调用 setCloudProxy 设置代理并成功加入频道后,SDK 会触发该回调报告用户 ID、连接的代理类型和从调用 joinChannel [2/2] 到触发该回调经过的时间等。
参数
- channel
- 频道名称。
- uid
- 用户 ID
- proxyType
- 连接上的代理类型。
- PROXY_TYPE_NONE_PROXY (0): 预留参数,暂不支持。
- PROXY_TYPE_UDP_CLOUD_PROXY (1): UDP 协议的云代理,即 Force UDP 云代理模式。在该模式下,SDK 始终通过 UDP 协议传输数据。
- PROXY_TYPE_TCP_CLOUD_PROXY (2): TCP(加密)协议的云代理,即 Force TCP 云代理模式。在该模式下,SDK 始终通过 TLS 443 传输数据。
- PROXY_TYPE_LOCAL_PROXY (3): 预留参数,暂不支持。
- PROXY_TYPE_TCP_AUTO_FALLBACK (4): 自动模式。在该模式下,SDK 优先连接 SD-RTN™,如果连接失败,自动切换为 TLS 443。
- localProxyIp
- 预留参数,暂不支持。
- elapsed
- 从调用 joinChannel [2/2] 到 SDK 触发该回调的经过的时间(毫秒)。
onRemoteSubscribeFallbackToAudioOnly
订阅流已回退为音频流或恢复为音视频流回调。
public void onRemoteSubscribeFallbackToAudioOnly(int uid, boolean isFallbackOrRecover) {}
详情
- 下行网络环境较差,订阅的音视频流回退为音频流
- 下行网络环境改善,订阅音频流恢复为音视频流
参数
- uid
- 远端用户的用户 ID。
- isFallbackOrRecover
true
: 由于网络环境不理想,订阅流已回退为音频流。false
: 由于网络环境改善,订阅流已恢复为音视频流。
onUplinkNetworkInfoUpdated
上行网络信息变化回调。
public void onUplinkNetworkInfoUpdated(UplinkNetworkInfo info) {}
详情
只有当上行网络信息发生变化时,SDK 才会触发该回调。
参数
- info
- 上行网络信息,详见 UplinkNetworkInfo。