通过阅读本文,您可以了解到Android端互动大班课的集成方法。

环境要求

Android端具体环境要求,更多信息,请参见使用限制

前提条件

  • 老师端(Electron)已集成并开启。具体操作,请参见Electron集成
  • 服务端已集成并开启。具体操作,请参见服务端集成
  • 环境中已安装Android Studio 3.0或以上版本。更多信息,请参见Android Studio

操作步骤

  1. 下载并解压Demo,更多信息,请参见Demo源码下载
    说明
    • 源码压缩文件内分为Android、iOS、Electron、Server四端文件。
    • 如果GitHub代码库下载缓慢,可安装加速插件等方式加速下载。
  2. 修改android/ApsaraVideoInteractiveClass/RTCInteractiveClass_RTC/RTCInteractiveClass_demo/src/main/java/com/aliyun/rtc/rtcinteractiveclass/constant/Constant.java文件,配置AppID、AppKey和服务端URL。
    001
    说明 此处的AppID、AppKey、服务端URL和Electron端保持一致,更多信息,请参见Electron集成
  3. 运行Demo。
    1. 打开Android Studio,单击Open an Existing Project,选择android目录下的ApsaraVideoInteractiveClass文件夹。
    2. 单击002,同步工程。
      003
    3. 将Android设备与电脑有线连接,并在Android Studio中选择相对应的设备(暂不支持模拟器运行),单击003,编译并运行。
      005

      如果编译过程中出现问题或无法正常通话,请参见Android端运行常见问题

      说明 将Android设备和电脑有线连接时,需要在Android设备的设置中开启开发者模式和USB调试模式,同时在Android设备上选择同意调试。

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说明

表 1. RTC管理类功能实现接口
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 判断学生是否连麦。
表 2. RTC回调接口
API 描述
onEnterSeatResult 用户上麦的通知。
onLeaveSeatResult 用户下麦的通知。
onOccurError 错误信息的通知。
onOccurWarning 警告信息的通知。
onRoomDestroy 房间被销毁的回调。
onSDKError SDK发生异常需要销毁实例。
onJoinChannelResult 加入房间的通知。
onLeaveChannelResult 离开房间的通知。
onRemoteTrackAvailableNotify 远端用户音视频流发生变化时的回调。
onActiveSpeaker 正在发言的用户。
onAudioSubscribeStateChanged 音频订阅情况变更回调。
onVideoSubscribeStateChanged 相机流订阅情况变更回调。
onSubscribeStreamTypeChanged 大小流订阅情况变更回调。
onScreenShareSubscribeStateChanged 屏幕分享流订阅情况变更回调。
onUserAudioMuted 用户取消音频的通知。
onUserVideoMuted 用户取消视频的通知。
onNetworkQualityChanged 网络质量变化时的回调。
onUpdateRoleNotify 角色切换成功的通知。
onRemoteUserOnLineNotify 远端用户上线的通知。
onRemoteUserOffLineNotify 远端用户下线的通知。
表 3. IM功能实现接口
API 描述
sharedInstance 获取IM管理类单例。
destroy 销毁IM管理类。
createUserManager 创建用户实例并登录。
addMembers 加入群聊。
sendMessage 发送消息。
handUp 举手。
listAllMembers 拉取所有群成员。
setAliImInteractiveListener 设置回调。
表 4. IM回调接口
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();