腾讯互动白板+即时通讯+实时音视频,Android学生端接入
腾讯互动白板+即时通讯+实时音视频,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)
其中isAgreeJoin
为true
表示同意加群,反之被拒绝。同意加群后,全员(包括请求者)收到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:
- 获取 TRTCCloud 实例:
TRTCCloud.sharedInstance(context);
- 设置腾讯云视频通话功能的事件回调接口:
setListener(TRTCCloudListener listener)
- 设置本地视频编码参数:
详情参考官方文档说明void setVideoEncoderParam(com.tencent.trtc.TRTCCloudDef.TRTCVideoEncParam trtcVideoEncParam)
- 进入房间:
void enterRoom(com.tencent.trtc.TRTCCloudDef.TRTCParams trtcParams, int scene)
进入房间的返回结果,会在
更多详情参考官方文档TRTCCloudListener.onEnterRoom(result)
中回调。- trtcParams:appid,token,roomId,role等,如果进入房间并互动,role要设置为主播。更多详情参考官方文档
- scene:应用场景主播端和连入端必须统一,本项目采用连麦直播(Live)
TRTCCloudDef.TRTC_APP_SCENE_LIVE
。更多详情参考官方文档
注意:不管进房是否成功,enterRoom 都必须与 exitRoom 配对使用,在调用 exitRoom 前再次调用 enterRoom 函数会导致不可预期的错误问题
- 退出房间:
void exitRoom()
- 开始连麦互动:
trtcCloud.startLocalAudio(TRTCCloudDef.TRTC_AUDIO_QUALITY_DEFAULT);
trtcCloud.startLocalPreview(true, view);- 如果当前没有在互动中,需要先调用
trtcCloud.switchRole(TRTCCloudDef.TRTCRoleAnchor)
切换到主播角色 - startLocalAudio: 开启音频,参数为音频质量。更多详细说明请参考官网文档
- startLocalPreview: 开启摄像头预览,第一个参数是否为前置摄像头,第二个参数为承载预览的
TXCloudVideoView
。更多详细说明请参考官网文档 - 只要在房间中,会自动推流
- 如果当前没有在互动中,需要先调用
- 结束连麦互动:
trtcCloud.stopLocalAudio();
trtcCloud.stopLocalPreview();
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学生端接入的更多相关文章
- 了不起的WebRTC:生态日趋完善,或将实时音视频技术白菜化
本文原文由声网WebRTC技术专家毛玉杰分享. 1.前言 有人说 2017 年是 WebRTC 的转折之年,2018 年将是 WebRTC 的爆发之年,这并非没有根据.就在去年(2017年),WebR ...
- 浅谈IM(InstantMessaging) 即时通讯/实时传讯【理论篇】
一.IM简要概述 IM InstantMessaging(即时通讯,实时传讯)的缩写是IM,互动百科大致解释是一种可以让使用者在网络上建立某种私人聊天(chatroom)的实时通讯服务. 大部 ...
- 浅谈IM(InstantMessaging) 即时通讯/实时传讯
一.IM简要概述 IM InstantMessaging(即时通讯,实时传讯)的缩写是IM,互动百科大致解释是一种可以让使用者在网络上建立某种私人聊天(chatroom)的实时通讯服务. 大部 ...
- 实时音视频互动系列(上):又拍云UTUN网络详解
如何定义实时音视频互动, 延迟 400ms 内才能无异步感 实时音视频互动如果存在1秒左右的延时会给交流者带来异步感,必须将视频播放延迟限制在400ms以内,才能给用户较好的交互体验. 当延迟控制在4 ...
- 云-腾讯云-实时音视频:实时音视频(TRTC)
ylbtech-云-腾讯云-实时音视频:实时音视频(TRTC) 支持跨终端.全平台之间互通,从零开始快速搭建实时音视频通信平台 1.返回顶部 1. 腾讯实时音视频(Tencent Real-Time ...
- 实时音视频互动系列(下):基于 WebRTC 技术的实战解析
在 WebRTC 项目中,又拍云团队做到了覆盖系统全局,保证项目进程流畅.这牵涉到主要三大块技术点: 网络端.服务端的开发和传输算法 WebRTC 协议中牵扯到服务端的应用协议和信令服务 客户端iOS ...
- 微信小程序+腾讯云直播的实时音视频实战笔记
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 融云携新版实时音视频亮相 LiveVideoStack 2019
4 月 19 日,LiveVideoStack 2019 音视频大会在上海隆重开幕,全球多媒体创新专家.音视频技术工程师.产品负责人.高端行业用户等共襄盛会,聚焦音频.视频.图像.AI 等技术的最新探 ...
- 从零到一,使用实时音视频 SDK 一起开发一款 Zoom 吧
zoom(zoom.us) 是一款受到广泛使用的在线会议软件.相信各位一定在办公.会议.聊天等各种场景下体验或者使用过,作为一款成熟的商业软件,zoom 提供了稳定的实时音视频通话质量,以及白板.聊天 ...
随机推荐
- centos下如何查看命令由哪个包提供
今天在使用centos进行端口查看的时候发现系统没有netstat命令 yum安装发现并没有同名的包 经过一番查阅 学习到了 yum whatprovides/provides [commandNam ...
- 优启通-PE启动盘制作工具 原版Win7系统安装超详细教程!!!!!
https://www.jianshu.com/p/cd4abc9889b6 前期准备 原版Win7系统ISO映像文件 PE启动U盘或系统光盘(本教程以纯净无捆绑的优启通PE为示例) 优启通v3.3下 ...
- Git-【技术干货】工作中Git的使用实践
Git-[技术干货]工作中Git的使用实践 置顶 2019-09-17 21:02:16 web洋仔 阅读数 11444更多 分类专栏: Git 版权声明:本文为博主原创文章,遵循CC 4.0 B ...
- [转载]屏幕PPI、分辨率到底需要多大才能满足?
屏幕PPI.分辨率到底需要多大才能满足? 郝蛋儿 江湖骗子 13 人赞同了该文章 最近想买一个43寸的电视,720P和1080P差了500大洋.我不禁纠结了起来.看网上争得面红耳赤,有的人说不如108 ...
- Ubuntu 获取升级信息失败。可能网络有问题
升级Ubuntu系统时遇到的这个问题, 原因是默认的源不是国内的,而且还可能导致下载慢等问题. 1.备份源 cd /etc/apt/ sudo cp sources.list sources.list ...
- xxl-job使用遇到的问题
1.背景 最近公司在迁移定时任务,以前老的定时任务是基于quartz搭建的分布式集群服务,遇到如下几个瓶颈问题: 同一个任务只能有一个节点运行,其他节点不执行,导致性能低,资源也浪费 定时任务在抢占执 ...
- 一次线上事故,让我对MySql的时间戳存char(10)还是int(10)有了全新的认识
美好的周五 周五的早晨,一切都是那么美好. 然鹅,10点多的时候,运营小哥哥突然告诉我后台打不开了,我怀着一颗"有什么大不了的,估计又是(S)(B)不会连wifi"的心情,自信的打 ...
- Amazon SageMaker和NVIDIA NGC加速AI和ML工作流
Amazon SageMaker和NVIDIA NGC加速AI和ML工作流 从自动驾驶汽车到药物发现,人工智能正成为主流,并迅速渗透到每个行业.但是,开发和部署AI应用程序是一项具有挑战性的工作.该过 ...
- VB 老旧版本维护系列---尴尬的webapi访问返回json对象
尴尬的webapi访问返回json对象 首先Imports Newtonsoft.Json Imports MSXML2(Interop.MSXML2.dll) Dim URLEncode As Sy ...
- 「题解」NWRRC2017 Joker
本文将同步发布于: 洛谷博客: csdn: 博客园: 简书. 题目 题目链接:洛谷 P7028.gym101612J. 题意概述 有一个长度为 \(n\) 的数列,第 \(i\) 个元素的值为 \(a ...