全部产品
云市场

AppServer后台源码集成说明

更新时间:2019-07-01 14:52:16

概述

本项目为阿里云趣视频 APP 后台服务接口集成文档,主要用于趣视频App与视频点播服务之间数据交互、业务逻辑处理,运营人员对数据进行管理。主要包括随机生成用户,获取视频列表,获取凭证信息,上传视频,各种回调信息处理等能力。主要涉及的技术有Spring Boot微服务框架、RDS(Mysql)数据库、Mybatis持久层框架。

趣视频接口

功能接口类型 接口名称 说明
凭证类(AuthController) /vod/getSts 用户获取accessKeyId,accessKeySecret,securityToken信息
凭证类 /vod/getVideoUploadAuth 根据title,fileName等信息获取视频videoId,uploadAddress,uploadAuth
凭证类 /vod/refreshVideoUploadAuth 根据videoId刷新上传凭证
凭证类 /vod/getVideoPlayAuth 根据videoId获取playAuth信息,客户端可以通过playAuth播放视频
凭证类 /vod/getImageUploadAuth 根据image生成上传地址和凭证
用户类(UserProfileController) /user/randomUser 生成随机用户同时获取用户token,主要为了展示用户逻辑
视频类(VodController) 客户端发布视频,删除视频,获取视频列表等
业务逻辑 /vod/videoPublish 视频发布
业务逻辑 /vod/getRecommendVideoList 获取推荐视频
业务逻辑 /vod/getPersonalVideoList 获取个人中心视频
业务逻辑 /vod/deleteVideoById 根据videoId删除视频
资源类(ResourceMediaController) 获取动图类别信息,获取字幕类别信息等
业务逻辑 /resource/getPasterInfo 获取动图类别信息
业务逻辑 /resource/getMv 获取mv信息
业务逻辑 /resource/getTextPasterList 根据字幕id查询字体列表
业务逻辑 /resource/getPasterList 根据动图id查询动图包
业务逻辑 /resource/getFrontPasterList 查询前置动图包
业务逻辑 /resource/getFont 根据id获取字体
音乐类(DmhController) 获取热门歌曲,根据音乐id获取播放地址等
业务逻辑 /music/getRecommendMusic 获取热门歌曲
业务逻辑 /music/getPlayPath 根据音乐id获取播放地址

您可以在这个链接中查看更详细的趣视频接口文档:更详细的趣视频接口文档

控制台接口

功能接口类型 接口名称 说明
控制台相关(ConsoleController) /console/vod/getVideos 根据条件查询总视频列表
控制台相关 /console/vod/getRecommendVideoById 根据videoId查询推荐视频详情
控制台相关 /console/vod/pushObjectCache 将热门视频进行预热
控制台相关 /console/vod/getRecommendVideos 根据条件获取推荐视频列表
控制台相关 /console/vod/createAudit 对审核中的视频人工审核或屏蔽
控制台相关 /console/vod/getVideoById 根据videoId查询视频详情
控制台相关 /console/vod/recommendVideo 个人视频推荐到推荐列表
控制台相关 /console/vod/deleteRecommendById 取消推荐
控制台相关 /console/vod/deleteVideoById 根据videoId删除视频
控制台相关 /console/vod/submitTabTranscode 根据转码模板id发起窄带高清转码作业
控制台相关 /console/vod/submitTranscode 根据转码模板id发起非窄带高清转码作业
控制台用户相关(ConsoleUserController) /console/user/login 登录控制台
控制台用户相关 /console/user/signOut 退出登录

您可以在这个链接中查看更详细的控制台接口文档:更详细的控制台接口文档

阿里云服务开通

主要涉及的阿里云服务主要有:云主机ECS,云数据库RDS,点播服务VOD。

注意:阿里云的所有服务请在同一个区域购买

ECS购买

云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。您可以在这个链接中购买自己的ECS:ECS购买链接

ECS需要配置Java环境,推荐版本为:1.8版本。

  1. [alivcsdk@ilvb-app-server-1 ~]$ java -version
  2. java version "1.8.0_191"
  3. Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
  4. Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

RDS开通

云数据库是指被优化或部署到一个虚拟计算环境中的数据库,可以实现按需付费、按需扩展、高可用性以及存储整合等优势。 本Demo数据库只支持Mysql ,注意开通实例区域请保持跟ECS一致 。您可以在这个链接中开通自己的RDS:RDS开通链接数据库示例

点播服务(VOD)开通

视频点播(ApsaraVideo VoD,简称VoD)是集视频采集、编辑、上传、媒体资源管理、自动化转码处理(窄带高清TM)、视频审核分析、分发加速于一体的一站式音视频点播解决方案。您可以在这个链接中开通自己的点播服务:点播服务(VOD)开通链接视频点播

阿里云服务配置

点播服务VOD配置

视频点播提供了多样化的媒体处理能力,以经济、弹性和高可扩展的音视频转换方法,帮助开发者将音视频转码成适合在PC、TV以及移动终端上播放的格式。趣视频利用点播转码能力实现了“水印安全分享”,“窄带高清”,智能审核等高级能力。趣视频主要配置域名、转码模版、回调设置。

  1. 域名配置

访问点播服务上的视频或者图片都需要有一个域名才能进行访问,该域名在后续项目配置中会使用到。

更多域名配置相关说明见文档域名配置详情

  1. 转码模板配置

在短视频场景下,基于体验和安全性的考虑,我们需要在App或者网页播放时不带水印,但是下载的视频和分享的视频带上视频水印,另外还希望播放和下载的视频清晰度是一致的,基于阿里云视频点播服务中的转码服务即可以实现类似需求。具体在阿里云视频点播控制台中【全局设置】下【转码设置】,建立转码模版组,建立两个清晰度(流畅和标清)的转码模版,分别如下:

  • 流畅:720p无水印
  • 标清:720p有水印

转码配置

更多转码相关说明见文档视频点播转码处理

  1. 回调配置

视频处理中的智能审核,截图服务,转码服务等一系列的服务都是异步处理的,所有的状态更新和处理结果都通过异步消息通知或者回调的方式通知到业务方。本示例采用HTTP请求回调的方式进行状态通知,具体配置如下:登录视频点播控制台,选择【全局设置】>【回调设置】 ,趣视频主要使用转码,截图,视频AI处理,智能审核等回调。回调设置必须勾选上 “全部清晰度转码完成”,“视频AI处理完成”,“人工审核完成”,“视频截图完成”。

回调设置

更多回调配置说明见文档视频点播转码回调

4:自定义鉴权密钥的配置点播服务支持在HTTP(含HTTPS)回调时增加特定签名头,供回调消息接收服务端进行签名认证,以防止非法或无效请求。首先在控制台配置自定义的鉴权秘钥:

回调鉴权配置然后在具体的代码中鉴权秘钥修改为控制台配置的值:在项目文件/sdk-api/src/main/resources/application.properties中,把CALLBACK_PRIVETEKEY设置成你在控制台配置的鉴权密钥。

更多回调鉴权说明见文档回调鉴权文档

5.审核设置

为了满足您在发布之前对视频进行审查的需求,提供了视频审核功能,您可以提前或及时下线不符合条件的视频,避免或减少对外发布后造成的不良影响。

审核设置配置

更多审核说明见文档审核设置

云数据库RDS配置

  1. RDS白名单配置:白名单设置
  2. RDS账号创建

该账号用于登录数据库使用,主要用在后续程序代码里面进行创建数据库连接和后续登录数据库控制台进行表结构创建和数据库初始化使用,请注意保管好用户名密码。

进入管理界面,在左侧导航栏中选择“账号管理”,单击创建账号,设置参数(数据库账号,账号类型,密码,确认密码)

RDS账号管理

一般类型选择选普通账号类型,授权数据库如果没有可以暂时不选。更多说明参见创建账号

  1. 数据库创建进入管理界面,在左侧导航栏中选择“数据库管理”,单击右上角的创建数据库,出现如图所示界面:

数据库创建

关键字段说明:支持字符集:推荐选择utf8mb4,因为后续需要支持emoji表情。授权账号:选择你刚刚创建的那个账号。账号类型:一般在程序中使用需要有读写权限。

  1. 初始化数据库进入管理界面,在左侧导航栏中选择“基本信息”,在主界面中点击“登录数据库”,出现如图所示界面:登录界面

选择相应的实例链接地址,使用你刚才创建的RDS账号登录数据库dms系统进行表的创建和数据初始化;

  • 创建表建表语句在工程sql文件夹中,地址如下项目根目录下可以找到建表的sql文件:./sql/appserver_create_table.sql

  • 初始化表数据:控制台的管理员账号创建

  1. insert into `console_userinfo`(`id`,`user_id`,`user_name`,`avatar_url`,`password`,`remark`)
  2. values(1,'12351232334','admin','','12345678','管理员');

user_id,user_name,avatar_url,password可以根据自己需求进行更改

阿里云RAM账户配置

RAM (Resource Access Management) 是阿里云为客户提供的用户身份管理与资源访问控制服务。使用 RAM,您可以创建、管理 RAM 用户(比如员工、系统或应用程序),并可以控制这些 RAM 用户对资源的操作权限。当您的企业存在多用户协同操作资源时,使用 RAM 可以让您避免与其他用户共享云账号密钥,按需为用户分配最小权限,从而降低企业信息安全风险。阿里云几乎所有的对外服务都必须要使用RAM,阿里云STS (Security Token Service) 是为阿里云账号(或RAM用户)提供短期访问权限管理的云服务。通过STS,您可以为联盟用户(您的本地账号系统所管理的用户)颁发一个自定义时效和访问权限的访问凭证。联盟用户可以使用STS短期访问凭证直接调用阿里云服务API,或登录阿里云管理控制台操作被授权访问的资源。趣视频解决方案使用STS作为访问凭证。RAM 用户vod需要添加VOD服务的全部权限AliyunVODFullAccess。更多详细配置请参考STS临时授权访问

快速开始

源码下载

趣视频AppServer源码下载链接

项目说明

该项目主要为客户端提供接口支持,整理数据逻辑,项目结构分为:控制层,dao层,service层,持久层。

项目说明

注意:源代码涉及到部分服务需要替换数据库,ACCESSKEY_ID、ACCESSKEY_SECRET以及用户开通服务配置成功的参数,常量等信息,具体参考AppServer工程配置。

AppServer工程配置

数据库配置

开发者请务必保证已开通云数据库RDS服务,创建好实例的账号密码,完成之后您需要替换源代码文件中数据相关配置,具体见/sdk-api/src/main/resources/application.properties文件.

  1. #DATABASE(创建完数据库时,登录数据库的数据源引擎,用户名,密码,可以参见上图步骤中的值)
  2. spring.datasource.url = jdbc:mysql://{dburl}:3306/{dbname}?useSSL=false&useUnicode=true&characterEncoding=UTF-8
  3. spring.datasource.username = <# RDS数据库用户名 >
  4. spring.datasource.password = <# RDS数据库密码 >

{dburl}可以在RDS实例管理页面-基本信息-内网地址找到,端口号默认都是3306;username和password为之前创建的RDS账号。{dbname}为之前RDS配置中创建的数据库名字。

VOD相关配置

开发者请务必保证已开通视频点播服务,创建好实例的账号密码,完成之后您需要替换源代码文件中相关配置,具体见/sdk-api/src/main/resources/application.properties配置文件。

  1. #transcoding template ID
  2. TEMPLATEGROUP_ID = <# 转码id >
  3. TAB_TEMPLATEGROUP_ID = <# 窄带高清转码id >
  4. #domain name
  5. DOMAIN_NAME = <# 域名 http://xxx.com/ >
  6. AVATAR_DOMAIN_NAME = <# 头像域名 http://live-appserver-sh.alivecdn.com/ >
  7. VOD_REGIONID = cn-shanghai
  8. CALLBACK_PRIVETEKEY = <# 回调鉴权密钥 >
  9. CALLBACK_NAME = <# 回调地址 http://ip:8080/vodcallback/callback >
  10. #for VOD services policy
  11. policy = {"Version": "1", "Statement": [ {"Action": ["vod:*"], "Resource": ["*" ],"Effect": "Allow"}]}

注意:国内用户配置VOD_REGIONID时,趣视频默认region是cn-shanghai,其他服务开通,建议同一个区域,海外用户可以根据自身情况修改成对应的region。

STS配置与云上应用的动态身份及授权

开发者请务必保证已开通RAM(访问控制)服务,且已经参考STS临时授权访问并且设置完成,得到相应值,完成之后您需要替换源代码文件中相关配置,同时通过 RAM 进行动态身份与授权管理(参考动态身份与授权 ),具体见/sdk-api/src/main/resources/application.properties文件进行常量配置替换参数 REGION_CN_HANGZHOU,STS_API_VERSION,roleArn,roleSessionName,roleName

  1. #ak information
  2. REGION_CN_HANGZHOU = cn-hangzhou
  3. STS_API_VERSION = 2015-04-01
  4. roleArn = <# 阿里云资源名称 >
  5. roleSessionName = <# 临时Token的会话名称 >
  6. roleName = <# 角色名称 >

服务打包编译

编译打包

命令行切换到项目所在磁盘的根目录执行命令:

  1. mvn clean package -Dmaven.test.skip=true

编译打包如上图所示,出现“BUILD SUCCESS”则打包成功,在target/目录下可以找到 “sdk-api-0.0.1-SNAPSHOT.jar”文件。

部署

部署到服务器:上传jar包到之前购买的ECS上,将jar放在当前用户目录下执行下面命令,可以将服务后台启动起来

  1. nohup java -jar sdk-api.jar &

部署

访问工程

1.访问接口端口默认为8080,通过ip可以直接访问到工程中的接口。示例接口:http://{you server ip}:8080/demo/getSts

  1. @RequestMapping(value = "/demo/getSts", method = RequestMethod.GET)
  2. @ResponseBody
  3. public ResponseResult getSts() throws Exception {
  4. String traceId = TraceIdContext.ctx.get().getTraceId();
  5. LOG.info("traceId: {} ",traceId);
  6. ResponseResult result = new ResponseResult(traceId);
  7. Map<String, String> stsMap = new HashMap<String, String>(4);
  8. try {
  9. stsMap.put("expiration", AkUtil.getAkInfo().getString("Expiration"));
  10. stsMap.put("accessKeyId", AkUtil.getAkInfo().getString("AccessKeyId"));
  11. stsMap.put("accessKeySecret", AkUtil.getAkInfo().getString("AccessKeySecret"));
  12. stsMap.put("securityToken", AkUtil.getAkInfo().getString("SecurityToken"));
  13. result.setData(stsMap);
  14. } catch (ClientException e) {
  15. result.setResult("false");
  16. result.setCode(ConstanData.INTERNAL_SERVER_ERROR);
  17. result.setMessage("业务异常");
  18. result.setData(null);
  19. LOG.error("--- 获取STS异常", e);
  20. }
  21. return result;
  22. }

返回结果:

  1. {
  2. "result": "true",
  3. "requestId": "05afbda6-2c7c-43be-bb66-bd85e50914ee",
  4. "message": "",
  5. "code": "200",
  6. "data": {
  7. "accessKeyId": "STS.NHcwHdkzNZXV78f5LXsAtBjrj",
  8. "securityToken": "CAISiwJ1q6Ft5B2yfSjIr4vWPPLQhqVv7Zq9NR7X0UwNf85Yra/ZiDz2IHlKdHBuCeoWs/QylWxU5voblrRtTtpfTEmBbI5t4MpVqhrwPtHTspGu/OEchIG5FDBW4eoHHoqADd/iRfbxJ92PCTmd5AIRrJL+cTK9JS/HVbSClZ9gaPkOQwC8dkAoLdxKJwxk2qR4XDmrQpTLCBPxhXfKB0dFoxd1jXgFiZ6y2cqB8BHT/jaYo603392oesP9M5UxZ8wjCYnujLJMG/CfgHIK2X9j77xriaFIwzDDs+yGDkNZixf8aLOKooQxfFUpO/hnSvIY/KSlj5pxvu3NnMH7xhNKePtSVynP9kh1DXtxrYkagAEZuvLVwHxAb2PA5kSr/u9Hyt0iEqW1XSCcEMJ+oxEAEwocUHqKQRGzQJn0U1uxyPveM5GYElUcm/9Os7l546j8moMjUIAkhJ2Rl1Ty8KLHyHzbNmZLlZ+lUFW2l0NWTXWbO8ZWyW90tYqjXqKExoKGf6h9HBTMVfXrWia+N1RtTw==",
  9. "expiration": "2019-05-10T16:15:17Z",
  10. "accessKeySecret": "5oeqKaimw6Bi6z5uiPDn357to9MAkMJZRS5mZGrD8ceM"
  11. }
  12. }

2.访问管理控制台 要访问控制台必须打包编译前端文件,将域名或者{you server ip}更改文件/sdk-api/video-admin/vue.config.js中publicPath,最后通过访问页面:http://{you server ip}:8080/resource/index.html#/login

  1. - 默认账号密码是:admin/12345678

其他

1.说明:8080端口号修改:在Spring Boot项目中Application.java文件中可以修改启动端口号。

  1. public void customize(ConfigurableEmbeddedServletContainer container) {
  2. container.setPort(8080);
  3. }

{ip}: 为ECS的外网ip,可以从ECS控制台上获取,如果你有域名也可以通过域名A解析到该IP后用域名进行访问。

示例:http://{ip}:{port}/ 为后续调动的Endpoint

  1. 查看日志通过命令查看日志
    1. tail -f nohup.out
    日志

管理后台前端页面配置

前端源码位于工程根目录的video-admin文件(../video-admin)要访问前端页面需配置pom.xml中resources标签下,targetPath中的文件夹名称,改文件夹存放的是前端源码的打包文件(具体可以参见“控制台源码集成说明”文档)。

注意事项

  • 目前趣视频用到的点播SDK至少需要使用2.12.0及以上版本,java-core与aliyun-java-sdk-core至少需要使用4.3.3及以上版本

  • 配置域名或者ip的时候,应根据实际情况填写http或者https的前缀,避免没开通https就添加https

  • 配置application.properties文件时,需要注意几个参数,CALLBACK_PRIVETEKEY为鉴权密钥,跟控制台中设置要一致,CALLBACK_NAME为回调地址,AVATAR_DOMAIN_NAME为用户头像域名地址,AVATAR_URL为用户url,只需要用逗号隔开,就可以配置多个url(例如:AVATAR_DOMAIN_NAME = http://xxx.com ,AVATAR_URL = heads/01.png,heads/02.png),AUDIT_SETTINGS_FLAG为审核方式(on表示先审后发,off表示先发后审)。

关键业务逻辑说明

视频发布逻辑

客户端上传视频,同时异步提交首帧截图、审核截图(8张视频截图)作业和审核作业,点播服务进行视频截图和审核,视频进入截图和审核阶段。当审核完成,返回审核结果,app server接收回调完成结果,在结果中根据返回类型和返回截图数量,区分审核作业,首帧截图作业和多张视频截图作业,若是审核作业,则更改审核状态,若是首帧截图回调,则更改视频库中的首帧数据,若为多张视频截图,则需要把截图数据(图片,用户id)插入截图表中。)插入截图表中。

视频截图完成回调

提交截图作业后,会产生截图完成时间通知,后台可以接收事件的内容视频截图完成回调事件。在当前项目中,总共提交了两次截图作业,分别是单张视频截图作业(用于取首帧,即视频的播放前第一帧图片),以及多张视频截图作业(用户控制台进行浏览查看)。在截图完成回调的方法中,根据返回的数据中,先判断SubType,当SubType为SpecifiedTime时,就是正常截图,反之不是,再判断status,若为success,表示截图成功,根据SnapshotInfos的json数组里元素条数,如果是多条则为多张截图作业。若是多张截图,则将截图保存到截图表中,若为单张,则更新视频表(vod_videos)的截图状态为成功,并把该图片更行到表中的首帧。

视频审核完成回调

提交审核作业后,会产生审核完成事件通知,后台可以接收事件的内容审核完成回调事件。在后台的审核完成回调方法中,根据status判断审核是否成功,若审核成功,则再判断Data中Suggestion信息,当Suggestion为pass时,审核结果表示正常,更改审核状态为成功,并直接调用人工审核方法,并提交非窄带高清转码作业,当Suggestion为block时,审核结果表示违规,更改审核状态为失败,当Suggestion为review时,审核结果表示待人工评审,更改审核状态为待审核。若审核失败,更改状态为审核失败。

转码完成回调

提交转码作业后,会产生转码完成事件通知,后台可以接收事件的内容转码完成回调事件。在后台转码完成的方法中,根据status判断转码是否成功,若为succes,则更改转码状态为成功,同时将转码后的播放地址fileurl和videoId存入转码表中,若失败,则更改转码状态为失败。

时序图: 趣视频时序