频道事件回调 编辑文档

功能描述

通过频道事件回调可以监听和报告指定频道的事件和数据。

接口描述

public interface ChannelObserver {
/**
* 自己加入成功,实现加入频道成功的逻辑
* @param roomName 频道名字
* @param uid 用户id。如果用户加入频道前没有设置id,这位服务器自动分配的id
* @param role 加入频道的角色。TALKER表示主播,可说可听;AUDIENCE表示听众,只能听不能说
* @param muted 加入频道的静音状态。0表示未静音,1表示静音
* @param name 加入频道设置的用户名。如果没有设置则为""
*/
void onJoinSuccess(String roomName, long uid, ChannelRole role, boolean muted,String name);


/**
* 断线重新加入频道成功的逻辑
* @param roomName 频道名字
* @param uid 用户id。如果用户加入频道前没有设置id,这位服务器自动分配的id
* @param role 加入频道的角色。TALKER表示主播,可说可听;AUDIENCE表示听众,只能听不能说
* @param muted 加入频道的静音状态。0表示未静音,1表示静音
* @param name 加入频道设置的用户名。如果没有设置则为""
*/
void onReJoinSuccess(String roomName, long uid, ChannelRole role, boolean muted,String name);

/**
* 其他用户加入,实现别人进入频道的逻辑
* @param uid 加入频道的用户id
* @param role 加入频道的角色。TALKER表示主播,可说可听;AUDIENCE表示听众,只能听不能说
* @param muted 加入频道的静音状态。0表示未静音,1表示静音
* @param name 加入频道的用户设置的用户名。如果没有设置则为""
*/
void onOtherJoin(long uid, ChannelRole role, boolean muted,String name);

/**
* 自己加入失败,实现加入频道失败的逻辑
* @param code 失败状态
* @param message 失败信息
*/
void onJoinFail(int code, String message);

/**
* 网络打断
*/
void onConnectionBreak();

/**
* 网络失去连接
*/
void onConnectionLost();

/**
* 运行过程中的错误信息,SDK无法自行恢复。一般情况下应用需要提示用户并进行对应的处理。
* @param err 错误码
* @param message 错误描述
*/
void onError(int err, String message);

/**
* 运行过程中的警告信息,通常是网络或者音频设备相关的。一般情况下应用可以忽略,SDK会自己尝试恢复。
* @param warn 警告码
* @param message 警告描述
*/
void onWarning(int warn, String message);

/**
* 实现退出频道的逻辑
*/
void onLeave();

/**
* 其他用户离开,实现别人离开频道的逻辑
* @param uid 离开频道用户的id
* @param role 离开频道用户的角色
* @param name 离开频道用户加入频道设置的用户名。如果没有设置则为""
*/
void onOtherLeave(long uid, ChannelRole role,String name);

/**
* 用户音量提示
* @param volumeInfos 用户音量信息集合
* @param size volumeInfos中用户个数
*/
void onTalkingVolumeIndication(VolumeInfo[] volumeInfos, int size);

/**
* 用户mute状态,实现静音状态改变的逻辑
* @param uid 用户id。如果为0,表示自己静音状态,否则表示他人静音状态
* @param muted 0表示未静音,1表示静音
* @param name 加入频道设置的用户名。如果没有设置则为""
*/
void onMuteStatusChanged(long uid, boolean muted,String name);

/**
* 用户角色状态,实现角色状态改变的逻辑
* @param uid 用户id。如果为0,表示自己角色状态,否则表示他人角色状态
* @param role TALKER表示主播,可说可听;AUDIENCE表示听众,只能听不能说
* @param name 加入频道设置的用户名。如果没有设置则为""
*/
void onRoleStatusChanged(long uid, ChannelRole role,String name);

/**
* 当前通话网络统计回调,通话中每两秒触发一次
* @param uid 用户ID。表示该ID的用户的网络质量,如果为0,表示本地用户的网络质量
* @param txQuality 该用户的上行网络质量
* @param rxQuality 该用户的下行网络质量
* @param stat 通话相关的统计信息
* @param name 加入频道设置的用户名。如果没有设置则为""
*/
void onNetworkStats(long uid, int txQuality, int rxQuality, RtcStat stat,String name);

/**
* 语音路由变更
* @param route 路由类型:0,扬声器;2,有线耳机;3,蓝牙设备
*/
void onAudioRouteChanged(int route);

/**
* 音乐文件播放状态发生改变
* @param state 播放状态
*/
void onSoundStateChanged(int state);

/**
* 音效文件播放完毕
* @param effectId 音效Id
*/
void onEffectFinished(int effectId);

/**
* 远端用户开/关视频模块回调。
* 该回调是由远端用户调用 enableVideo 或 disableVideo 方法开启或关闭视频模块触发的。
* @param uid 用户 ID,提示是哪个用户的视频流
* @param enabled
true:该用户已启用视频功能。
false:该用户已关闭视频功能。
* @param name 加入频道设置的用户名。如果没有设置则为""
*/
void onUserEnableVideo(long uid, boolean enabled,String name);

/**
* 远端用户开/关本地视频采集回调。
* 该回调是由远端用户调用enableLocalVideo方法开启或关闭视频采集触发的。
* @param uid 用户ID,提示是哪个用户的视频流
* @param enabled
true:该用户已启用本地视频功能。启用后,其他用户可以接收到该用户的视频流
false:该用户已关闭视频功能。关闭后,该用户仍然可以接收其他用户的视频流,但其他用户接收不到该用户的视频流
* @param name 该用户加入频道设置的用户名。如果没有设置则为""
*/
void onUserEnableVideo(long uid, boolean enabled,String name);

/**
* 远端用户取消或恢复发布视频流回调。
* 当远端用户调用muteLocalVideoStream取消或恢复发布视频流时,SDK会触发该回调向本地用户报告远端用户的发流状况。
* @param uid 远端用户UID。
* @param muted 远端用户是否取消发布视频流:
true:取消发布视频流。
false:发布视频流。
* @param name 该用户加入频道设置的用户名。如果没有设置则为""
*/
void onUserEnableVideo(long uid, boolean enabled,String name);


/**
* 已显示本地视频首帧回调。
* 本地视频首帧显示在本地视图上时,SDK 会触发此回调
* @param width 本地渲染视频的宽 (px)
* @param height 本地渲染视频的高 (px)
* @param elapsed 从调用 joinChannel 到发生此事件过去的时间(毫秒)。如果在 joinChannel 前调用了 startPreview,则是从 startPreview 到发生此事件过去的时间。
* @param name 该用户加入频道设置的用户名。如果没有设置则为""
*/
void onFirstLocalVideoFrame(int width, int height, int elapsed, String name);

/**
* 已发布本地视频首帧回调。
* SDK 会在以下时机触发该回调:
开启本地视频的情况下,调用 joinChannel 成功加入频道后。
调用 muteLocalVideoStream(true),再调用 muteLocalVideoStream(false) 后。
调用 disableVideo,再调用 enableVideo 后。
调用 pushVideoFrame 成功向 SDK 推送视频帧后。
* @param elapsed 从调用 joinChannel 方法到触发该回调的时间间隔(毫秒)。
* @param name 该用户加入频道设置的用户名。如果没有设置则为""
*/
void onFirstLocalVideoFramePublished(int elapsed, String name);

/**
* 已完成远端视频首帧解码回调
* 本地收到远端第一个视频帧并解码成功后,会触发该回调。有两种情况:远端用户首次上线后发送视频,远端用户视频离线再上线后发送视频
* @param uid 用户 ID,指定是哪个用户的视频流
* @param width 视频流宽(像素)
* @param height 视频流高(像素)
* @param elapsed 从本地用户调用 joinChannel 方法直至该回调被触发的延迟(毫秒)
* @param name 该用户加入频道设置的用户名。如果没有设置则为""
*/
void onFirstRemoteVideoDecoded(long uid, int width, int height, int elapsed, String name);

/**
* 已显示首帧远端视频回调。
* 第一帧远端视频显示在视图上时,触发此调用。 App 可在此调用中获知出图时间(elapsed)。
* @param uid 用户 ID,指定是哪个用户的视频流
* @param width 视频流宽(像素)
* @param height 视频流高(像素)
* @param elapsed 从本地用户调用 joinChannel 方法直至该回调被触发的延迟(毫秒)
* @param name 该用户加入频道设置的用户名。如果没有设置则为""
*/
void onFirstRemoteVideoFrame(long uid, int width, int height, int elapsed, String name);
}

示例代码

ChannelObserver channelObserver = new ChannelObserver() {
@Override
public void onJoinSuccess(String roomName, long uid, ChannelRole role, boolean muted,String name) {
Log.d("qtt_rtc", "加入频道成功 roomId:" + roomName + " uid:" + uid + " role:" + role + " ");
}

@Override
public void onReJoinSuccess(String roomName, long uid, ChannelRole role, boolean muted,String name) {
Log.d("qtt_rtc", "重新加入频道成功 roomId:" + roomName + " uid:" + uid + " role:" + role + " ");
}

@Override
public void onOtherJoin(long uid, ChannelRole role, boolean muted,String name) {
Log.d("qtt_rtc", "uid " + uid + " 加入频道 role:" + role);
}

@Override
public void onJoinFail(final int code, final String message) {
Log.d("qtt_rtc", "加入频道失败 " + message);
}

@Override
public void onConnectionBreak() {
Log.d("qtt_rtc", "网络打断");
}

@Override
public void onConnectionLost() {
Log.d("qtt_rtc", "网络失去连接");
}

@Override
public void onError(int err, String message) {
Log.d("qtt_rtc", "错误消息 " + message);
}

@Override
public void onWarning(int warn, String message) {
Log.d("qtt_rtc", "警告消息 " + message);;
}

@Override
public void onLeave() {
Log.d("qtt_rtc", "离开频道");
}

@Override
public void onOtherLeave(long uid, ChannelRole role,String name) {
Log.d("qtt_rtc", "远端用户离开频道 " + uid);
}

@Override
public void onTalkingVolumeIndication(VolumeInfo[] volumeInfos, int size) {
Log.d("qtt_rtc", "用户说话");
}

@Override
public void onMuteStatusChanged(long uid, boolean muted,String name) {
if (uid == 0) {
Log.d("qtt_rtc", "自己静麦状态变化: " + muted);
} else {
Log.d("qtt_rtc", "远端用户 " + uid + " 静麦状态变化: " + muted);
}
}

@Override
public void onRoleStatusChanged(long uid, ChannelRole role,String name) {
if (uid == 0) {
Log.d("qtt_rtc", "自己角色状态变化: " + role);
} else {
Log.d("qtt_rtc", "远端用户 " + uid + " 角色状态变化: " + role);
}
}
@Override
public void onNetworkStats(long uid, int txQuality, int rxQuality, RtcStat stat,String name) {
if (uid == 0) {
Log.d("qtt_rtc", "自己网络情况:上行质量 " + txQuality + " 下行质量 " + rxQuality + " 上行丢包 " + stat.mUpLossRate + " 下行丢包 " + stat.mDownLossRate + " 端到端时延 " + stat.mRttAverage + " 抖动 " + stat.mJitter);
} else {
Log.d("qtt_rtc", "uid: " + uid + " 用户网络情况:上行质量 " + txQuality + " 下行质量 " + rxQuality + " 上行丢包 " + stat.mUpLossRate + " 下行丢包 " + stat.mDownLossRate + " 端到端时延 " + stat.mRttAverage + " 抖动 " + stat.mJitter);
}
}

@Override
public void onAudioRouteChanged(int route) {
Log.d("qtt_rtc", "音频路由变化");
}

@Override
public void onSoundStateChanged(int state) {
Log.d("qtt_log", "播放音乐状态变化 " + state);
}

@Override
public void onEffectFinished(int effectId) {
Log.d("qtt_log", "音效播放完成 " + effectId);
}

/**
* 该回调是由远端用户调用 enableVideo 或 disableVideo 方法开启或关闭视频模块触发的
*/
@Overide
public void onUserEnableVideo(long uid, boolean enabled,String name){
Log.d("qtt_log", "远端用户开/关视频模块回调 ");
//TODO 实现处理远端用户开/关视频的逻辑。
}

/**
* 该回调是由远端用户调用enableLocalVideo方法开启或关闭视频采集触发的
*/
@Overide
public void onUserEnableVideo(long uid, boolean enabled,String name){
Log.d("qtt_log", "远端用户开/关本地视频采集回调");
//TODO 实现处理远端用户开/关本地视频的逻辑。
}

/**
* 当远端用户调用muteLocalVideoStream取消或恢复发布视频流时,SDK会触发该回调向本地用户报告远端用户的发流状况
*/
@Overide
public void onUserEnableVideo(long uid, boolean enabled,String name){
Log.d("qtt_log", "远端用户取消或恢复发布视频流回调");
//TODO 实现处理远端用户取消或恢复发布视的逻辑。
}


/**
* 已显示本地视频首帧回调。
* 本地视频首帧显示在本地视图上时,SDK 会触发此回调
* @param width 本地渲染视频的宽 (px)
* @param height 本地渲染视频的高 (px)
* @param elapsed 从调用 joinChannel 到发生此事件过去的时间(毫秒)。如果在 joinChannel 前调用了 startPreview,则是从 startPreview 到发生此事件过去的时间。
* @param name 该用户加入频道设置的用户名。如果没有设置则为""
*/
@Overide
public void onFirstLocalVideoFrame(int width, int height, int elapsed, String name){
}

/**
* 已发布本地视频首帧回调。
* SDK 会在以下时机触发该回调:
开启本地视频的情况下,调用 joinChannel 成功加入频道后。
调用 muteLocalVideoStream(true),再调用 muteLocalVideoStream(false) 后。
调用 disableVideo,再调用 enableVideo 后。
调用 pushVideoFrame 成功向 SDK 推送视频帧后。
* @param elapsed 从调用 joinChannel 方法到触发该回调的时间间隔(毫秒)。
* @param name 该用户加入频道设置的用户名。如果没有设置则为""
*/
@Overide
public void onFirstLocalVideoFramePublished(int elapsed, String name){
}

/**
* 已完成远端视频首帧解码回调
* 本地收到远端第一个视频帧并解码成功后,会触发该回调。有两种情况:远端用户首次上线后发送视频,远端用户视频离线再上线后发送视频
* @param uid 用户 ID,指定是哪个用户的视频流
* @param width 视频流宽(像素)
* @param height 视频流高(像素)
* @param elapsed 从本地用户调用 joinChannel 方法直至该回调被触发的延迟(毫秒)
* @param name 该用户加入频道设置的用户名。如果没有设置则为""
*/
@Overide
public void onFirstRemoteVideoDecoded(long uid, int width, int height, int elapsed, String name){
}

/**
* 已显示首帧远端视频回调。
* 第一帧远端视频显示在视图上时,触发此调用。 App 可在此调用中获知出图时间(elapsed)。
* @param uid 用户 ID,指定是哪个用户的视频流
* @param width 视频流宽(像素)
* @param height 视频流高(像素)
* @param elapsed 从本地用户调用 joinChannel 方法直至该回调被触发的延迟(毫秒)
* @param name 该用户加入频道设置的用户名。如果没有设置则为""
*/
@Overide
publicvoid onFirstRemoteVideoFrame(long uid, int width, int height, int elapsed, String name){
}

};

ChannelEngine engine = ChannelEngine.GetChannelInstance(getApplicationContext(),"your appkey",channelObserver);
野狗新手?
立即注册,为你提供安全可靠的实时通信云服务。
没找到需要的文档?
你可以提交工单反馈 或 阅读常见问题