腾讯互动白板+即时通讯+实时音视频,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. python基础之面向对象(三))(实战:烤地瓜(SweetPotato))

    一.分析"烤地瓜"的属性和方法 示例属性如下: cookedLevel : 这是数字:0~3表示还是生的,超过3表示半生不熟,超过5表示已经烤好了,超过8表示已经烤成木炭了!我们的 ...

  2. Centos7 网卡DHCP重新获取IP地址

    问题:局域网内一台linux系统(Centos7.4)DHCP自动获取的IP地址和另一台手动配置的静态IP冲突了 解决方法:让DHCP自动获取的IP地址重新获取一个别的IP地址 DHCP重新获取IP ...

  3. 【Azure 事件中心】为应用程序网关(Application Gateway with WAF) 配置诊断日志,发送到事件中心

    问题描述 在Application Gateway中,开启WAF(Web application firewall)后,现在需要把访问的日志输出到第三方分析代码中进行分析,如何来获取WAF的诊断日志呢 ...

  4. grasshopper DataTree 树形数据以及Graft Flatten Simplify的理解

    问题的来源: 要在grasshopper里面输出 类似于二维数组的数据 但是在 grasshopper里的 C# 电池里面,无法显示 二维ArrayList里面的数据. 在 C# 电池里参考这个帖子: ...

  5. python 导入同级目录文件、上级目录文件以及下级目录数据集和模块包

    划重点: 其中dataset_path = ''表示在Python工作文件夹 dataset_path = '..'表示在Python工作文件夹的上级文件夹 dataset_path = '某某文件夹 ...

  6. 单核性能强悍,Core i3 这次又要“默秒全”?

    单核性能强悍,Core i3 这次又要"默秒全"? 在 Intel 历代酷睿处理器中,定位主流级的 Core i3 一直以超高性价比.低功耗.低发热的特点受到广大用户的青睐,在市场 ...

  7. halcon——缺陷检测常用方法总结(频域空间域结合)

    摘要 缺陷检测是视觉需求中难度最大一类需求,主要是其稳定性和精度的保证.首先常见缺陷:凹凸.污点瑕疵.划痕.裂缝.探伤等. 缺陷检测算法不同于尺寸.二维码.OCR等算法.后者应用场景比较单一,基本都是 ...

  8. Python_Selenium 之以login_page为例实现对basepage封装好的方法调用和对common中公共方法的调用

    目的:简化代码,提供框架该有的东西每一个函数 -提供了一个功能 - 公共的功能有了basepage,在PageObjects当中直接调用元素操作. 以下以login_page 为例,实现从配置文件中读 ...

  9. Java重载方法如何竞争

    突然想起以前遇到的一道笔试题,题目大概是这样子的 // 父类 public class Father { } // 子类 public class Son extends Father { } // ...

  10. 性能监控工具之Grafana+Prometheus+Exporters

    在本模块中,我将把几个常用的监控部分给梳理一下.前面我们提到过,在性能监控图谱中,有操作系统.应用服务器.中间件.队列.缓存.数据库.网络.前端.负载均衡.Web 服务器.存储.代码等很多需要监控的点 ...