Public 成员函数

void onChannelWarning (RtcChannel rtcChannel, int warn)
 
void onChannelError (RtcChannel rtcChannel, int err)
 
void onJoinChannelSuccess (RtcChannel rtcChannel, int uid, int elapsed)
 
void onRejoinChannelSuccess (RtcChannel rtcChannel, int uid, int elapsed)
 
void onLeaveChannel (RtcChannel rtcChannel, RtcStats stats)
 
void onClientRoleChanged (RtcChannel rtcChannel, int oldRole, int newRole)
 
void onUserJoined (RtcChannel rtcChannel, int uid, int elapsed)
 
void onUserOffline (RtcChannel rtcChannel, int uid, int reason)
 
void onConnectionStateChanged (RtcChannel rtcChannel, int state, int reason)
 
void onConnectionLost (RtcChannel rtcChannel)
 
void onTokenPrivilegeWillExpire (RtcChannel rtcChannel, String token)
 
void onRequestToken (RtcChannel rtcChannel)
 
void onRtcStats (RtcChannel rtcChannel, RtcStats stats)
 
void onNetworkQuality (RtcChannel rtcChannel, int uid, int txQuality, int rxQuality)
 
void onRemoteVideoStats (RtcChannel rtcChannel, RemoteVideoStats stats)
 
void onRemoteAudioStats (RtcChannel rtcChannel, RemoteAudioStats stats)
 
void onRemoteAudioStateChanged (RtcChannel rtcChannel, int uid, int state, int reason, int elapsed)
 
void onActiveSpeaker (RtcChannel rtcChannel, int uid)
 
void onVideoSizeChanged (RtcChannel rtcChannel, int uid, int width, int height, int rotation)
 
void onRemoteVideoStateChanged (RtcChannel rtcChannel, int uid, int state, int reason, int elapsed)
 
void onStreamMessage (RtcChannel rtcChannel, int uid, int streamId, byte[] data)
 
void onStreamMessageError (RtcChannel rtcChannel, int uid, int streamId, int error, int missed, int cached)
 
void onChannelMediaRelayStateChanged (RtcChannel rtcChannel, int state, int code)
 
void onChannelMediaRelayEvent (RtcChannel rtcChannel, int code)
 
void onRtmpStreamingStateChanged (RtcChannel rtcChannel, String url, int state, int errCode)
 
void onTranscodingUpdated (RtcChannel rtcChannel)
 
void onStreamInjectedStatus (RtcChannel rtcChannel, String url, int uid, int status)
 
void onLocalPublishFallbackToAudioOnly (RtcChannel rtcChannel, boolean isFallbackOrRecover)
 
void onRemoteSubscribeFallbackToAudioOnly (RtcChannel rtcChannel, int uid, boolean isFallbackOrRecover)
 

详细描述

成员函数说明

◆ onChannelWarning()

void io.agora.rtc.IRtcChannelEventHandler.onChannelWarning ( RtcChannel  rtcChannel,
int  warn 
)

报告 RtcChannel 对象发生的警告码。

参数
rtcChannel当前的 RtcChannel 对象。
warn警告码:WarnCode

◆ onChannelError()

void io.agora.rtc.IRtcChannelEventHandler.onChannelError ( RtcChannel  rtcChannel,
int  err 
)

报告 RtcChannel 对象发生的错误码。

参数
rtcChannel当前的 RtcChannel 对象。
err错误码:ErrorCode

◆ onJoinChannelSuccess()

void io.agora.rtc.IRtcChannelEventHandler.onJoinChannelSuccess ( RtcChannel  rtcChannel,
int  uid,
int  elapsed 
)

加入频道回调。

如果在调用 joinChannel 加入频道时没有指定 uid,服务器会指定一个。

参数
rtcChannel当前的 RtcChannel 对象。
uid用户 ID。
elapsed从本地用户调用 joinChannel 到触发该回调的时间(毫秒)。

◆ onRejoinChannelSuccess()

void io.agora.rtc.IRtcChannelEventHandler.onRejoinChannelSuccess ( RtcChannel  rtcChannel,
int  uid,
int  elapsed 
)

重新加入频道回调。

有时候由于网络原因,客户端可能会和服务器失去连接,SDK 会进行自动重连,自动重连成功后触发此回调方法。

参数
rtcChannel当前的 RtcChannel 对象。
uid用户 ID。
elapsed从本地用户开始重连到触发该回调的时间(毫秒)。

◆ onLeaveChannel()

void io.agora.rtc.IRtcChannelEventHandler.onLeaveChannel ( RtcChannel  rtcChannel,
RtcStats  stats 
)

离开频道回调。

当用户通过调用 leaveChannel 方法成功离开频道时,SDK 会触发该回调。

App 可以通过该回调获取相关频道信息,如通话时长等数据。

参数
rtcChannel当前的 RtcChannel 对象。
stats通话相关数据:RtcStats

◆ onClientRoleChanged()

void io.agora.rtc.IRtcChannelEventHandler.onClientRoleChanged ( RtcChannel  rtcChannel,
int  oldRole,
int  newRole 
)

直播场景下用户角色已切换回调。如从观众切换为主播,反之亦然。

该回调由本地用户在加入频道后通过 setClientRole 改变用户角色触发的。

参数
rtcChannel当前的 RtcChannel 对象。
oldRole切换前的用户角色:
  • CLIENT_ROLE_BROADCASTER(1):主播。
  • CLIENT_ROLE_AUDIENCE(2):观众。
newRole切换后的用户角色:
  • CLIENT_ROLE_BROADCASTER(1):主播。
  • CLIENT_ROLE_AUDIENCE(2):观众。

◆ onUserJoined()

void io.agora.rtc.IRtcChannelEventHandler.onUserJoined ( RtcChannel  rtcChannel,
int  uid,
int  elapsed 
)

远端用户(通信场景)/主播(直播场景)加入当前频道回调。

  • 通信场景下,该回调提示有远端用户加入了频道,并返回新加入用户的 ID; 如果加入之前,已经有其他用户在频道中了,新加入的用户也会收到这些已有用户加入频道的回调。
  • 直播场景下,该回调提示有主播加入了频道,并返回该主播的用户 ID。 如果在加入之前,已经有主播在频道中了,新加入的用户也会收到已有主播加入频道的回调。Agora 建议连麦主播不超过 17 人。
参数
rtcChannel当前的 RtcChannel 对象。
uid新加入频道的远端用户/主播 ID
elapsed从本地用户调用 joinChannelsetClientRole(BROADCASTER) 到触发该回调的时间。
注解
直播场景下:
  • 主播间能相互收到新主播加入频道的回调,并能获得该主播的用户 ID。
  • 观众也能收到新主播加入频道的回调,并能获得该主播的用户 ID。
  • 当 Web 端加入直播频道时,只要 Web 端有推流,SDK 会默认该 Web 端为主播,并触发该回调。

◆ onUserOffline()

void io.agora.rtc.IRtcChannelEventHandler.onUserOffline ( RtcChannel  rtcChannel,
int  uid,
int  reason 
)

远端用户(通信场景)/主播(直播场景)离开当前频道回调。

用户离开频道有两个原因,即正常离开和超时掉线:

  • 正常离开时:远端用户/主播会收到类似“再见”的消息,接收此消息后,判断用户离开频道。
  • 超时掉线:在一定时间内(约 20 秒),用户没有收到对方的任何数据包,则判定为对方掉线。 在网络较差的情况下,有可能会误报。Agora 建议使用 Agora 实时消息 SDK 系统来做可靠的掉线检测。
参数
rtcChannel当前的 RtcChannel 对象。
uid离开频道或掉线的用户或主播 ID。
reason离线原因:
  • USER_OFFLINE_QUIT(0):用户主动离开。
  • USER_OFFLINE_DROPPED(1):因过长时间收不到对方数据包,超时掉线。注意:由于 SDK 使用的是不可靠通道,也有可能对方主动离开本方没收到对方离开消息而误判为超时掉线。
  • USER_OFFLINE_BECOME_AUDIENCE(2):直播场景下,用户身份从主播切换为观众

◆ onConnectionStateChanged()

void io.agora.rtc.IRtcChannelEventHandler.onConnectionStateChanged ( RtcChannel  rtcChannel,
int  state,
int  reason 
)

网络连接状态已改变回调。

该回调在网络连接状态发生改变的时候触发,并告知用户当前的网络连接状态,和引起网络状态改变的原因。

参数
rtcChannel当前的 RtcChannel 对象。
state当前的网络连接状态:
reasonThe reason causing the change of the connection state:

◆ onConnectionLost()

void io.agora.rtc.IRtcChannelEventHandler.onConnectionLost ( RtcChannel  rtcChannel)

网络连接中断,且 SDK 无法在 10 秒内连接服务器回调。

SDK 在调用 joinChannel 后,无论是否加入成功,只要 10 秒和服务器无法连接就会触发该回调。

如果 SDK 在断开连接后,20 分钟内还是没能重新加入频道,SDK 会停止尝试重连。

参数
rtcChannel当前的 RtcChannel 对象。

◆ onTokenPrivilegeWillExpire()

void io.agora.rtc.IRtcChannelEventHandler.onTokenPrivilegeWillExpire ( RtcChannel  rtcChannel,
String  token 
)

Token 服务即将过期回调。

如果在加入频道时指定了 token,由于 token 具有一定的时效,在通话过程中如果 token 即将失效,SDK 会提前 30 秒触发该回调,提醒更新 token。

收到该回调时,你需要重新在服务端生成新的 Token,然后调用 renewToken 方法将新生成的 token 传给 SDK。

参数
rtcChannel当前的 RtcChannel 对象。
token服务即将失效的 token。

◆ onRequestToken()

void io.agora.rtc.IRtcChannelEventHandler.onRequestToken ( RtcChannel  rtcChannel)

Token 已过期回调。

如果在加入频道时指定了 token,由于 token 具有一定的时效,在通话过程中如果 token 已经失效,SDK 会触发该回调。

收到该回调时,你需要重新在服务端生成新的 Token,然后调用 renewToken 方法将新生成的 token 传给 SDK。

参数
rtcChannel当前的 RtcChannel 对象。

◆ onRtcStats()

void io.agora.rtc.IRtcChannelEventHandler.onRtcStats ( RtcChannel  rtcChannel,
RtcStats  stats 
)

当前通话统计回调。

该回调在通话过程中每两秒触发一次。

参数
rtcChannel当前的 RtcChannel 对象。
statsRtcChannel 对象数据:RtcStats

◆ onNetworkQuality()

void io.agora.rtc.IRtcChannelEventHandler.onNetworkQuality ( RtcChannel  rtcChannel,
int  uid,
int  txQuality,
int  rxQuality 
)

通话中每个用户的网络上下行 last mile 质量报告回调。

该回调描述每个用户在通话中的 last mile 网络状态,其中 last mile 是指设备到 Agora 边缘服务器的网络状态。 该回调每 2 秒触发一次。如果远端有多个用户/主播,该回调每 2 秒会被触发多次。

参数
rtcChannel当前的 RtcChannel 对象。
uid用户 ID。表示该回调报告的是持有该 ID 的用户的网络质量。当 uid 为 0 时,返回的是本地用户的网络质量。
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 正在探测网络质量。
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 正在探测网络质量。

◆ onRemoteVideoStats()

void io.agora.rtc.IRtcChannelEventHandler.onRemoteVideoStats ( RtcChannel  rtcChannel,
RemoteVideoStats  stats 
)

通话中远端视频流的统计信息回调。

该回调描述远端用户在通话中端到端的视频流状态,针对每个远端用户/主播每 2 秒触发一次。 如果远端同时存在多个用户/主播,该回调每 2 秒会被触发多次。

参数
rtcChannel当前的 RtcChannel 对象。
stats远端视频统计数据:RemoteVideoStats.

◆ onRemoteAudioStats()

void io.agora.rtc.IRtcChannelEventHandler.onRemoteAudioStats ( RtcChannel  rtcChannel,
RemoteAudioStats  stats 
)

通话中远端音频流的统计信息回调。

该回调描述远端用户在通话中端到端的音频流统计信息,针对每个远端用户/主播每 2 秒触发一次。 如果远端同时存在多个用户/主播,该回调每 2 秒会被触发多次。

参数
rtcChannel当前的 RtcChannel 对象。
stats接收到的远端音频统计数据:RemoteAudioStats.

◆ onRemoteAudioStateChanged()

void io.agora.rtc.IRtcChannelEventHandler.onRemoteAudioStateChanged ( RtcChannel  rtcChannel,
int  uid,
int  state,
int  reason,
int  elapsed 
)

远端音频状态发生改变回调。

远端用户或主播音频状态发生改变时,SDK 会触发该回调向本地用户报告当前的远端音频流状态。

参数
rtcChannel当前的 RtcChannel 对象。
uid发生音频状态改变的远端用户 ID。
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) 的情况下,会报告该状态。
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):远端用户离开频道。
elapsed从本地调用 joinChannel 方法到发生本事件经历的时间,单位为 ms。

◆ onActiveSpeaker()

void io.agora.rtc.IRtcChannelEventHandler.onActiveSpeaker ( RtcChannel  rtcChannel,
int  uid 
)

监测到活跃用户回调。

该回调获取当前时间段内累积音量最大者。如果该用户开启了 enableAudioVolumeIndication 功能, 则当音量检测模块监测到频道内有新的活跃用户说话时,会通过本回调返回该用户的 uid。

参数
rtcChannel当前的 RtcChannel 对象。
uid当前时间段声音最大的用户的 uid。如果返回的 uid 为 0,则默认为本地用户。
注解
  • 你需要开启 enableAudioVolumeIndication 方法才能收到该回调。
  • uid 返回的是当前时间段内声音最大的用户 ID,而不是瞬时声音最大的用户 ID。

◆ onVideoSizeChanged()

void io.agora.rtc.IRtcChannelEventHandler.onVideoSizeChanged ( RtcChannel  rtcChannel,
int  uid,
int  width,
int  height,
int  rotation 
)

本地或远端视频大小或旋转信息发生改变回调。

参数
rtcChannel当前的 RtcChannel 对象。
uid图像尺寸和旋转信息发生变化的用户 ID。如果返回的 uid 为 0,则表示本地用户。
width视频流的宽度(像素)。
height视频流的高度(像素)。
rotation旋转信息 [0,360]。

◆ onRemoteVideoStateChanged()

void io.agora.rtc.IRtcChannelEventHandler.onRemoteVideoStateChanged ( RtcChannel  rtcChannel,
int  uid,
int  state,
int  reason,
int  elapsed 
)

远端用户视频状态发生已变化回调。

参数
rtcChannel当前的 RtcChannel 对象。
uid发生视频状态改变的远端用户 ID。
stateState of the remote video:
  • 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) 的情况下,会报告该状态。
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):回退的远端音频流恢复为视频流
elapsed从本地用户调用 joinChannel 方法到该触发该回调的时间。

◆ onStreamMessage()

void io.agora.rtc.IRtcChannelEventHandler.onStreamMessage ( RtcChannel  rtcChannel,
int  uid,
int  streamId,
byte []  data 
)

接收到对方数据流消息的回调。

该回调表示本地用户收到了远端用户调用 sendStreamMessage 方法发送的流消息。

参数
rtcChannel当前的 RtcChannel 对象。
uid发送该流消息的用户 ID。
streamId数据流 ID。
data本地用户接收到的数据。

◆ onStreamMessageError()

void io.agora.rtc.IRtcChannelEventHandler.onStreamMessageError ( RtcChannel  rtcChannel,
int  uid,
int  streamId,
int  error,
int  missed,
int  cached 
)

接收对方数据流消息发生错误的回调。

该回调表示本地用户未收到远端用户调用 sendStreamMessage 方法发送的流消息。

参数
rtcChannel当前的 RtcChannel 对象。
uid发送该流消息的用户 ID。
streamId数据流 ID。
error发生错误原因:ErrorCode
missed丢失的消息数量。
cached数据流中断时,后面缓存的消息数量。

◆ onChannelMediaRelayStateChanged()

void io.agora.rtc.IRtcChannelEventHandler.onChannelMediaRelayStateChanged ( RtcChannel  rtcChannel,
int  state,
int  code 
)

跨频道媒体流转发状态发生改变回调。

当跨频道媒体流转发状态发生改变时,SDK 会触发该回调,并报告当前的转发状态以及相关的错误信息。

参数
rtcChannel当前的 RtcChannel 对象。
state跨频道媒体流转发状态:
  • RELAY_STATE_IDLE(0):SDK 正在初始化。
  • RELAY_STATE_CONNECTING(1):SDK 尝试跨频道。
  • RELAY_STATE_RUNNING(2):源频道主播成功加入目标频道。
  • RELAY_STATE_FAILURE(3):发生异常,详见 code 中提示的错误信息。
code跨频道媒体流转发出错的错误码:
  • 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): The server fails to join the destination channel.
  • 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()

void io.agora.rtc.IRtcChannelEventHandler.onChannelMediaRelayEvent ( RtcChannel  rtcChannel,
int  code 
)

跨频道媒体流转发事件回调。

参数
rtcChannel当前的 RtcChannel 对象。
code跨频道媒体流转发事件码:
  • 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()

void io.agora.rtc.IRtcChannelEventHandler.onRtmpStreamingStateChanged ( RtcChannel  rtcChannel,
String  url,
int  state,
int  errCode 
)

RTMP 推流状态发生改变回调。

该回调返回本地用户调用 addPublishStreamUrlremovePublishStreamUrl 方法的结果。

RTMP 推流状态发生改变时,SDK 会触发该回调,并在回调中明确状态发生改变的 URL 地址及当前推流状态; 当推流状态为 RTMP_STREAM_PUBLISH_STATE_FAILURE(4) 时,你可以在 errCode 参数中查看返回的错误信息。 该回调方便推流用户了解当前的推流状态;推流出错时,你可以通过返回的错误码了解出错的原因,方便排查问题。

参数
rtcChannel当前的 RtcChannel 对象。
url推流状态发生改变的 URL 地址。
state当前的推流状态:
  • RTMP_STREAM_PUBLISH_STATE_IDLE(0):推流未开始或已结束。成功调用 removePublishStreamUrl 方法删除推流地址后,也会返回该状态。
  • RTMP_STREAM_PUBLISH_STATE_CONNECTING(1):正在连接 Agora 推流服务器和 RTMP 服务器。SDK 调用 addPublishStreamUrl 方法后,会返回该状态。
  • RTMP_STREAM_PUBLISH_STATE_RUNNING(2):推流正在进行。SDK 成功推流后,会返回该状态。
  • RTMP_STREAM_PUBLISH_STATE_RECOVERING(3):正在恢复推流。当 CDN 出现异常,或推流短暂中断时,SDK 会自动尝试恢复推流,并返回该状态。如成功恢复推流,则进入状态 RTMP_STREAM_PUBLISH_STATE_RUNNING(2);如服务器出错或 60 秒内未成功恢复,则进入状态 RTMP_STREAM_PUBLISH_STATE_FAILURE(4)。 如果觉得 60 秒太长,也可以主动调用 removePublishStreamUrladdPublishStreamUrl 方法尝试重连。
  • RTMP_STREAM_PUBLISH_STATE_FAILURE(4):推流失败。失败后,你可以通过返回的错误码排查出错原因;也可以再次调用 addPublishStreamUrl 重新尝试推流。
errCode详细的推流错误信息:
  • RTMP_STREAM_PUBLISH_ERROR_OK(0):推流成功
  • RTMP_STREAM_PUBLISH_ERROR_INVALID_ARGUMENT(1):参数无效。比如说如果你在调用 addPublishStreamUrl 前没有调用 setLiveTranscoding 设置转码参数,SDK 会返回该错误。请检查输入参数是否正确。
  • RTMP_STREAM_PUBLISH_ERROR_ENCRYPTED_STREAM_NOT_ALLOWED(2):推流已加密不能推流
  • RTMP_STREAM_PUBLISH_ERROR_CONNECTION_TIMEOUT(3):推流超时未成功。可调用 addPublishStreamUrl 重新推流。
  • RTMP_STREAM_PUBLISH_ERROR_INTERNAL_SERVER_ERROR(4):推流服务器出现错误。请调用 addPublishStreamUrl 重新推流。
  • RTMP_STREAM_PUBLISH_ERROR_RTMP_SERVER_ERROR(5):RTMP 服务器出现错误。
  • RTMP_STREAM_PUBLISH_ERROR_TOO_OFTEN(6):推流请求过于频繁。
  • RTMP_STREAM_PUBLISH_ERROR_REACH_LIMIT(7):单个主播的推流地址数目达到上限 10。请删掉一些不用的推流地址再增加推流地址。
  • RTMP_STREAM_PUBLISH_ERROR_NOT_AUTHORIZED(8):主播操作不主播自己的流,如更新其他主播的流参数、停止其他主播的流。请检查 App 逻辑。
  • RTMP_STREAM_PUBLISH_ERROR_STREAM_NOT_FOUND(9):服务器未找到这个流。
  • RTMP_STREAM_PUBLISH_ERROR_FORMAT_NOT_SUPPORTED(10):推流地址格式有错误。请检查推流地址格式是否正确。

◆ onTranscodingUpdated()

void io.agora.rtc.IRtcChannelEventHandler.onTranscodingUpdated ( RtcChannel  rtcChannel)

旁路推流设置被更新回调。

setLiveTranscoding 方法中的直播转码参数 LiveTranscoding 更新时, 该回调会被触发,并向主播报告更新信息。

注解
首次调用 setLiveTranscoding 方法设置转码参数时,不会触发该回调。
参数
rtcChannel当前的 RtcChannel 对象。

◆ onStreamInjectedStatus()

void io.agora.rtc.IRtcChannelEventHandler.onStreamInjectedStatus ( RtcChannel  rtcChannel,
String  url,
int  uid,
int  status 
)

输入在线媒体流状态回调。

该回调表明向直播输入的外部视频流的状态。

参数
rtcChannel当前的 RtcChannel 对象。
url输入进直播的外部视频源的 URL 地址。
uid用户 ID。
status输入的外部视频源状态:
  • INJECT_STREAM_STATUS_START_SUCCESS(0):外部视频流输入成功。
  • INJECT_STREAM_STATUS_START_ALREADY_EXIST(1):外部视频流已存在。
  • INJECT_STREAM_STATUS_START_UNAUTHORIZED(2)}:外部视频流输入未经授权。
  • INJECT_STREAM_STATUS_START_TIMEDOUT(3):输入外部视频流超时。
  • INJECT_STREAM_STATUS_START_FAILED(4):外部视频流输入失败。
  • INJECT_STREAM_STATUS_STOP_SUCCESS(5):外部视频流停止输入成功。
  • INJECT_STREAM_STATUS_STOP_NOT_FOUND(6):未找到要停止输入的外部视频流。
  • INJECT_STREAM_STATUS_STOP_UNAUTHORIZED(7):要停止输入的外部视频流未经授权。
  • INJECT_STREAM_STATUS_STOP_TIMEDOUT(8):停止输入外部视频流超时。
  • INJECT_STREAM_STATUS_STOP_FAILED(9):停止输入外部视频流失败。
  • INJECT_STREAM_STATUS_BROKEN(10):输入的外部视频流被中断。

◆ onLocalPublishFallbackToAudioOnly()

void io.agora.rtc.IRtcChannelEventHandler.onLocalPublishFallbackToAudioOnly ( RtcChannel  rtcChannel,
boolean  isFallbackOrRecover 
)

如果你调用了设置本地推流回退选项 setLocalPublishFallbackOption 接口并将 option 设置为 AUDIO_ONLY(2) 时,当上行网络环境不理想、本地发布的媒体流回退为音频流时,或当上行网络改善、媒体流恢复为音视频流时,会触发该回调。如果本地推流已回退为音频流,远端的 app 上会收到 onRemoteVideoStateChanged 的回调事件。

参数
rtcChannel当前的 RtcChannel 对象。
isFallbackOrRecover本地推流已回退或恢复:
  • true: 由于网络环境不理想,本地发布的媒体流已回退为音频流。
  • false: 由于网络环境改善,发布的音频流已恢复为音视频流。

◆ onRemoteSubscribeFallbackToAudioOnly()

void io.agora.rtc.IRtcChannelEventHandler.onRemoteSubscribeFallbackToAudioOnly ( RtcChannel  rtcChannel,
int  uid,
boolean  isFallbackOrRecover 
)

远端订阅流已回退为音频流回调或因网络质量改善,恢复为音视频流。

如果你调用了设置远端订阅流回退选项 setRemoteSubscribeFallbackOption 接口, 并将 option 设置为 STREAM_FALLBACK_OPTION_AUDIO_ONLY(2),当下行网络环境不理想、仅接收远端音频流时,或当下行网络改善、恢复订阅音视频流时,会触发该回调。

注解
远端订阅流因弱网环境不能同时满足音视频而回退为小流时,你可以使用 onRemoteVideoStats 回调来监控远端视频大小流的切换。
参数
rtcChannel当前的 RtcChannel 对象。
uid远端用户的 ID。
isFallbackOrRecover远端订阅流已回退或恢复:
  • true:由于网络环境不理想,远端订阅流已回退为音频流。
  • false:由于网络环境改善,订阅的音频流已恢复为音视频流。