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