通过阅读本文,您可以了解到Android端互动大班课的集成方法。
环境要求
Android端具体环境要求,更多信息,请参见使用限制。
前提条件
- 老师端(Electron)已集成并开启。具体操作,请参见Electron集成。
- 服务端已集成并开启。具体操作,请参见服务端集成。
- 环境中已安装Android Studio 3.0或以上版本。更多信息,请参见Android Studio。
操作步骤
Demo目录结构说明
项目结构如下所示:
目录名 | 说明 |
---|---|
App | 程序入口。 |
IM | AIM相关本地库。 |
RTCInteractiveClass_RTC | 互动大班课功能实现库。更多信息,请参见RTCInteractiveClass_RTC组件库目录说明。 |
RTCSolutionCommon | 公共组建库。 |
RTCViewCommon | 公共UI库。 |
thirdparty-lib | 第三方库的引用。 |
RTCInteractiveClass_RTC组件库目录说明,如下所示:
目录名 | 说明 |
---|---|
adapter | 列表控件adapter。 |
bean | 实体类。 |
constant | 常量数据管理类,在此配置服务端请求域名和分享链接的域名。 |
im | 阿里云IM SDK接口封装。 |
network | 网络请求。 |
rtc | RTC SDK接口封装。 |
ui | 工具类。 |
view | 自定义view。 |
API说明
API | 描述 |
---|---|
sharedInstance | 获取AliRtcInteractiveEngine的实例对象,初始化RTC SDK。 |
destory | 销毁AliRtcInteractiveEngine的实例对象,销毁后需要再调用sharedInstance接口再次初始化实例。 |
login | 根据输入的房间号、用户名加入RTC频道。 |
logout | 退出RTC频道。 |
enterSeat | 连麦。 |
leavelSeat | 断开连麦。 |
muteLocalMic | 是否停止本地音频采集。 |
muteLocalCamera | 是否停止本地视频采集。 |
setLocalViewConfig | 为本地预览设置参数及绘制窗口。 |
startPreview | 开始本地预览。 |
stopPreview | 停止本地预览。 |
getLocalSeatUserInfo | 获取本地上麦用户信息。 |
getRemoteSeatUserInfo | 获取远端用户信息。 |
setRemoteViewConfig | 为远端的视频设置参数及绘制窗口。 |
setAliRtcInteractiveListener | 设置监听。 |
getRoomUserList | 获取房间用户列表。 |
isActiveStudent | 判断学生是否连麦。 |
API | 描述 |
---|---|
onEnterSeatResult | 用户上麦的通知。 |
onLeaveSeatResult | 用户下麦的通知。 |
onOccurError | 错误信息的通知。 |
onOccurWarning | 警告信息的通知。 |
onRoomDestroy | 房间被销毁的回调。 |
onSDKError | SDK发生异常需要销毁实例。 |
onJoinChannelResult | 加入房间的通知。 |
onLeaveChannelResult | 离开房间的通知。 |
onRemoteTrackAvailableNotify | 远端用户音视频流发生变化时的回调。 |
onActiveSpeaker | 正在发言的用户。 |
onAudioSubscribeStateChanged | 音频订阅情况变更回调。 |
onVideoSubscribeStateChanged | 相机流订阅情况变更回调。 |
onSubscribeStreamTypeChanged | 大小流订阅情况变更回调。 |
onScreenShareSubscribeStateChanged | 屏幕分享流订阅情况变更回调。 |
onUserAudioMuted | 用户取消音频的通知。 |
onUserVideoMuted | 用户取消视频的通知。 |
onNetworkQualityChanged | 网络质量变化时的回调。 |
onUpdateRoleNotify | 角色切换成功的通知。 |
onRemoteUserOnLineNotify | 远端用户上线的通知。 |
onRemoteUserOffLineNotify | 远端用户下线的通知。 |
API | 描述 |
---|---|
sharedInstance | 获取IM管理类单例。 |
destroy | 销毁IM管理类。 |
createUserManager | 创建用户实例并登录。 |
addMembers | 加入群聊。 |
sendMessage | 发送消息。 |
handUp | 举手。 |
listAllMembers | 拉取所有群成员。 |
setAliImInteractiveListener | 设置回调。 |
API | 描述 |
---|---|
joinGroupSuccess | 加入群聊成功。 |
joinGroupFailure | 加入群聊失败。 |
onLocalLogin | 本地登录成功。 |
sendMessageSuccess | 发送消息成功。 |
sendMessageFailure | 发送消息失败。 |
onAddedMessages | 收到新消息的回调,可通过newMsg.type区分是自己发送的或在线、离线状态收到的消息。 |
onGroupAddedMembers | 新增群成员。 |
onGroupRemovedMembers | 移除群成员。 |
RTC管理类功能实现接口
- sharedInstance:获取AliRtcInteractiveEngine的实例对象,初始化RTC SDK。
/** * 获取AliRtcInteractiveEngine实例 */ public static AliRtcInteractiveEngine sharedInstance() {};
- destory:销毁AliRtcInteractiveEngine的实例对象,销毁后需要再调用sharedInstance接口再次初始化实例。
/** * 销毁实例 */ public abstract void destory();
- login:根据输入的房间号、用户名加入RTC频道。
/** * 登录 * * @param channelId 房间号 * @param userName 昵称 */ public abstract void login(String channelId, String userName);
- logout:退出RTC频道。
/** * 登出 */ public abstract void logout();
- enterSeat:连麦。
/** * 上麦 */ public abstract void enterSeat();
- leavelSeat:断开连麦。
/** * 下麦 */ public abstract void leavelSeat();
- muteLocalMic:是否停止本地音频采集。
/** * 停止发布音频 */ public abstract int muteLocalMic(boolean isMute);
- muteLocalCamera:是否停止本地视频采集。
/** * 停止发布视频 */ public abstract int muteLocalCamera(boolean isMute);
- setLocalViewConfig:为本地预览设置参数及绘制窗口。
/** * 设置本地预览渲染参数 */ public abstract void setLocalViewConfig(AliRtcEngine.AliVideoCanvas localAliVideoCanvas, AliRtcEngine.AliRtcVideoTrack aliRtcVideoTrackCamera);
- startPreview:开始本地预览。
/** * 开启预览 */ public abstract void startPreview();
- stopPreview:停止本地预览。
/** * 停止预览 */ public abstract void stopPreview();
- getLocalSeatUserInfo:获取本地上麦用户信息。
/** * 获取本地上麦用户信息 */ public abstract RemoteUserInfo getLocalSeatUserInfo();
- getRemoteSeatUserInfo:获取远端用户信息。
/** * 获取远端用户信息 */ public abstract AliRtcRemoteUserInfo getRemoteSeatUserInfo(String uerId);
- setRemoteViewConfig:为远端的视频设置参数及绘制窗口。
/** * 设置远端渲染参数 */ public abstract void setRemoteViewConfig(AliRtcEngine.AliVideoCanvas aliVideoCanvas, String uid, AliRtcEngine.AliRtcVideoTrack aliRtcVideoTrack);
- setAliRtcInteractiveListener:设置监听。
/** * 设置监听 */ public abstract void setAliRtcInteractiveListener(AliRtcInteractiveListener callback);
- getRoomUserList:获取房间用户列表。
/** * 获取房间用户列表 */ public abstract String[] getRoomUserList();
- isActiveStudent:
/** * 判断学生是否连麦 */ public abstract boolean isActiveStudent();
RTC回调接口
- onEnterSeatResult:用户上麦的通知。
/** * 自己上麦结果通知 * @param result 0为成功,反之失败 */ void onEnterSeatResult(int result);
- onLeaveSeatResult:用户下麦的通知。
/** * 自己下麦结果通知 */ void onLeaveSeatResult(int result);
- onOccurError:错误信息的通知,当错误码是以下几种情况时,需要销毁SDK实例。
- ErrorCodeEnum.ERR_ICE_CONNECTION_HEARTBEAT_TIMEOUT
- ErrorCodeEnum.ERR_SDK_INVALID_STATE
- ErrorCodeEnum.ERR_SESSION_REMOVED
/** * SDK报错 * */ void onOccurError(int error);
- onOccurWarning:警告信息的通知。
/** * SDK警告 * */ void onOccurWarning( int error);
- onRoomDestroy:房间被销毁的回调。
/** * 房间被销毁的回调 */ void onRoomDestroy(int i);
- onSDKError:SDK发生异常需要销毁实例。
/** * SDK报错,需要销毁实例 */ void onSDKError( int error);
- onJoinChannelResult:加入房间的通知。
/** * 加入房间通知 * @param result 0为成功,反之失败 */ void onJoinChannelResult(int result);
- onLeaveChannelResult:离开房间的通知。
/** * 离开房间通知 */ void onLeaveChannelResult(int result);
- onRemoteTrackAvailableNotify:远端用户音视频流发生变化时的回调。
/** * * 当订阅情况发生变化时,返回这个消息onSubscribeChangedNotify * @param userId 用户ID * @param videoTrack 订阅成功的视频流 * @param audioTrack 订阅成功的音频流 */ void onRemoteTrackAvailableNotify(String userId, AliRtcEngine.AliRtcAudioTrack audioTrack, AliRtcEngine.AliRtcVideoTrack videoTrack);
- onActiveSpeaker:正在发言的用户。
/** *正在发言的学生 */ void onActiveSpeaker(String speakers);
- onAudioSubscribeStateChanged:音频订阅情况变更回调。
/** * 音频订阅情况变更回调 * @param uid 用户Id * @param oldState 之前的订阅状态 * @param newState 当前的订阅状态 */ void onAudioSubscribeStateChanged(String uid, AliRtcEngine.AliRtcSubscribeState oldState, AliRtcEngine.AliRtcSubscribeState newState, int elapseSinceLastState, String channel);
- onVideoSubscribeStateChanged:相机流订阅情况变更回调。
/** * 相机流订阅情况变更回调 * @param uid 用户Id * @param oldState 之前的订阅状态 * @param newState 当前的订阅状态 */ void onVideoSubscribeStateChanged(String uid, AliRtcEngine.AliRtcSubscribeState oldState, AliRtcEngine.AliRtcSubscribeState newState, int elapseSinceLastState, String channel);
- onSubscribeStreamTypeChanged:大小流订阅情况变更回调。
/** * 大小流订阅情况变更回调 * @param uid 用户Id * @param oldStreamType 之前的订阅状态 * @param newStreamType 当前的订阅状态 */ void onSubscribeStreamTypeChanged(String uid, AliRtcEngine.AliRtcVideoStreamType oldStreamType, AliRtcEngine.AliRtcVideoStreamType newStreamType, int elapseSinceLastState, String channel);
- onScreenShareSubscribeStateChanged:屏幕分享流订阅情况变更回调。
/** * 屏幕分享流订阅情况变更回调 * @param uid 用户Id * @param oldState 之前的订阅状态 * @param newState 当前的订阅状态 */ void onScreenShareSubscribeStateChanged(String uid, AliRtcEngine.AliRtcSubscribeState oldState, AliRtcEngine.AliRtcSubscribeState newState, int elapseSinceLastState, String channel);
- onUserAudioMuted:用户取消音频的通知
/** * 用户取消音频的通知 */ void onUserAudioMuted(String userId, boolean mute);
- onUserVideoMuted:用户取消视频通知。
/** * 用户取消视频通知 */ void onUserVideoMuted(String userId, boolean mute);
- onNetworkQualityChanged:网络质量变化时的回调。
/** * 网络状态回调 * * @param aliRtcNetworkQuality1 下行网络质量 * @param aliRtcNetworkQuality 上行网络质量 * @param s 用户ID */ void onNetworkQualityChanged(String s, AliRtcEngine.AliRtcNetworkQuality aliRtcNetworkQuality, AliRtcEngine.AliRtcNetworkQuality aliRtcNetworkQuality1);
- onUpdateRoleNotify:角色切换成功的通知。
/** * * 角色切换成功通知 */ void onUpdateRoleNotify(AliRtcEngine.AliRTCSDK_Client_Role oldRole, AliRtcEngine.AliRTCSDK_Client_Role newRole);
- onRemoteUserOnLineNotify:远端用户上线的通知。
/** * 用户上线通知 * * @param userId 用户ID */ void onRemoteUserOnLineNotify(String userId);
- onRemoteUserOffLineNotify:远端用户下线的通知。
/** * 用户下线通知 * @param userId 用户ID */ void onRemoteUserOffLineNotify(String userId);
IM功能实现接口
- sharedInstance:获取IM管理类单例。
/** * 获取单例 */ public static AliImInteractiveEngine sharedInstance() { return AliImInteractiveEngineImpl.sharedInstance(); }
- destroy:销毁IM管理类。
/** * 销毁实例 */ public static void destroy() { AliImInteractiveEngineImpl.destroyInstance(); }
- createUserManager:创建用户实例并登录。
/** * 创建用户实例并登录 * * @param userId 用户ID */ public abstract void createUserManager(String userId);
- addMembers:加入群聊。
/** * 加入群聊 * * @param userId 用户ID * @param nickName 昵称 */ public abstract void addMembers(String userId, String channelId, String nickName);
- sendMessage:发送消息。
/** * 发送消息 * * @param userId 用户ID * @param msg 消息内容 */ public abstract void sendMessage(String userId, String msg, String displayName);
- handUp:举手。
/** * 举手 * * @param userId 用户ID */ public abstract void handUp(String userId, String displayName);
- listAllMembers:拉取所有群成员。
/** * 拉取所有群成员 */ public abstract void listAllMembers(AIMPubGroupListAllMemberListener listener);
- setAliImInteractiveListener:设置回调。
/** * 设置回调 */ public abstract void setAliImInteractiveListener(AliImInteractiveListener callback);
IM回调接口
- joinGroupSuccess:加入群聊成功。
/** * 加入群聊成功 */ void joinGroupSuccess(ArrayList<AIMPubGroupMember> arrayList);
- joinGroupFailure:加入群聊失败。
/** * 加入群聊失败 */ void joinGroupFailure(DPSError dpsError);
- onLocalLogin:本地登录成功。
/** * 本地登录成功 */ void onLocalLogin();
- sendMessageSuccess:发送消息成功。
/** * 发送消息成功 */ void sendMessageSuccess(AIMPubMessage aimPubMessage);
- sendMessageFailure:发送消息失败。
/** * 发送消息失败 */ void sendMessageFailure(DPSError dpsError);
- onAddedMessages:收到新消息的回调,可通过newMsg.type区分是自己发送的或在线、离线状态收到的消息。
/** * 收到新消息的回调,可通过newMsg.type区分是自己发送的或在线、离线状态收到的消息 */ void onAddedMessages(final ArrayList<AIMPubNewMessage> arrayList);
- onGroupAddedMembers:新增群成员。
/** * 新增群成员 */ void onGroupAddedMembers();
- onGroupRemovedMembers:移除群成员。
/** * 移除群成员 */ void onGroupRemovedMembers();