Public 成员函数 | |
---|---|
virtual | ~IChannelEventHandler () |
virtual void | onChannelWarning (IChannel *rtcChannel, int warn, const char *msg) |
virtual void | onChannelError (IChannel *rtcChannel, int err, const char *msg) |
virtual void | onJoinChannelSuccess (IChannel *rtcChannel, uid_t uid, int elapsed) |
virtual void | onRejoinChannelSuccess (IChannel *rtcChannel, uid_t uid, int elapsed) |
virtual void | onLeaveChannel (IChannel *rtcChannel, const RtcStats &stats) |
virtual void | onClientRoleChanged (IChannel *rtcChannel, CLIENT_ROLE_TYPE oldRole, CLIENT_ROLE_TYPE newRole) |
virtual void | onUserJoined (IChannel *rtcChannel, uid_t uid, int elapsed) |
virtual void | onUserOffline (IChannel *rtcChannel, uid_t uid, USER_OFFLINE_REASON_TYPE reason) |
virtual void | onConnectionLost (IChannel *rtcChannel) |
virtual void | onRequestToken (IChannel *rtcChannel) |
virtual void | onTokenPrivilegeWillExpire (IChannel *rtcChannel, const char *token) |
virtual void | onRtcStats (IChannel *rtcChannel, const RtcStats &stats) |
virtual void | onNetworkQuality (IChannel *rtcChannel, uid_t uid, int txQuality, int rxQuality) |
virtual void | onRemoteVideoStats (IChannel *rtcChannel, const RemoteVideoStats &stats) |
virtual void | onRemoteAudioStats (IChannel *rtcChannel, const RemoteAudioStats &stats) |
virtual void | onRemoteAudioStateChanged (IChannel *rtcChannel, uid_t uid, REMOTE_AUDIO_STATE state, REMOTE_AUDIO_STATE_REASON reason, int elapsed) |
virtual void | onActiveSpeaker (IChannel *rtcChannel, uid_t uid) |
virtual void | onVideoSizeChanged (IChannel *rtcChannel, uid_t uid, int width, int height, int rotation) |
virtual void | onRemoteVideoStateChanged (IChannel *rtcChannel, uid_t uid, REMOTE_VIDEO_STATE state, REMOTE_VIDEO_STATE_REASON reason, int elapsed) |
virtual void | onStreamMessage (IChannel *rtcChannel, uid_t uid, int streamId, const char *data, size_t length) |
virtual void | onStreamMessageError (IChannel *rtcChannel, uid_t uid, int streamId, int code, int missed, int cached) |
virtual void | onChannelMediaRelayStateChanged (IChannel *rtcChannel, CHANNEL_MEDIA_RELAY_STATE state, CHANNEL_MEDIA_RELAY_ERROR code) |
virtual void | onChannelMediaRelayEvent (IChannel *rtcChannel, CHANNEL_MEDIA_RELAY_EVENT code) |
virtual void | onRtmpStreamingStateChanged (IChannel *rtcChannel, const char *url, RTMP_STREAM_PUBLISH_STATE state, RTMP_STREAM_PUBLISH_ERROR errCode) |
virtual void | onTranscodingUpdated (IChannel *rtcChannel) |
virtual void | onStreamInjectedStatus (IChannel *rtcChannel, const char *url, uid_t uid, int status) |
virtual void | onLocalPublishFallbackToAudioOnly (IChannel *rtcChannel, bool isFallbackOrRecover) |
virtual void | onRemoteSubscribeFallbackToAudioOnly (IChannel *rtcChannel, uid_t uid, bool isFallbackOrRecover) |
virtual void | onConnectionStateChanged (IChannel *rtcChannel, CONNECTION_STATE_TYPE state, CONNECTION_CHANGED_REASON_TYPE reason) |
详细描述
构造及析构函数说明
~IChannelEventHandler()
virtual ~IChannelEventHandler()
成员函数说明
onChannelWarning()
virtual void onChannelWarning(IChannel rtcChannel, int warn, const char msg)
IChannel 的警告码。
报告参数
参数 | 描述 |
---|---|
rtcChannel | IChannel |
warn | 警告码,详见 WARN_CODE_TYPE |
msg | 警告信息 |
onChannelError()
virtual void onChannelError(IChannel rtcChannel, int err, const char msg)
IChannel 的错误码。
报告参数
参数 | 描述 |
---|---|
rtcChannel | IChannel |
err | 警告码,详见 ERROR_CODE_TYPE |
msg | 警告信息 |
onJoinChannelSuccess()
virtual void onJoinChannelSuccess(IChannel *rtcChannel, uid_t uid, int elapsed)
加入频道回调。
该回调方法表示该客户端成功加入了指定的频道。
参数
参数 | 描述 |
---|---|
rtcChannel | IChannel |
uid | 用户 ID。如果 joinChannel 中指定了 uid,则此处返回该 ID;否则使用 anyRTC 服务器自动分配的 ID。 |
elapsed | 从 joinChannel 开始到发生此事件过去的时间(毫秒)。 |
onRejoinChannelSuccess()
virtual void onRejoinChannelSuccess(IChannel *rtcChannel, uid_t uid, int elapsed)
重新加入频道回调。
有时候由于网络原因,客户端可能会和服务器失去连接,SDK 会进行自动重连,自动重连成功后触发此回调方法。
参数
参数 | 描述 |
---|---|
rtcChannel | IChannel |
uid | 用户 ID。 |
elapsed | 从开始重连到重连成功的时间(毫秒)。 |
onLeaveChannel()
virtual void onLeaveChannel(IChannel *rtcChannel, const RtcStats& stats)
离开频道回调。
App 调用 leaveChannel 方法时,SDK提示 App 离开频道成功。在该回调方法中,App 可以得到此次通话的总通话时长、SDK 收发数据的流量等信息。App 通过该回调获取通话时长以及 SDK 接收到或发送的数据统计信息。
参数
参数 | 描述 |
---|---|
rtcChannel | IChannel |
stats | 通话的统计数据: RtcStats 。 |
onClientRoleChanged()
virtual void onClientRoleChanged(IChannel *rtcChannel, CLIENT_ROLE_TYPE oldRole, CLIENT_ROLE_TYPE newRole)
直播场景下用户角色已切换回调。
直播场景下,当用户切换角色时会触发此回调,即主播切换为观众时,或观众切换为主播时。
该回调由本地用户在加入频道后调用 setClientRole 改变用户角色触发的。
参数
参数 | 描述 |
---|---|
rtcChannel | IChannel |
oldRole | 切换前的角色: CLIENT_ROLE_TYPE 。 |
newRole | 切换前的角色: CLIENT_ROLE_TYPE 。 |
onUserJoined()
virtual void onUserJoined(IChannel *rtcChannel, uid_t uid, int elapsed)
远端用户(通信场景)/主播(直播场景)加入当前频道回调。
-
通信场景下,该回调提示有远端用户加入了频道,并返回新加入用户的 ID;如果加入之前,已经有其他用户在频道中了,新加入的用户也会收到这些已有用户加入频道的回调。
-
直播场景下,该回调提示有主播加入了频道,并返回该主播的 ID。如果在加入之前,已经有主播在频道中了,新加入的用户也会收到已有主播加入频道的回调。anyRTC建议连麦主播不超过 50 人。
该回调在如下情况下会被触发:
- 远端用户/主播调用 joinChannel 方法加入频道
- 远端用户加入频道后调用 setClientRole 将用户角色改变为主播
- 远端用户/主播网络中断后重新加入频道
- 主播通过调用 addInjectStreamUrl 方法成功输入在线媒体流
参数
参数 | 描述 |
---|---|
rtcChannel | IChannel |
uid | 新加入频道的远端用户/主播 ID。 |
elapsed | 从本地用户调用 joinChannel 到该回调触发的延迟(毫秒)。 |
注意事项:
直播场景下,
- 主播间能相互收到新主播加入频道的回调,并能获得该主播的 uid。
- 观众也能收到新主播加入频道的回调,并能获得该主播的 uid。
- 当 Web 端加入直播频道时,只要 Web 端有推流,SDK 会默认该 Web 端为主播,并触发该回调。
onUserOffline()
virtual void onUserOffline(IChannel *rtcChannel, uid_t uid, USER_OFFLINE_REASON_TYPE reason)
远端用户(通信场景)/主播(直播场景)离开当前频道回调。
提示有远端用户/主播离开了频道(或掉线)。用户离开频道有两个原因,即正常离开和超时掉线:
- 正常离开的时候,远端用户/主播会发送类似“再见”的消息。接收此消息后,判断用户离开频道。
- 超时掉线的依据是,在一定时间内(通信场景为 20 秒,直播场景稍有延时),用户没有收到对方的任何数据包,则判定为对方掉线。在网络较差的情况下,有可能会误报。我们建议使用 anyRTC 实时消息 SDK 来做可靠的掉线检测。
参数
参数 | 描述 |
---|---|
rtcChannel | IChannel |
uid | 离线用户或主播的用户 ID。 |
reason | 离线原因: USER_OFFLINE_REASON_TYPE 。 |
onConnectionLost()
virtual void onConnectionLost(IChannel *rtcChannel)
网络连接丢失回调
SDK 在调用 joinChannel 后无论是否加入成功,只要 10 秒和服务器无法连接就会触发该回调。
与 onConnectionInterrupted 的区别是:
-
onConnectionInterrupted 回调一定是发生在加入频道成功后,且 SDK 刚失去和服务器连接超过 4 秒时触发。
-
onConnectionLost 回调是无论之前加入频道是否成功,只要 10 秒内和服务器无法建立连接都会触发。
如果 SDK 在断开连接后,20 分钟内还是没能重新加入频道,SDK 会停止尝试重连。
参数
参数 | 描述 |
---|---|
rtcChannel | IChannel |
onTokenPrivilegeWillExpire()
virtual void onTokenPrivilegeWillExpire(IChannel rtcChannel, const char token)
Token 服务即将过期回调。
在调用 joinChannel 时如果指定了 Token,由于 Token 具有一定的时效,在通话过程中如果 Token 即将失效,SDK 会提前 30 秒触发该回调,提醒 App 更新 Token。 当收到该回调时,用户需要重新在服务端生成新的 Token,然后调用 renewToken 将新生成的 Token 传给 SDK。
参数
参数 | 描述 |
---|---|
rtcChannel | IChannel |
token | 即将服务失效的 Token。 |
onRtcStats()
virtual void onRtcStats(IChannel *rtcChannel, const RtcStats& stats)
当前通话统计回调。
SDK 定期向 App 报告当前通话的统计信息,每两秒触发一次。
参数
参数 | 描述 |
---|---|
rtcChannel | IChannel |
stats | RTC 引擎统计数据: RtcStats 。 |
onNetworkQuality()
virtual void onNetworkQuality(IChannel *rtcChannel, uid_t uid, int txQuality, int rxQuality)
通话中每个用户的网络上下行 last mile 质量报告回调。
该回调描述每个用户在通话中的 last mile 网络状态,其中 last mile 是指设备到 anyRTC 边缘服务器的网络状态。
该回调每 2 秒触发一次。如果远端有多个用户,该回调每 2 秒会被触发多次。
参数
参数 | 描述 |
---|---|
rtcChannel | IChannel |
uid | 用户 ID。表示该回调报告的是持有该 ID 的用户的网络质量。当 uid 为 0 时,返回的是本地用户的网络质量。 |
txQuality | 该用户的上行网络质量,基于发送码率、上行丢包率、平均往返时延和网络抖动计算。该值代表当前的上行网络质量,帮助判断是否可以支持当前设置的视频编码属性。假设上行码率是 1000 Kbps,那么支持直播场景下 640 × 480 的分辨率、15 fps 的帧率没有问题,但是支持 1280 × 720 的分辨率就会有困难。详见 QUALITY_TYPE 。 |
rxQuality | 该用户的下行网络质量,基于下行网络的丢包率、平均往返延时和网络抖动计算。详见 QUALITY_TYPE 。 |
onRemoteVideoStats()
virtual void onRemoteVideoStats(IChannel *rtcChannel, const RemoteVideoStats& stats)
通话中远端视频流的统计信息回调。
该回调描述远端用户在通话中端到端的视频流统计信息, 针对每个远端用户/主播每 2 秒触发一次。如果远端同时存在多个用户/主播, 该回调每 2 秒会被触发多次。
参数
参数 | 描述 |
---|---|
rtcChannel | IChannel |
stats | 远端视频统计数据。详见: RemoteVideoStats 。 |
onRemoteAudioStats()
virtual void onRemoteAudioStats(IChannel *rtcChannel, const RemoteAudioStats& stats)
通话中远端音频流的统计信息回调。
用于取代 onAudioQuality 回调。
该回调描述远端用户在通话中端到端的视频流统计信息, 针对每个远端用户/主播每 2 秒触发一次。如果远端同时存在多个用户/主播, 该回调每 2 秒会被触发多次。
参数
参数 | 描述 |
---|---|
rtcChannel | IChannel |
stats | 接收到的远端音频统计数据。详见: RemoteAudioStats 。 |
onRemoteAudioStateChanged()
virtual void onRemoteAudioStateChanged(IChannel *rtcChannel, uid_t uid, REMOTE_AUDIO_STATE state, REMOTE_AUDIO_STATE_REASON reason, int elapsed)
远端音频流状态发生改变回调。
远端用户/主播音频状态发生改变时,SDK 会触发该回调向本地用户报告当前的远端音频流状态。
参数
参数 | 描述 |
---|---|
rtcChannel | IChannel |
uid | 发生音频状态改变的远端用户 ID。 |
state | 远端音频流状态。 详见 REMOTE_AUDIO_STATE 。 |
reason | 远端音频流状态改变的具体原因。详见 REMOTE_AUDIO_STATE_REASON 。 |
elapsed | 从本地用户调用 joinChannel 方法到发生本事件经历的时间,单位为 ms。 |
onActiveSpeaker()
virtual void onActiveSpeaker(IChannel *rtcChannel, uid_t uid)
监测到活跃用户回调。
如果用户开启了 enableAudioVolumeIndication 功能,则当音量检测模块监测到频道内有新的活跃用户说话时,会通过本回调返回该用户的用户 ID。
参数
参数 | 描述 |
---|---|
rtcChannel | IChannel |
uid | 当前时间段声音最大的用户的用户 ID。如果返回的 uid 为 0,则默认为本地用户。 |
注意事项:
- 你需要开启 enableAudioVolumeIndication 方法才能收到该回调。
- uid 返回的是当前时间段内声音最大的用户的用户 ID,而不是瞬时声音最大的用户的用户 ID。
onVideoSizeChanged()
virtual void onVideoSizeChanged(IChannel *rtcChannel, uid_t uid, int width, int height, int rotation)
本地或远端视频大小和旋转信息发生改变回调。
参数
参数 | 描述 |
---|---|
rtcChannel | IChannel |
uid | 图像尺寸和旋转信息发生变化的用户的用户 ID(本地用户的 uid 为 0)。 |
width | 视频流的宽度(像素)。 |
height | 视频流的高度(像素)。 |
rotation | 旋转信息 [0,360)。 |
onRemoteVideoStateChanged()
virtual void onRemoteVideoStateChanged(IChannel *rtcChannel, uid_t uid, REMOTE_VIDEO_STATE state, REMOTE_VIDEO_STATE_REASON reason, int elapsed)
远端视频状态发生改变回调。
参数 | 描述 |
---|---|
rtcChannel | IChannel |
uid | 发生视频状态改变的远端用户 ID。 |
state | 远端视频流状态。详见REMOTE_VIDEO_STATE 。 |
reason | 远端视频流状态改变的具体原因。详见 REMOTE_VIDEO_STATE_REASON 。 |
elapsed | 从本地用户调用 joinChannel 方法到发生本事件经历的时间,单位为 ms。 |
注意事项:
- 频道内的用户(通信场景)或主播(直播场景)人数超过 17 人时,该回调不生效。
onStreamMessage()
virtual void onStreamMessage(IChannel rtcChannel, uid_t uid, int streamId, const char data, size_t length)
接收到对方数据流消息的回调。
该回调表示本地用户收到了远端用户调用 sendStreamMessage 方法发送的流消息。
参数 | 描述 |
---|---|
rtcChannel | IChannel |
uid | 发送消息的用户 ID。 |
streamId | Stream ID。 |
data | 接收到的数据。 |
length | 数据长度。 |
onStreamMessageError()
virtual void onStreamMessageError(IChannel *rtcChannel, uid_t uid, int streamId, int code, int missed, int cached)
接收对方数据流消息发生错误的回调
该回调表示本地用户未收到远端用户调用 sendStreamMessage 方法发送的流消息。
参数 | 描述 |
---|---|
rtcChannel | IChannel |
uid | 发送消息的用户 ID。 |
streamId | Stream ID。 |
code | 错误码: ERROR_CODE_TYPE 。 |
missed | 丢失的消息数量。 |
cached | 数据流中断时,后面缓存的消息数量。 |
onChannelMediaRelayStateChanged()
virtual void onChannelMediaRelayStateChanged(IChannel *rtcChannel, CHANNEL_MEDIA_RELAY_STATE state,CHANNEL_MEDIA_RELAY_ERROR code)
跨频道媒体流转发状态发生改变回调
当跨频道媒体流转发状态发生改变时,SDK 会触发该回调, 并报告当前的转发状态以及相关的错误信息。
参数 | 描述 |
---|---|
rtcChannel | IChannel |
state | 跨频道媒体流转发状态。详见 CHANNEL_MEDIA_RELAY_STATE 。 |
code | 跨频道媒体流转发出错的错误码。详见 CHANNEL_MEDIA_RELAY_ERROR 。 |
onChannelMediaRelayEvent()
virtual void onChannelMediaRelayEvent(IChannel *rtcChannel, CHANNEL_MEDIA_RELAY_EVENT code)
跨频道媒体流转发事件回调
该回调报告跨频道媒体流转发过程中发生的事件。
参数 | 描述 |
---|---|
rtcChannel | IChannel |
code | 跨频道媒体流转发事件码。详见 CHANNEL_MEDIA_RELAY_EVENT 。 |
onRtmpStreamingStateChanged()
virtual void onRtmpStreamingStateChanged(IChannel *rtcChannel, const char *url, RTMP_STREAM_PUBLISH_STATE state, RTMP_STREAM_PUBLISH_ERROR errCode)
RTMP 推流状态发生改变回调
该回调返回本地用户调用 addPublishStreamUrl 或 removePublishStreamUrl 方法的结果。 RTMP 推流状态发生改变时,SDK 会触发该回调,并在回调中明确状态发生改变的 URL 地址及当前推流状态。 该回调方便推流用户了解当前的推流状态;推流出错时,你可以通过返回的错误码了解出错的原因,方便排查问题。
参数 | 描述 |
---|---|
rtcChannel | IChannel |
url | 推流状态发生改变的 URL 地址。 |
state | 当前的推流状态,详见 RTMP_STREAM_PUBLISH_STATE 。当推流状态为 RTMP_STREAM_PUBLISH_STATE_FAILURE (4) 时,你可以在 errorCode 参数中查看返回的错误信息。 |
errCode | 推流错误信息,详见 RTMP_STREAM_PUBLISH_ERROR 。 |
onTranscodingUpdated()
virtual void onTranscodingUpdated(IChannel *rtcChannel)
旁路推流设置已被更新回调
setLiveTranscoding 方法中的直播参数 LiveTranscoding 更新时,onTranscodingUpdated 回调会被触发并向主播报告更新信息。
参数 | 描述 |
---|---|
rtcChannel | IChannel |
注意事项:
- 首次调用 setLiveTranscoding 方法设置转码参数 LiveTranscoding 时,不会触发此回调。
onStreamInjectedStatus()
virtual void onStreamInjectedStatus(IChannel rtcChannel, const char url, uid_t uid, int status)
输入在线媒体流状态回调
参数 | 描述 |
---|---|
rtcChannel | IChannel |
url | 在线媒体流的地址。 |
uid | 用户 ID。 |
status | 输入的在线媒体流状态: INJECT_STREAM_STATUS 。 |
注意事项:
- 该回调只适用于 Android 和 iOS 平台。
onLocalPublishFallbackToAudioOnly()
virtual void onRemoteSubscribeFallbackToAudioOnly(IChannel *rtcChannel, uid_t uid, bool isFallbackOrRecover)
远端订阅流已回退为音频流回调
如果你调用了 setRemoteSubscribeFallbackOption 接口并将 option 设置为 STREAM_FALLBACK_OPTION_AUDIO_ONLY ,当下行网络环境不理想、仅接收远端音频流时,或当下行网络改善、恢复订阅音视频流时,会触发该回调。
参数 | 描述 |
---|---|
rtcChannel | IChannel |
uid | 远端用户的用户 ID。 |
isFallbackOrRecover |
注意事项:
- 远端订阅流因弱网环境不能同时满足音视频而回退为小流时,你可以使用 RemoteVideoStats 来监控远端视频大小流的切换
onRemoteSubscribeFallbackToAudioOnly()
virtual void onRemoteSubscribeFallbackToAudioOnly(IChannel *rtcChannel, uid_t uid, bool isFallbackOrRecover)
远端订阅流已回退为音频流回调
如果你调用了 setRemoteSubscribeFallbackOption 接口并将 option 设置为 STREAM_FALLBACK_OPTION_AUDIO_ONLY ,当下行网络环境不理想、仅接收远端音频流时,或当下行网络改善、恢复订阅音视频流时,会触发该回调。
参数 | 描述 |
---|---|
rtcChannel | IChannel |
uid | 远端用户的用户 ID。 |
isFallbackOrRecover |
注意事项:
- 远端订阅流因弱网环境不能同时满足音视频而回退为小流时,你可以使用 RemoteVideoStats 来监控远端视频大小流的切换
onConnectionStateChanged()
virtual void onConnectionStateChanged(IChannel *rtcChannel,
CONNECTION_STATE_TYPE state,
CONNECTION_CHANGED_REASON_TYPE reason)
网络连接状态已改变回调
该回调在网络连接状态发生改变的时候触发,并告知用户当前的网络连接状态和引起网络状态改变的原因。
参数 | 描述 |
---|---|
rtcChannel | IChannel |
state | 详见: CONNECTION_STATE_TYPE 。 |
reason | 详见: CONNECTION_CHANGED_REASON_TYPE 。 |
注意事项:
- 远端订阅流因弱网环境不能同时满足音视频而回退为小流时,你可以使用 RemoteVideoStats 来监控远端视频大小流的切换