腾讯互动白板+即时通讯+实时音视频,Android学生端接入

腾讯互动白板+即时通讯+实时音视频,Android学生端接入

一、简介

线上教学方案:腾讯云互动白板(Tencent Interactive Whiteboard,TIW)+即时通信(Instant Messaging,IM)+实时音视频(Tencent RTC)实现老师线上互动教学

官方地址:

//cloud.tencent.com/product/tiw

//cloud.tencent.com/product/im

//cloud.tencent.com/product/trtc

二、接入

1、前置步骤

需要在控制台申请appid,key等,参考://cloud.tencent.com/document/product/1137/39899

2、配置工程

app.build: 引用依赖库 rtc,im,eb,并指定app的cpu架构

android{
    ...
    defaultconfig{
        ...
        ndk {
            abiFilters "armeabi", "armeabi-v7a", "arm64-v8a"
        }
        ...
    }
    ...
}
...
dependencies{
    ...
    api 'com.tencent.liteav:LiteAVSDK_TRTC:8.7.10102'
    api 'com.tencent.imsdk:imsdk:4.8.50'
    api 'com.tencent.edu:TEduBoardSdk:2.6.0.98'
    ...
}

project.build: app.build中的依赖文件下载出问题时,可以参考如下配置

buildscript {
    repositories {
        ...
        maven {url '//dl.bintray.com/tencentqcloudterminal/maven' }
        ...
    }
}
...
allprojects {
     repositories {
        ...
        maven {url '//dl.bintray.com/tencentqcloudterminal/maven' }
        ...
    }
}

Manifest: 添加以下权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

3、接入IM

  • 初始化IM:
V2TIMManager.getInstance().initSDK(Context context, int sdkAppID, V2TIMSDKConfig config,V2TIMSDKListener     listener)

sdkAppID: 上述控制台上申请的appid

config: 配置信息可为传null,目前只有配置日志等级,默认info级别

listener: 初始化回调接口,提供了网络状态和用户信息变化回调,所有V2TIMSDKListener回调都可以参考下:

回调方法 描述 推荐操作
onConnecting() SDK 正在连接到腾讯云服务器 适合在 UI 上展示“正在连接”状态。
onConnectSuccess() SDK 已经成功连接到腾讯云服务器 连接成功
onConnectFailed() SDK 连接腾讯云服务器失败 可以提示用户当前网络连接不可用。
onKickedOffline() 当前用户被踢下线 此时可以 UI 提示用户“您已经在其他端登录了当前账号,是否重新登录?”
onUserSigExpired() 在线时票据过期 请使用新签发的 UserSig 进行登录。
onSelfInfoUpdated() 登录用户的资料发生了更新 可以在 UI 上更新自己的头像和昵称。

  • 登录IM:
V2TIMManager.getInstance().login(String userId, String userSig, V2TIMCallback callback);

userId: 用户id,可自定义,不超过32位

userSig: IM SDK 登录票据(token),由业务服务器生成

callback: 操作结果回调,所有V2TIMCallback回调都可以参考下表说明:

回调方法 描述
void onError(int code, String desc); 出错时回调,code码详情
void onSuccess(); 成功时回调

注意:调用 IM SDK Login 成功登录后,将会开始计算 DAU,请根据业务场景合理使用 IM SDK Login操作,避免出现 DAU 过高的情况。

登录时机 说明
App 启动后首次使用 IM SDK 的能力时 本项目为进入连麦模式才首次登录
IM SDK (V2TIMSDKListener) 抛出 onUserSigExpired 回调 登录票据 (token) 已过期,需要使用新的 UserSig进行登录
IM SDK(V2TIMSDKListener) 抛出 onKickOffline 回调 当前用户被踢下线,同平台多点登录时触发,可考虑重新登录或者下线

  • 退出登录:
V2TIMManager.getInstance().logout(null);

为了降低 DAU,项目在结束连麦后,要及时调用退出登录。

  • 加入群组:

群分类: 好友工作群(Work)、陌生人社交群(Public)、临时会议群(Meeting)、直播群(AVChatRoom);项目采用public群(需要审批),详细区别参考:官方群类型介绍

申请入群:

V2TIMManager.getInstance().joinGroup(String groupID, String message, V2TIMCallback callback);
参数 说明
groupID 群id,由主播端创建、业务服务器下发
message 申请入群说明
callback 发送申请状态回调

入群结果监听:void onApplicationProcessed(String groupID, V2TIMGroupMemberInfo opUser, booleanisAgreeJoin, String opReason) 其中isAgreeJointrue表示同意加群,反之被拒绝。同意加群后,全员(包括请求者)收到onMemberEnter回。

监听申请结果:

V2TIMManager.getInstance().setGroupListener(V2TIMGroupListener listener);

V2TIMGroupListener:该回调接口能监听所有群相关的状态,重要方法参考下表:

方法 说明
void onMemberEnter(String groupID, List<V2TIMGroupMemberInfo>memberList) 有用户加入群(全员能够收到)
memberList – 加入的成员
void onMemberLeave(String groupID, V2TIMGroupMemberInfomember) 有用户离开群(全员能够收到)
member – 离开的成员
注意:群主只能解散群不能离开
void onMemberKicked(String groupID, V2TIMGroupMemberInfo opUser, List<V2TIMGroupMemberInfo>memberList) 某些人被踢出某群(全员能够收到)
opUser – 处理人
memberList – 被踢成员
void onGroupDismissed(String groupID, V2TIMGroupMemberInfoopUser) 群被解散了(全员能收到)
opUser – 处理人
void onGroupRecycled(String groupID, V2TIMGroupMemberInfoopUser) 群被回收(全员能收到)
opUser – 处理人
void onApplicationProcessed(String groupID, V2TIMGroupMemberInfo opUser, boolean isAgreeJoin, StringopReason) 加群请求已经被群主或管理员处理了(只有申请人能够收到)
opUser -处理人
isAgreeJoin – 是否同意加群
opReason – 处理原因

4、接入RTC

备注:rtc使用的房间为im中的房间

  • 概念:
名称 说明
通话模式 无旁路,本项目不用
直播模式 有旁路
接口机 用于连麦互动,费用高
代理机 用于观众拉流观看,费用低
  • 初始化RTC:
  1. 获取 TRTCCloud 实例:TRTCCloud.sharedInstance(context);
  2. 设置腾讯云视频通话功能的事件回调接口:setListener(TRTCCloudListener listener)


5、接入IW

互动白板在有IM前提下,接入比较简单

  • 初始化:
    // 创建并初始化白板控制器
    //(1)鉴权配置
    TEduBoardController.TEduBoardAuthParam authParam = new TEduBoardController.TEduBoardAuthParam(sdkAppId, userId, userSig);
    //(2)白板默认配置
    TEduBoardController.TEduBoardInitParam initParam = new TEduBoardController.TEduBoardInitParam();
    mBoard = new TEduBoardController(context);
    //(3)添加白板事件回调
    mBoard.addCallback(callback);
    //(4)进行初始化
    mBoard.init(authParam, roomId, initParam);

    initParam: 白板配置为默认配置,如果有笔画颜色等特殊需求,参考官方文档配置。

  • 显示白板:
    //(1)获取白板 View
    View boardview = mBoard.getBoardRenderView();
    //(2)添加到父视图中
    FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
    FrameLayout container = findViewById(R.id.board_view_container);
    container.addView(boardview, layoutParams);
  • 销毁: TIMManager.getInstance().unInit();
Tags: