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

一、简介

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

官方地址:

https://cloud.tencent.com/product/tiw

https://cloud.tencent.com/product/im

https://cloud.tencent.com/product/trtc

二、接入

1、前置步骤

需要在控制台申请appid,key等,参考:https://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 'https://dl.bintray.com/tencentqcloudterminal/maven' }
...
}
}
...
allprojects {
repositories {
...
maven {url 'https://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();

腾讯互动白板+即时通讯+实时音视频,Android学生端接入的更多相关文章

  1. 了不起的WebRTC:生态日趋完善,或将实时音视频技术白菜化

    本文原文由声网WebRTC技术专家毛玉杰分享. 1.前言 有人说 2017 年是 WebRTC 的转折之年,2018 年将是 WebRTC 的爆发之年,这并非没有根据.就在去年(2017年),WebR ...

  2. 浅谈IM(InstantMessaging) 即时通讯/实时传讯【理论篇】

        一.IM简要概述 IM InstantMessaging(即时通讯,实时传讯)的缩写是IM,互动百科大致解释是一种可以让使用者在网络上建立某种私人聊天(chatroom)的实时通讯服务. 大部 ...

  3. 浅谈IM(InstantMessaging) 即时通讯/实时传讯

        一.IM简要概述 IM InstantMessaging(即时通讯,实时传讯)的缩写是IM,互动百科大致解释是一种可以让使用者在网络上建立某种私人聊天(chatroom)的实时通讯服务. 大部 ...

  4. 实时音视频互动系列(上):又拍云UTUN网络详解

    如何定义实时音视频互动, 延迟 400ms 内才能无异步感 实时音视频互动如果存在1秒左右的延时会给交流者带来异步感,必须将视频播放延迟限制在400ms以内,才能给用户较好的交互体验. 当延迟控制在4 ...

  5. 云-腾讯云-实时音视频:实时音视频(TRTC)

    ylbtech-云-腾讯云-实时音视频:实时音视频(TRTC) 支持跨终端.全平台之间互通,从零开始快速搭建实时音视频通信平台 1.返回顶部 1. 腾讯实时音视频(Tencent Real-Time ...

  6. 实时音视频互动系列(下):基于 WebRTC 技术的实战解析

    在 WebRTC 项目中,又拍云团队做到了覆盖系统全局,保证项目进程流畅.这牵涉到主要三大块技术点: 网络端.服务端的开发和传输算法 WebRTC 协议中牵扯到服务端的应用协议和信令服务 客户端iOS ...

  7. 微信小程序+腾讯云直播的实时音视频实战笔记

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. 融云携新版实时音视频亮相 LiveVideoStack 2019

    4 月 19 日,LiveVideoStack 2019 音视频大会在上海隆重开幕,全球多媒体创新专家.音视频技术工程师.产品负责人.高端行业用户等共襄盛会,聚焦音频.视频.图像.AI 等技术的最新探 ...

  9. 从零到一,使用实时音视频 SDK 一起开发一款 Zoom 吧

    zoom(zoom.us) 是一款受到广泛使用的在线会议软件.相信各位一定在办公.会议.聊天等各种场景下体验或者使用过,作为一款成熟的商业软件,zoom 提供了稳定的实时音视频通话质量,以及白板.聊天 ...

随机推荐

  1. JavaSE 知识图谱

    JAVA基础语法 DOS命令 JAVA介绍 JDK安装 JAVA环境的搭建 关键字 注释 标识符命名规则(编码规范) 字面值常量 进制转换 基本类型 变量(局部变量.静态变量) 运算符 表达式 控制语 ...

  2. AJAX 原理与使用

    AJAX 是什么 AJAX ( Asynchronous JavaScript and XML,异步 JavaScript 和 XML,中文读音:"阿贾克斯 ") 是一种 Web ...

  3. gcc 编译过程详解-(转自CarpenterLee)

    前言 C语言程序从源代码到二进制行程序都经历了那些过程?本文以Linux下C语言的编译过程为例,讲解C语言程序的编译过程. 编写hello world C程序: // hello.c #include ...

  4. jackson学习+CVE-2019-12086漏洞分析

    jackson和fastjson差不多,都是用来更方便的处理json 国人用fastjson,老外用jackson/gson比较多 环境搭建: pom.xml: <dependency> ...

  5. 修改mysql中数据库存储主路径

    一.首先把mysql的服务先停掉. 二.更改MySQL配置文件My.ini中的数据库存储主路径 打开文件夹C:\ProgramData\MySQL\MySQL Server 5.7中的my.ini文件 ...

  6. Tomcat 中文乱码

    问题描述 tomcat9启动后会有中文乱码,比如控制台乱码: startup.bat启动时乱码: 解决方法 打开"/apache-tomcat-9.0.20/conf/logging.pro ...

  7. 出现 关于UTF-8 序列的字节 2 无效的异常

    学习mybatis中碰到了 Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instanc ...

  8. Java处理Excel中的日期格式

    Java处理Excel中的日期格式 2011-12-23 17:34:03|  分类: java |举报 |字号 订阅 下载LOFTER 我的照片书  |   在Excel中的日期格式,其数值为距离1 ...

  9. Vue&Element 前端应用开发之菜单和路由的关系

    我们一般的应用系统,菜单是很多功能界面的入口,菜单为了更好体现功能点的设置,一般都是动态从数据库生成的,而且还需要根据用户角色的不同,过滤掉部分没有权限的菜单:在Vue&Element的纯前端 ...

  10. 三维视觉惯性SLAM的有效Schmidt-EKF

    三维视觉惯性SLAM的有效Schmidt-EKF An Efficient Schmidt-EKF for 3D Visual-Inertial SLAM 论文地址: http://openaccess ...