騰訊互動白板+即時通訊+實時音視訊,Android學生端接入

zhoux123發表於2021-07-07

騰訊互動白板+即時通訊+實時音視訊,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();

相關文章