服务端集成

更新时间: 2023-11-02 11:11:10

AUI Kits课堂AppServer提供了登录服务和教室(直播间)管理服务等后台服务,通过与AUI Kits课堂场景SDK搭配使用可以快速实现互动直播应用,助力业务创新快速上线。本文介绍通过Java版本的源码构建并部署AUI Kits课堂AppServer。

前提条件

  • 已完成前置准备相关操作。

  • 环境中已安装了Java8。

注意事项

确保在Web端使用该服务时正确设置CORS,以允许跨域请求。

原理介绍

AppServer的作用

image

集成方基于AUI Kits框架快速搭建互动课堂应用时,场景SDK对接了以下产品能力,AppServer对此进行封装,提供一套标准化的HTTP接口供场景SDK使用,降低了集成方的开发成本。

  1. 视频直播:用于直播推流、观看及音视频连麦。

  2. 互动消息:用于教室(直播间)传递信令消息。

  3. 视频点播(可选):用于直播录屏、回放。

  4. 互动白板:用于线上学科辅导等课堂场景,教师可借助涂鸦、文本、直线、激光笔等基础教具,边演示课件边勾画要点,由网易云信互动白板服务提供。

AppServer除了封装上面4个产品的能力外,还实现了互动课堂管理服务,例如创建、修改、删除课堂、开始、结束互动课堂等常见功能。AppServer不直接依赖视频直播提供的接口,而是按照视频直播推拉流协议拼接地址实现推拉流地址获取。同时,AppServer也实现了监听视频直播的推流状态回调,以解决主播端异常退出而直播间状态不对的问题。

项目部署

  • 技术选型

    • 基于主流的Java8 + Springboot2搭建框架。

    • 基于Mybatis plus作为Repository层选型。

    • 基于SpringSecurity + JWT实现权限控制。

  • 部署

    • 方式一(推荐):通过源码部署。

      本示例主要通过源码构建并部署AppServer。根据源码的说明文档配置并执行,详细信息,请参见AUI Kits课堂AppServer

    • 方式二:使用Serverless平台部署。

      您可通过Serverless 应用中心,一键部署该应用。具体操作,请参见管理应用

工程配置说明

  1. 下载互动课堂源码至服务器。

  2. 打开源码Server\Java\code\src\main\resources目录下的application.yml文件,配置相关参数。

    参数配置信息

    说明

    # 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服务   
        live_rongcloud_im:
        	app_key: "*********"
        	app_secret: "*********"

    该场景默认使用直播互动消息服务,若您需要使用融云IM服务,请先开通其服务。

    # IM服务的应用Id    
      live_im:
        app_id: TY3****

    直播互动消息应用ID,请参见步骤三:创建直播互动消息应用获取。

    # 直播推拉流配置
      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*********

    连麦应用IDAppKey,请参见步骤四:创建直播连麦应用获取。

     # 推流状态回调的authKey
      live_callback:
        auth_key: avdsd*******

    如果需要监听某个推流地址推流状态,请配置该参数。请参见回调设置获取该参数值。

    # 白板信息
    room:
      boards:
        app_key: "*********"
        app_secret: "*********"

    网易云信互动白板服务应用的AppKeyAppSecret,请参见步骤八:获取互动白板AppKey与AppSecret获取。

    # 配置允许跨域的请求域名
    http:
      cors:
        host: "*"

    Web端使用该服务时请正确设置CORS,以允许跨域请求。

面向服务的鉴权配置

需要先调用/login接口获取鉴权的token,将token放到请求头中,然后再调用其它接口。

image.png

/login接口说明

该接口用户可根据业务需求实现,包括token的生成算法也是可以自定义,但要确保生成及检验token使用相同的算法。

使用说明

  • 请求协议: http/https

  • 请求Path:/login

  • 是否需要授权:否

  • 请求Method:POST

  • 请求ContentType:JSON

请求参数

名称

类型

是否必填

示例值

描述

username

String

usernamexxx

用户名。

password

String

passwordxxxx

密码。

返回数据

名称

类型

示例值

描述

code

Integer

200

业务响应码。参考HTTP响应码。

expire

String

2023-02-28T14:38:06+08:00

过期时间。使用UTC时间格式。

token

String

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9***

授权凭证。默认使用jwt生成。

打包和启动

以监听9000为示例,代码如下所示。

  1. Server\Java\code路径下使用以下命令执行打包操作。

    mvn package -DskipTests
  2. 执行以下命令,将target目录下所有以.jar结尾的文件复制到target目录下,并将复制后的文件命名为webframework.jar

    cp target/*.jar target/webframework.jar
  3. 执行以下命令启动Java应用程序,其中指定了server.port 的值为 9000,并且使用 target/webframework.jar 文件作为可执行的JAR文件。

    java -Dserver.port=9000 -jar target/webframework.jar

阿里云首页 音视频终端 SDK 相关技术圈