AUI Kits課堂AppServer提供了登錄服務和教室(直播間)管理服務等后臺服務,通過與AUI Kits課堂場景SDK搭配使用,可以快速實現互動直播應用,助力業務創新快速上線。本文介紹如何使用Java版本的源碼構建并部署AUI Kits課堂AppServer。
項目原理
AppServer的作用
集成方基于AUI Kits框架快速搭建互動課堂應用時,場景SDK對接了以下產品能力,AppServer對此進行封裝,提供一套標準化的HTTP接口供場景SDK使用,降低了集成方的開發成本。
視頻直播:用于直播推流、觀看及音視頻連麥。
互動消息:用于教室(直播間)傳遞信令消息。
視頻點播(可選):用于直播錄屏、回放。
互動白板:用于線上學科輔導等課堂場景,教師可借助涂鴉、文本、直線、激光筆等基礎教具,邊演示課件邊勾畫要點,由網易云信互動白板服務提供。
AppServer除了封裝上面4個產品的能力外,還實現了互動課堂管理服務,例如創建、修改、刪除課堂、開始、結束互動課堂等常見功能。AppServer不直接依賴視頻直播提供的接口,而是按照視頻直播推拉流協議拼接地址實現推拉流地址獲取。同時,AppServer也實現了監聽視頻直播的推流狀態回調,以解決主播端異常退出而直播間狀態不對的問題。
項目框架
基于主流的Java8 + Springboot2搭建框架。
基于Mybatis plus作為Repository層選型。
基于SpringSecurity + JWT實現權限控制。
項目部署
前提條件
創建數據庫
以MySQL為例,創建數據庫,并執行該SQL文件。
正確創建后應該有如下7個表。
部署方式
方式一(推薦):通過源碼部署。
本示例主要通過源碼構建并部署AppServer。根據源碼的說明文檔配置并執行,詳細信息,請參見AUI Kits課堂AppServer。
方式二:如果熟悉函數計算,也可以使用Serverless平臺快速部署,參見快速創建函數。
在首次部署服務器時,請務必編輯代碼文件code/src/main/java/com/aliyuncs/aui/common/utils/JwtUtils.java
,給屬性SECRET隨機設置一個字符串。
項目參數配置
下載互動課堂源碼至服務器。
打開源碼
Server\Java\code\src\main\resources
目錄下的application.yml
文件,配置相關參數。參數配置信息
說明
server: port: 8080
默認監聽端口是8080,開發者可以自行更改。
# DB連接信息,連接到MySQL數據庫 url: jdbc:mysql://******:3306/*****?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai username: "******" password: "******"
jdbc:mysql://MySQL數據庫服務器的主機名或IP地址:3306/數據庫的名稱?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username:數據庫用戶名
password:數據庫密碼
# pop配置。需要配置賬號的AccessKey ID和AccessKey Secret,用于調用IM及VOD相關服務 openapi: access: key: "*********" secret: "*********"
調用阿里云IM及VOD相關服務API時,您需要使用AccessKey完成身份驗證。AccessKey包括AccessKey ID和AccessKey Secret。具體如下:
AccessKey ID:用于標識用戶。
AccessKey Secret:用于驗證用戶的密鑰。AccessKey Secret必須保密。
更多信息,請參見創建AccessKey。
# IM服務的應用Id new_im: appId: "*********" appKey: "*********" appSign: "*********"
直播互動消息AppId、AppKey和AppSign,請參見創建直播互動消息應用獲取。
# 直播推拉流配置 live_stream: #推流域名 push_url: push.*****.vip #拉流域名 pull_url: pull.*****.vip #推流對應的authkey push_auth_key: zJl4****** #拉流對應的authkey pull_auth_key: mDZs******** app_name: live auth_expires: 604800
push_url: 推流域名
pull_url: 拉流域名
push_auth_key: 推流域名的鑒權主KEY
pull_auth_key: 播流域名的鑒權主KEY
app_name: 轉推后直播流地址中的AppName,默認為live,可自定義。
說明若您需要為轉推后的流綁定轉碼、錄制、截圖等模板,需要設置該AppName與模板中的AppName一致模板才會生效。
請參見查看鑒權值獲取。
# 連麥應用信息 live_mic: app_id: 7c61******** app_key: c461b*********
視頻連麥應用ID和AppKey,請參見創建實時音視頻應用獲取。
# 推流狀態回調的authKey live_callback: auth_key: avdsd*******
如果需要監聽某個推流地址的推流狀態,請配置該參數。請參見回調設置獲取該參數值。
# 白板信息 room: boards: app_key: "*********" app_secret: "*********"
網易云信互動白板服務應用的AppKey、AppSecret,請參見白板配置獲取。
# 配置允許跨域的請求域名 http: cors: host: "*"
Web端使用該服務時請正確設置CORS,以允許跨域請求。
面向服務的鑒權配置說明
本項目需要先調用/login
接口獲取鑒權的token,將token放到請求頭中,然后再調用其它接口。但是本項目token的生成方式較為簡易,僅適用于測試,用戶基于Demo開發時需要自行調整鑒權策略。用戶可按自身業務需求實現鑒權配置,包括token的生成算法也可以自定義,要確保生成及檢驗token使用相同的算法。
鑒權token的相關代碼文件見code/src/main/java/com/aliyuncs/aui/common/utils/JwtUtils.java
。
/login
接口說明詳見登錄的詳細接口定義。
項目打包和運行
打包
使用IDEA自帶的Maven打包,jar在target目錄下。
在
Server\Java\code
路徑下使用以下命令執行打包操作。mvn package -DskipTests
將
target
目錄下的jar包發送到服務器。scp xxx.jar root@ip:/root
運行項目
在jar包所在目錄下打開終端。
終端運行,日志打印到終端。
java -jar ***.jar
后臺運行,將日志打印輸出到nohup.out文件。
nohup java -jar ***.jar &
查看是否啟動成功。
訪問對應接口,顯示如下,說明AppServer啟動成功。