AUI Kits 互动KTV AppServer提供了登录和KTV房间管理等后台服务,通过与AUI Kits SDK搭配使用可以快速实现在线K歌房应用,助力业务创新快速上线。
前提条件
- 需要开通应用,并且在你的服务端上开发相关接口或直接部署提供的Server源码,请参见前置准备。 
- 如果您需要通过容器镜像快速部署AppServer,请确保环境中已安装Docker,详情请参见Docker。 
- 如果您需要通过源码构建并部署AppServer,需确保环境中已安装JDK 8。 
通过源码构建及部署
根据服务端源码的说明文档配置并执行。
项目部署和体验
技术选型
- 基于主流的Java 8 + Springboot 2搭建框架 
- 基于Mybatis plus作为Repository层选型,存储可以使用MySQL 
- 基于SpringSecurity + JWT 来实现权限控制 
部署
- 安装了Java8之后即可在各个ECS或容器上运行。 
- 如果熟悉函数计算,也可以使用Serverless平台快速部署。 重要- 在首次部署服务器时,请务必编辑代码文件 - code/src/main/java/com/aliyuncs/aui/common/utils/JwtUtils.java,给属性SECRET随机设置一个字符串。
配置文件
server:
  port: 8080
# mysql相关配置
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    # 连接信息
    url: jdbc:mysql://*****:3306/****?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    username: r*****
    password: p*****
  jackson:
    time-zone: GMT+8
    date-format: yyyy-MM-dd'T'HH:mm:ss
    default-property-inclusion: non_null
#mybatis-plus相关配置。一般不用调整
mybatis-plus:
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.aliyuncs.aui.entity
  configuration:
    # 是否输出sql语句,本地开发时建议打开,上线前去掉
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    # sql执行超时时间
    default-statement-timeout: 10
# pop配置
biz:
  # pop配置。需要配置账号的ak及as,用于调用IM相关服务
  openapi:
    access:
      key: "daeewe*****"
      secret: "we2wewe******"
  # 互动消息服务(新)应用信息
  new_im:
      appId: "0c8xxxxx"
      appKey: "586fxxxxxx"
      appSign:  "232sfxxxxxx"
  # 连麦应用信息
  live_mic:
    app_id: "7c61********"
    app_key: "c461b*********"
http:
  cors:
    host: "*"参数说明
| 参数配置信息 | 说明 | 
|  | 调用阿里云IM及Live相关服务API时,您需要使用AccessKey完成身份验证。AccessKey包括AccessKey ID和AccessKey Secret。具体如下: 
 更多信息,请参见创建AccessKey。 | 
|  | 直播动消息应用ID,请参见控制台开通与配置中的创建直播互动消息应用获取。 | 
|  | 连麦功能如果需要可进行配置,连麦应用ID和AppKey,请参见创建实时音视频应用。 | 
数据库配置
当配置好DB后,手工创建数据库表。以MySQL为例,建表语句为:
-- 互动KTV房间信息表
CREATE TABLE `room_infos` (
  `id` char(32) NOT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  `title` varchar(256) DEFAULT NULL,
  `extends` mediumtext,
  `status` tinyint DEFAULT NULL,
  `chat_id` char(32) DEFAULT NULL,
  `notice` varchar(256) DEFAULT NULL,
  `cover_url` varchar(256) DEFAULT NULL,
  `anchor_id` varchar(256) DEFAULT NULL,
  `anchor_nick` varchar(256) DEFAULT NULL,
  `meeting_info` mediumtext,
  `show_code` int NOT NULL,
  `started_at` datetime DEFAULT NULL,
  `stopped_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_create_at` (`created_at`),
  UNIQUE KEY `udx_show_code`(`show_code`)
) ENGINE=InnoDB;
-- 歌曲列表信息
CREATE TABLE `song_infos` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  `room_id` char(32)  NOT NULL,
  `song_id` varchar(256) NOT NULL,
  `song_extends` mediumtext  DEFAULT NULL,
  `user_id` varchar(256) NOT NULL,
  `user_extends` mediumtext DEFAULT NULL,
  `top` tinyint NOT NULL DEFAULT 0 COMMENT '0: 非置顶, 1: 置顶',
  `top_time` datetime DEFAULT NULL,
  `status` tinyint NOT NULL,
  `join_members`  mediumtext  DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_top_time` (`top`, `top_time`),
  KEY `idx_create_at` (`created_at`),
  KEY `udx_room_id`(`room_id`)
) ENGINE=InnoDB;各表说明:
- room_infos表: 互动KTV房间信息表 
- song_infos表:歌曲列表信息 
具体字段可参考代码对应的各个实体:
com.aliyuncs.aui.entity.RoomInfoEntity
com.aliyuncs.aui.entity.SongInfoEntity