本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
AUI Kits互动直播AppServer提供了登录服务和直播间管理服务等后台服务,通过与AUI Kits互动直播场景SDK搭配使用可以快速实现互动直播应用,助力业务创新快速上线。
项目原理
AppServer的作用
集成方基于AUI Kits框架快速搭建诸如互动直播服务时,场景SDK需要对接视频直播(用于普通直播及连麦场景)、点播(用于直播录屏,可选)及IM服务(用于互动消息)等产品的能力。AppServer将这上述3个产品的能力进行封装,提供一套标准化的HTTP接口供场景SDK使用,降低了集成方的开发成本。
AppServer属于客户自行部署、维护的范畴。
AppServer除了封装上面几个产品的能力外,还实现了直播间管理服务,包括创建/修改/删除直播间、开始/结束直播等常见功能。
AppServer不直接依赖视频直播提供的接口,而是按照视频直播推拉流协议拼接地址实现推拉流地址获取。同时,AppServer也实现了监听视频直播的推流状态回调,以解决主播端异常退出而直播间状态不对的问题。
项目框架
基于主流的Java8+Springboot2搭建框架。
基于Mybatis plus作为Repository。
基于SpringSecurity+JWT来实现权限控制。
项目部署
前提条件
已完成控制台配置相关操作。
环境中已安装了Java8。
创建数据库
以MySQL为例,手工创建数据库,并手动执行如下SQL语句。
CREATE TABLE `room_infos` (
`id` varchar(256) NOT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
`title` varchar(256) DEFAULT NULL,
`anchor` varchar(256) DEFAULT NULL,
`extends` mediumtext,
`status` bigint DEFAULT NULL,
`mode` bigint DEFAULT NULL,
`chat_id` varchar(256) DEFAULT NULL,
`pk_id` varchar(256) DEFAULT NULL,
`notice` varchar(256) DEFAULT NULL,
`meeting_id` varchar(256) DEFAULT NULL,
`cover_url` varchar(256) DEFAULT NULL,
`anchor_id` varchar(256) DEFAULT NULL,
`anchor_nick` varchar(256) DEFAULT NULL,
`vod_id` varchar(256) DEFAULT NULL,
`meeting_info` mediumtext,
`started_at` datetime DEFAULT NULL,
`stopped_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_create_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
正确创建后有如下的表。
通过源码部署
本示例主要通过源码构建并部署AppServer。根据源码的说明文档配置并执行,详细信息,请参见AUI Kits直播AppServer。
在首次部署服务器时,请务必编辑代码文件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*******
如果需要监听某个推流地址的推流状态,请配置该参数。请参见回调设置获取该参数值。
# 配置允许跨域的请求域名 http: cors: host: "*"
Web端使用该服务时请正确设置CORS,以允许跨域请求。
点播中心选择。
警告我们在Demo的代码中默认点播中心为上海,如果开发者选择的点播中心不是上海但是需要用到视频回放功能,请开发者参考地域ID在代码文件
code/src/main/java/com/aliyuncs/aui/service/impl/VideoCloudServiceImpl.java
的如下位置自行更改点播中心。@PostConstruct public void init() { DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", accessKeyId, accessKeySecret); client = new DefaultAcsClient(profile); }
面向服务的鉴权配置
本项目需要先调用/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启动成功。