所有文档

          智能小视频 Smartsmallvideo

          后端服务集成说明

          控制台源码集成说明

          项目说明

          本项目是短视频管理后台web前端项目,用于直观地查看和管理用户信息及视频。包括预览视频,用户信息管理,视频管理等功能。使用 vue-cli 3 构建,vue-cli 选择的是Babel, Router, Vuex, CSS Pre-processors, Linter 配置。

          环境说明

          Node.js > 10.15.0

          Linux/Mac: 如果已有Node.js环境,并且无符合要求的Node.js版本: 推荐使用 n 模块添加新版本Node.js.

                  sudo npm -g n
                  n 10.15.0
                  n (选择刚安装的版本)
                  sh web_build.sh (生成前端静态资源)

          如果没有Node.js环境:

              sh web_env.sh (运行项目根目录的 web_env.sh 脚本)
              sh web_build.sh  (生成前端静态资源)
              

          Windows: 下载符合条件版本安装包/采用版本管理工具安装

          主要技术栈

          主要技术栈使用:

          vue 前端 MVVM 框架
          vue-router 前端 vue 路由框架
          Element-UI UI框架
          axios 基于 promise 的 HTTP 库
          百度云视频播放器 查看Demo

          短视频控制台源码和短视频AppServer源码在同一个文件夹中,所以要先下载 短视频AppServer源码,下载完源码之后,短视频控制台前端代码在 fe_source 文件夹中,fe_source 便是短视频控制台前端代码的工作目录,以下的命令都要进入到 fe_source 目录执行。

          功能说明

          主要功能有如下:

          • 用户管理,用户信息查看,用户上传视频预览
          • 视频管理,视频封禁,预览等

          目录结构说明

          下载源码之后,打开 fe_source 文件夹,fe_source 便是短视频控制台前端的工作目录。以下是 fe_source 的目录结构:

          ├── node_modules                  // node 依赖安装目录, 执行 npm install 之后各种依赖会安装在这儿
          ├── dist                          // 打包之后的文件目录  
          ├── public                        
          │   ├── favicon.ico               
          │   └── index.html                // 网页主入口, 在这儿引用 cdn 等在线 js 和 css
          ├── src                           // 业务逻辑以及 Vue 组件目录
          │   ├── api                       // 接口相关信息 集中写了所有AJAX请求
          │   │   ├── client.js             
          │   │   └── config.js             // 配置接口最终访问地址
          │   ├── assets                    // 放置一些静态资源 css, images, fonts 放置在这儿
          │   │   ├── images
          │   │   └── scss
          │   ├── components                // vue 组件目录
          │   │   └── HelloWorld.vue        // 可复用组件
          │   ├── common                    // 公共目录 
          │   │   ├── utils.js              // 公共方法
          │   │   └── enums.json            // 一些状态的枚举变量值
          │   ├── plugins                   // 插件目录
          │   │   └── elements.js           // 按需加载ElementUI 组件
          │   ├── views                     // vue-router 对应的渲染组件所在目录
          │   │   ├── userDatail.vue        // 用户详情对应渲染组件
          │   │   ├── userManage.vue        // 用户管理对应渲染组件
          │   │   └── videoManage.vue       // 视频管理对应渲染组件
          │   ├── App.vue                   // 渲染主组件
          │   ├── main.js                   // 主入口文件
          │   └── router.js                 // vue-router 路由配置文件
          ├── .browserslistrc               // 浏览器兼容列表
          ├── .gitignore
          ├── babel.config.js               // babel 配置文件
          ├── package-lock.json
          ├── package.json                  // 包说明文件, 包括各种依赖, 作者, 描述等
          ├── postcss.config.js             // postcss 配置文件, 加上 css 的厂商前缀
          ├── README.md
          ├── README_zh.md
          └── vue.config.js                 // vue 配置文件

          编译发布

          编译

          首先安装好环境之后,打开命令行工具,切换到项目目录即 fe_source 下,安装项目依赖,执行:

          npm install 修改 vue.config.js 中的配置将 proxy 设置成您的后端接口地址,完整的配置如下:

          module.exports = {
            // 设置前端开发时的代理
            devServer: {
              proxy: 'https://example.com',    // 替换成你的接口域名地址, 后面不要加 '/'
            },
            productionSourceMap: false,
            // 设置生产环境和开发环境时的静态资源路径
            publicPath: process.env.NODE_ENV === 'production'
            ? 'https://example.com/resource/'
            : '/',
          }

          安装依赖完毕并修改配置之后,执行:

          npm run serve 这个命令会在本地开启一个服务,默认地址为 http://localhost:8080/ 在浏览器中打开,就能预览项目。

          发布

          --切换到项目目录 fe_source 下,执行打包命令:npm run build
          --或者执行fe_source同级的 web_build.sh 脚本
          生产环境即发布时 vue.config.js 中 publicPath 要设置成为您放置静态资源的地址,例如本项目后端使用的 spring boot 框架, 静态资源目录为 webapp/resource/,那么 vue.config.js 中的 publicPath 配置如下:
          module.exports = {
            // 设置前端开发时的代理
            devServer: {
              proxy: 'https://example.com',    // 替换成你的接口域名地址, 后面不要加 '/'
            },
            productionSourceMap: false,
            // 设置生产环境和开发环境时的静态资源路径
            publicPath: process.env.NODE_ENV === 'production'
              ? 'https://example.com/resource/'
              : '/',
          }

          实际上就是执行 vue-cli 封装的 webpack 来进行打包,webpack 的个性化设置可以在 vue.config.js 中设置,配置文档可以查看Vue-cli 配置参考。

          执行完打包命令之后,项目根目录会生成打包文件,全部放置在 dist/ 目录中,这个目录下的文件就是需要放置到 webapp/resource 中的文件,其中的文件目录结构为:

          ├──dist
             ├── css
             │   ├── app.[hash].css             // vue 组件中的 css, 以及自定义的 css
             │   └── chunk-vendors.[hash].css   // 依赖中所引入的 css
             ├── fonts
             ├── img
             ├── js
             │   ├── app.[hash].css             // vue 组件中的 js, 以及自定义的 js
             │   └── chunk-vendors.[hash].css   // 依赖中所引入的 js
             ├── favicon.ico
             └── index.

          其中 webpack 已经帮我们把依赖中的 css, js 和自己写的 css, js 抽离并拆分成了不同的文件,这样不仅能加快页面响应速度,另外在迭代时,依赖没有更改的话我们只需要更新 app.[hash].js 和 app.[hash].css。

          最后,将 dist 中的文件放置到服务器中。

          服务器发布

          实质上就是在服务器中放置静态资源,例如本项目后端使用的是 spring boot 框架,具体的可以查看 短视频AppServer文档。最后在 dist/ 目录中的文件放到 resource/static 文件夹中,输入 <你的域名地址>/index.html 访问成功,说明部署成功!

          Project setup

          npm install

          Compiles and hot-reloads for development

          npm run serve

          Compiles and minifies for production

          npm run build

          Run your tests

          npm run test

          Lints and fixes files

          npm run lint

          Customize configuration

          See Configuration Reference.

          服务端源码集成说明

          项目说明

          本项目是智能小视频APPserver项目,集成了用户管理(注册、登录)、视频处理(上传、转码、截图)、播放管理(feed查询)、接口鉴权、 console管理(console支持用户查询、用户封禁/解封,支持媒资查询、视频封禁、解封等)等功能。 使用JAVA编写,依赖Springboot、Springdata jpa、Springdata redis等框架,使用MAVEN编译构建。 (如果是直接使用百度云云市场镜像启动服务可以直接看《镜像中服务运行》章节)

          编译环境说明

              jdk >= 1.8.0_*
              mvn >= Maven 3
              Mac/Linux/Windows:
                可以使用IDE如IDEA内嵌的Maven进行编译构建
          
              若果没有IDE集成的Maven环境,可以按照以下流程安装Maven
                1、Maven下载:wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz 
                2、Maven解压/安装:tar vxf apache-maven-3.6.1-bin.tar.gz

          主要技术栈

          主要技术栈使用: JAVA jdk1.8 Springboot1.4.2 Springdata jpa Springdata redis(基于Lettuce)

          功能说明

          主要功能有如下:

          • 用户管理:支持用户注册、登录、查询指定用户信息
          • 视频处理:支持用户上传文件、视频转码截图
          • 播放管理:支持移动端查询feed、查询指定视频
          • 接口鉴权:支持对端上所有接口添加鉴权
          • console管理:支持所有所有用户信息查询及封禁解封功能;支持所有媒资查询及封禁解封功能。

          目录结构说明

          下载源码之后,打开 bce-shortvideo-server,该目录便是APPserve的工作目录。采用Maven多模块构建工程结构:

          ├── bce-shortvideo-server                             // 工程根目录
          │   ├── bce-shortvideo-cloudsdk                       // 百度云集成相关sdk功能模块
          │   ├── bce-shortvideo-common                         // 公共组件模块:包含注解、全局配置类、枚举、异常、工具类等
          │   ├── bce-shortvideo-console                        // 控制台业务逻辑模块
          │   ├── bce-shortvideo-entity                         // 持久化实体模块
          │   ├── bce-shortvideo-media                          // 视频处理模块
          │   ├── bce-shortvideo-platform                       // 启动类模块
          │   └── bce-shortvideo-user                           // 用户管理模块
          ├── .gitignore
          ├── pom.xml                                           // 工程pom配置文件
          ├── postBuild.sh                                      // 工程编译构建脚本
          ├── web_build.sh                                      // fe资源编译构建脚本
          ├── web_env.sh                                        // fe资源编译环境脚本
          └── README.md                                         // readme 

          前端静态资源预发布

          console的前端静态资源文件也会通过打入上述bce-shortvideo.jar包中,具体的为在配置好前端资源编译构建环境后执行web_build.sh脚本, 前端静态资源文件会被拷贝到启动模块bce-shortvideo-platform的resource/static文件夹中。

          项目整体发布

          1、当前源码的编译依赖jdk和maven,详情参考《环境说明》章节搭建编译环境。 2、jdk和maven安装好后修改工程编译构建脚本postBuild.sh中的JAVA_HOME和MAVEN_HOME路径 3、安装依赖完毕并修改配置之后,进入工程根目录bce-shortvideo-server即postBuild.sh文件所在文件夹执行: bash ./postBuild.sh编译打包 4、步骤"3"中执行结果会在工程根目录bce-shortvideo-server生成目标文件夹output,这个目录中内容是APPserver服务运行相关的所有文件,其中目录结构为:

          ├──output
             ├── bin
             │   ├── bce-shortvideo.jar                         // Maven编译打包生成的jar文件
             │   ├── start.sh                                   // 服务启动脚本
             │   └── stop.sh                                    // 服务停止脚本
             ├── log                                            // 日志文件目录
             └── conf 
                 ├── application.yml                            // 服务配置文件
                 ├── logback-access.xml                         // logback日志access配置
                 └── logback.xml                                // logback日志配置

          服务配置说明

          当前服务的业务配置文件为application.yml,其中关键项说明如下:

          server-host:                                        服务host
          server.port:                                        服务端口
          spring.jpa:                                         springdata jpa的配置
          spring.datasource:                                  spring数据源的配置,我们当前使用druid数据源
          spring.cache:                                       spring缓存配置
          spring.redis:                                       springdata redis的配置
          
          bce.cloud.accessKey:                                百度云账号ak,需要替换为用户自己账号
          bce.cloud.secretKey:                                百度云账号sk,需要替换为用户自己账号
          bce.cloud.sts.endpoint:                             百度云使用获取临时token的服务地址配置,不可更改
          bce.cloud.bos.endpoint:                             百度云对象存储服务地址配置,不可更改
          bce.cloud.vod.endpoint:                             百度云点播服务地址配置,不可更改
          bce.cloud.vod.preset-group:                         百度云点播转码模板组配置,需要开通百度云VCR服务并且进行相关配置,且替换为用户自己实际配置的模板组名称
          bce.cloud.vcr:                                      百度云智能审核服务的配置,无需更改
          
          shortVideo.ssl.enable: false                         后端服务是否开启ssl,当前服务可以使用nginx作为代理服务器来访问,因此该配置设置为false,ssl的配置可以在nginx上添加
          shortVideo.callback.positive.mode: false             后端服务查询VOD处理结果的方式,推荐设置为false,即为VOD回调方式
          shortVideo.aes.secret.key: 123456                    后端服务调用AES加密key,根据用户需求与移动端协作配置对某些参数使用AES加解密
          shortVideo.vcr.active: false                         后端服务开启VCR智能视频审核的开关,当前版本服务端业务逻辑已经支持VCR,但是移动端和console暂未支持,因此该参数暂设置为false
          shortVideo.vcr.notification: shortvideo_addvcr       后端服务开启VCR智能视频审核的通知模板名称,需要开通百度云VCR服务并且进行相关配置,由于前一个参数暂无开启VCR,此参数可以不配置
          shortVideo.vcr.callback.expire: 60                   后端服务开启VCR智能视频审核的通知的超时时间,由于前一个参数暂无开启VCR,此参数可以不配置
          shortVideo.signature:                                后端服务接口鉴权的相关配置
            enable: false
            encryptKey: 123456789
            expired:
              second: 1800
          shortVideo.login:                                    后端服务配置移动端用户登录超时的时间
            timeout: 43200

          数据库配置

          数据库脚本所在位置为bce-shortvideo-server/bce-shortvideo-platform/src/main/resources/db/schema_shortvideo_mysql.sql,在用户自己的数据库服务器中创建数据库multimedia_shortvideo_new,且导入 该sql文件。更改《服务配置说明》章节中配置文件application.yml中数据库连接地址。

          项目部署及运行

          将《项目整体发布》章节的编译产出文件加output中内容拷贝到服务待部署机器指定目录,该机器保证有与《编译环境说明》章节相同的jdk环境才能运行服务。 服务启动:进入bin目录执行bash start.sh

          镜像中服务运行

          前提:当前章节的前提是用户已经在百度云云市场购买智能小视频镜像且通过购买配置BCC进入镜像中操作系统。

          镜像环境说明:

          1、镜像关键目录如下:

          ├──/home/work
             ├── shortvideo                                    // 《项目整体发布》章节中output文件内容存放的目录
             │   ├── bin                                      
             │   ├── conf                                     
             │   └── log
             ├── all_in_one_start.sh                           // 一键启动脚本                                       
             ├── nginx_install                                 // 代理服务器nginx安装目录
             └── packages                                      // 服务依赖第三方应用如mysql、redis、nginx、jdk等的安装包

          2、修改用户服务配置。shortvideo目录详情请参考《项目整体发布》章节,服务配置请参考《服务配置说明》章节

          3、nginx作为代理服务器配置

          3-1 nginx配置域名访问:修改nginx.conf配置文件中的server_name参数为实际域名,且配置该域名到服务器ip地址的CNAME。

          3-2 nginx配置ssl支持https协议:修改nginx.conf配置文件中的ssl_certificate、ssl_certificate_key为实际的证书路径。

          3-3 nginx配置回源:修改upstream.conf配置文件中的server为实际回源url。

          4、一键启动服务 执行bash all_in_one_start.sh即可启动APPserver所涉及到的mysql、redis、小视频服务、nginx等服务。

          控制台接口文档

          状态码

          接口返回信息

          public enum ResponseEnum {
              EC_OK("0000", "OK"),
              EC_BAD_REQUEST("0001", "Bad Request"),
              EC_SIGN_ERROR("1000", "Invalid Token"),
              EC_DATABASE_ERROR("1001", "Internal Server Error(db error)"),
              EC_UPDATE_ERROR("1002", "update error"),
              EC_INVALID_PARAM("1003", "invalid param"),
              EC_MEDIA_NOT_EXIST("2005", "media not exist"),
              EC_SYSTEM_INVALID_JSON_FORMAT("3001", "http post body is empty or invalid json format in post body from client!"),
          }

          视频封禁状态码

              public enum VideoPublishStatus {
              DEFALULT,
              PUBLISHED,
              BANNED
          }

          文件类型

              public enum FileTypeEnum {
              VIDEO(0),
              USER_IMG(1),
              VIDEO_IMG(2)
          }

          用户账号状态

          public enum AccountStatus {
              DEFAULT,
              NORMAL,
              BANNED
          }

          用户性别

              public enum  Sex {
              FEMALE(0),
              MALE(1),
              UN_KNOWN(2)
          }

          用户账号类型

          public enum AccountType {
              APP,
              TEL,
              WERXIN
          }

          用户管理

          一、分页查询用户列表

          功能说明 接口名称 请求方式 请求方法 请求地址
          分页查询用户列表 pageQueringUsers HTTP GET /internal/v1/user

          参数说明

          参数名 类型 必填 描述 默认值 示例
          id_or_name string 用户全局唯一id或昵称 0123456789
          account_status int 用户账号状态 详见AccountStatus枚举
          index int 分页查询页数 0(默认为0)
          count int 分页查询每页数量 10(默认为10)

          请求示例

          curl http://127.0.0.1:9999/internal/v1/user?id_or_name=test&account_status=1&index=0&count=10

          接口应答

          参数名 类型 描述 示例
          code string 返回码 0000
          message string 返回消息
          data object 返回数据
          data.users list 用户列表
          data.users.user_id string 用户id
          data.users.nickname string 用户昵称
          data.users.tel long 手机号
          data.users.sex int 用户性别(见Sex枚举)
          data.users.account_type int 账号类型(见AccountType枚举)
          data.users.total_video_count long 上传视频总数
          data.users.total_play_count long 总播放数量
          data.users.total_star_count long 总点赞数量
          data.users.create_time string 创建时间
          data.users.account_status int 用户账号状态(见AccountStatus枚举)

          应答示例

              {
                 "code": "0000", 
                 "message": "", 
          	   "data": {
          		  "users":[
          			{
          				"user_id":"xxx",
          				"nickname":"xiaoli",
          				"tel":11122233344,
          				"sex:0,
          				...
          			}
          		  ]
          	   }
              }

          二、查询指定用户详情:

          功能说明 接口名称 请求方式 请求方法 请求地址
          用户详情 getUserDetail HTTP GET /internal/v1/user/{userId}

          参数说明

          参数名 类型 必填 描述 默认值 示例
          user_id string 用户id

          请求示例

          curl http://127.0.0.1:9999/internal/v1/user/4411424069714944

          接口应答

          参数名 类型 描述 示例
          code string 返回码 0000
          message string 返回消息
          data object 返回数据
          data.user_id string 用户id
          data.nickname string 用户昵称
          data.avatar string 用户头像地址
          data.sex int 用户性别
          data.age int 年龄
          data.location string 地点
          data.description string 签名
          data.videos list 视频列表
          data.videos.front_cover string 视频封面
          data.videos.play_url string 视频播放地址
          data.videos.ratio String 视频宽高比 4:3

          应答示例

              {
                 "code": "0000",  
                 "message": "OK",
          	   "data": {
                    "user_id":"id",
          		  "videos":[
          			{
          				"front_cover":"xxx",
          				"play_url":"xxx",
          				"ratio":"4:3"
          			},
          			...
          		]
          	   }
              }

          三、封禁/解封用户

          功能说明 接口名称 请求方式 请求方法 请求地址
          用户封禁 banUser HTTP PUT /internal/v1/user/{userId}?block
          用户解封 unbanUser HTTP PUT /internal/v1/user/{userId}?unblock

          参数说明

          参数名 类型 必填 描述 默认值 示例
          user_id string 用户id user001

          请求示例

          curl -X PUT -i 'http://127.0.0.1:9999/internal/v1/user/{userId}?block'

          接口应答

          参数名 类型 描述 示例
          code number 返回码 200
          message string 返回消息

          应答示例

              {
                 "code": "0000",
                 "message": "OK"
              }

          视频管理

          一、分页查询视频信息

          功能说明 接口名称 请求方式 请求方法 请求地址
          分页查询视频信息 pageQueringVideos HTTP GET /internal/v1/video

          参数说明

          参数名 类型 必填 描述 默认值 示例
          start_time long 查询开始时间ms
          end_time long 查询结束时间ms
          video_id_or_name string 用户id or name user001
          video_status int 视频状态 见上述VideoStatus枚举
          sort_type string 按照创建时间排序类型 DESC,ASC
          index int 页索引
          count int 每页数量

          请求示例

          curl http://127.0.0.1:9999/internal/v1/video?start_time=1558506065000&end_time=1558506098000&video_id_or_name=xiaoli&video_status=0&sort_type=DESC&index=0&count=10

          接口应答

          参数名 类型 描述 示例
          code string 返回码 0000
          message string 返回消息
          data object 返回数据
          data.videos list 视频列表
          data.videos.video_id string 视频id
          data.videos.video_name string 视频名称
          data.videos.file_type int 文件类型
          data.videos.video_status int 视频状态发布/封禁
          data.videos.video_url string 视频播放地址
          data.videos.create_time string 创建时间
          data.videos.front_cover string 视频封面

          应答示例

              {
                 "code": "0000",
                 "message": "OK",
                 "data": {
          		  "videos":[
          			{
          				"video_id":"11112222111",
          				...
          			}
          		  ]
          		  
                 }
              }

          二、查询指定视频id的详情

          功能说明 接口名称 请求方式 请求方法 请求地址
          视频详情 getVideoDetail HTTP GET /internal/v1/video/{videoId}

          参数说明

          参数名 类型 必填 描述 默认值 示例
          video_id string 视频id videoId

          请求示例

          curl http://127.0.0.1:9999/internal/v1/video/4411424069714944

          接口应答

          参数名 类型 描述 示例
          code string 返回码 0000
          message string 返回消息
          data object 返回数据
          data.title string 标题
          data.classify string 分类
          data.label sting 标签
          data.introduction string 简介
          data.front_cover string 视频封面
          data.play_url string 视频地址
          data.author string 上传者
          data.create_time string 上传时间

          应答示例

              {
                 "code": "0000",
                 "message": "OK",
          	   "data":{
          			"play_url":"http://xxxxx",
          			...
          		}
              }

          三、视频封禁/解封

          功能说明 接口名称 请求方式 请求方法 请求地址
          视频封禁/解封 banVideo HTTP PUT /internal/v1/video/{videoId}?block
          视频封禁/解封 unbanVideo HTTP PUT /internal/v1/video/{videoId}?unblock

          参数说明

          参数名 类型 必填 描述 默认值 示例
          video_id string 视频id videoId

          请求示例

          curl -X PUT -i 'http://127.0.0.1:9999/internal/v1/video/{videoId}?block'

          接口应答

          参数名 类型 描述 示例
          code string 返回码 0000
          message string 返回消息

          应答示例

              {
                 "code": "0000",
                 "message": "OK"
              }

          服务端接口文档

          状态码

          接口返回

              public enum ResponseEnum {
              EC_OK("0000", "OK"),
              EC_BAD_REQUEST("0001", "Bad Request"),
              EC_SIGN_ERROR("1000", "Invalid Token"),
              EC_DATABASE_ERROR("1001", "Internal Server Error(db error)"),
              EC_UPDATE_ERROR("1002", "update error"),
              EC_INVALID_PARAM("1003", "invalid param"),
          	EC_USER_BANNED("2000", "user banned"),
              EC_USER_EXIST("2001", "user exist"),
              EC_USER_NOT_EXIST("2002", "user not exist"),
              EC_USER_PWD_ERROR("2003", "password error"),
              EC_USER_LOGIN_TIMEOUT("2004", "user login timeout"),
              EC_MEDIA_NOT_EXIST("2005", "media not exist"),
              EC_SYSTEM_INVALID_JSON_FORMAT("3001", "http post body is empty or invalid json format in post body from client!"),
              EC_SYSTEM_INVALID_PARA("3002", "request para error"),
              EC_SYSTEM_FREQUECY("3003", "frequency control");
          }

          处理状态码(内部)

              public enum VideoStatus {
              VS_UPLOAD_ING(10),
              VS_UPLOAD_SUCCESS(11),
              VS_UPLOAD_FAILED(12),
              VS_TRANSCODE_ING(21),
              VS_PUBLISHED(22),
              VS_TRANSCODE_FAILED(23),
              VS_BANNED(24);
          }

          资源可用状态码(外部)

              ResourceStatus:{
                  READY:0,        //视频处理完成
                  NOT_READY:1,    //等待视频处理
              }

          上传文件类型

              public enum FileTypeEnum {
              VIDEO(0),
              USER_IMG(1),
              VIDEO_IMG(2);
          }

          鉴权算法

          一、接口鉴权

          鉴权流程 = 预准备token + signature生成

          预准备token

          token = 可以使用云级别或者appId级别信息提前准备公钥私钥对(服务端生成并维护该信息列表),将公钥作为token返回给app拥有者;

          signature生成(dataMd5为uri+params拼接字符串且包含当前时间戳;服务端设置过期时间)

          signature = crypto.createHash("md5").update(token + dataMd5).digest("hex")
          public String createSignature(String url, String uId, Long currenTime) {
          
              URL urlObj = null;
              try {
                  urlObj = new URL(url);
                  String path = urlObj.getPath();
                  String currentHex = Long.toHexString(currenTime);
                  String toSignStr = null;
                  if (uId == null) {
                      toSignStr = String.format("%s%s%s", encryptKey, path, currentHex);
                  } else {
                      toSignStr = String.format("%s%s%s%s", encryptKey, path, uId, currentHex);
                  }
                  log.info("createSignature toSignStr : " + toSignStr);
                  String sign = md5ToLower(toSignStr);
                  log.info("createSignature sign : " + sign);
                  return sign;
              } catch (MalformedURLException | UnsupportedEncodingException | NoSuchAlgorithmException e) {
                  e.printStackTrace();
              }
              return null;
          }

          用户管理

          一、用户注册:

          功能说明 接口名称 请求方式 请求方法 请求地址
          注册 register HTTP POST /v1/user/register

          参数说明

          参数名 类型 必填 描述 默认值 示例
          name string 用户全局唯一名称 user001
          password string 密码 md5(password)

          请求示例

          接口应答

          参数名 类型 描述 示例
          code string 返回码 0000
          message string 返回消息
          data object 返回数据
          data.expire_time long 过期时间s

          应答示例

              {
                 "code": "0000", 
                 "message": "", 
          	   "data": {
          		  "expire_time":"11111"
          	   }
              }

          二、登录:

          功能说明 接口名称 请求方式 请求方法 请求地址
          用户登录 login HTTP POST /v1/user/login

          参数说明

          参数名 类型 必填 描述 默认值 示例
          name string 用户全局唯一名称 user001
          password string 密码 md5(password)

          请求示例

          接口应答

          参数名 类型 描述 示例
          code string 返回码 0000
          message string 返回消息
          data object 返回数据
          data.user_id string 用户id
          data.expire_time long 过期时间s

          应答示例

              {
                 "code": "0000",  
                 "message": "OK",
          	   "data": {
                    "user_id":"id",
          		  "expire_time":"11111"
          	   }
              }

          三、获取用户信息

          功能说明 接口名称 请求方式 请求方法 请求地址
          获取用户头像,昵称等信息 getInfo HTTP GET /v1/user/getInfo

          参数说明

          参数名 类型 必填 描述 默认值 示例
          user_id string 用户id,用来表示用户自己 user001
          video_id string 视频id,用来表示其他用户 videoId

          请求示例

          curl -d "user_id="id" /v1/user/getInfo

          接口应答

          参数名 类型 描述 示例
          code string 返回码 0000
          message string 返回消息
          data object 返回数据
          data.nickname string 昵称
          data.avatar string 头像访问地址
          data.sex integer 性别
          data.frontcover string 封面访问地址

          应答示例

              {
                 "code": "0000",
                 "message": "OK",
                 "data": {
                    "nickname":"xxx",
                    "avatar":"http://xxxx",
                    "sex":0 //0:male,1:female,-1:unknown
                    "frontcover":"http://xxxx",     //封面图url
                 }
              }

          媒资管理

          一、获取视频/图片上传参数

          功能说明 接口名称 请求方式 请求方法 请求地址
          获取上传参数 getUploadParam HTTP POST /v1/video/getUploadParam

          参数说明

          参数名 类型 必填 描述 默认值 示例
          user_id string 用户id user001
          file_id string 文件id test.mp4
          file_type int 文件类型 见上传文件类型枚举UploadFileType
          title string 标题(图片上传可以没有)
          location string 地理位置(图片上传可以没有)

          请求示例

          接口应答

          参数名 类型 描述 示例
          code string 返回码 0000
          message string 返回消息
          data object 返回数据
          data.video_id string 视频id
          data.bucket string bos种桶名
          data.bos_key string bos中的key
          data.signature string 签名参数

          应答示例

              {
                 "code": "0000",
                 "message": "OK",
                 "data": {
          		  "video_id":"videoId",
          		  "bucket":"testBucket",
          		  "bos_key":"path/file",
                    "signature":"xxx", //请求的点播签名
                 }
              }

          二、上传视频/文件结束

          功能说明 接口名称 请求方式 请求方法 请求地址
          移动端上传完通知 uploadFinish HTTP POST /v1/video/uploadFinish

          参数说明

          参数名 类型 必填 描述 默认值 示例
          user_id string 用户id user001
          video_id string 否(文件上传非必须,视频上传必需) 视频id videoId
          file_type int 文件类型 见上传文件类型枚举UploadFileType
          status int 文件上传状态 见视频处理状态枚举VideoStatus

          请求示例

          接口应答

          参数名 类型 描述 示例
          code string 返回码 0000
          message string 返回消息
          data object 返回数据
          data.img_url string 根据file_type返回用户资源图片url

          应答示例

              {
                 "code": "0000",
                 "message": "OK",
          	   "data":{
          			"img_url":"http://xxxxx"
          		}
              }

          三、分页获取视频列表(指定用户id)

          功能说明 接口名称 请求方式 请求方法 请求地址 排序方式
          拉取指定用户视频列表 getSpecificVideoList HTTP GET /v1/video/getSpecificVideoList 默认按照最新时间

          参数说明

          参数名 类型 必填 描述 默认值 示例
          user_id string 用户Id user_id
          video_id string 视频id videoId
          index number 页码 0 0
          count number 一页数量 10 10

          请求示例

          curl -d "user_id="id"&index=0&count=10" "/v1/video/getSpecificVideoList"

          接口应答

          参数名 类型 描述 示例
          code string 返回码 0000
          message string 返回消息
          data object 返回数据
          data.list array 视频列表
          data.list.n videoinfo 视频详细信息
          videoinfo
          参数名 类型 描述 示例
          videoId string 视频id xxx
          status integer 视频状态 0
          title string 视频标题
          front_cover string 视频封面
          location string 上传地理位置
          play_url string 播放地址
          create_time string 上传时间
          ratio string 宽高比
          duration long 视频时长(s)
          author authorinfo 作者信息
          authorinfo
          参数名 类型 描述 示例
          nick_name string 用户昵称
          avatar string 用户头像

          应答示例

              {
                 "code": "0000", 
                 "message": "OK",
                 "data": {
                    "list": [
                       {
          				"videoId":"xxx",
                          "status":0,
                          "title":"xxxx“,         //标题
                          "front_cover":"xxx",     //封面图url
                          "location":"xxx",       //地理位置
                          "play_url":"xxx",       //播放地址
                          "create_time":"xxxx-xx-xx xx:xx:xx",  //创建时间
          				"ratio":"4:3",
          				"duration":10,
          				"author":{
          					"nick_name":"xxx",     //昵称
          					"avatar":"xxx",          //头像url
          				}
                       }
                    ]
                 }
              }

          四、分页获取视频列表(所有用户)

          功能说明 接口名称 请求方式 请求方法 请求地址 排序方式
          拉取服务端视频列表 getVideoList HTTP GET /v1/video/getVideoList 默认按照最新时间

          参数说明

          参数名 类型 必填 描述 默认值 示例
          index number 页码 0 0
          count number 一页数量 10 10

          请求示例

          curl -d "index=0&count=10" "/v1/video/getVideoList"

          接口应答

          参数名 类型 描述 示例
          code string 返回码 0000
          message string 返回消息
          data object 返回数据
          data.list array 视频列表
          data.list.n videoinfo 视频详细信息
          videoinfo
          参数名 类型 描述 示例
          videoId string 视频id xxx
          status integer 视频状态 0
          title string 视频标题
          front_cover string 视频封面
          location string 上传地理位置
          play_url string 播放地址
          create_time string 上传时间
          ratio string 宽高比
          duration long 视频时长(s)
          author authorinfo 作者信息
          authorinfo
          参数名 类型 描述 示例
          user_id string 所属用户id
          nick_name string 用户昵称
          avatar string 用户头像

          应答示例(宽高)

              {
                 "code": "0000", 
                 "message": "OK",
                 "data": {
                    "list": [
                       {
          				"videoId":"xxx",
                          "status":0,
                          "title":"xxxx“,         //标题
                          "front_cover":"xxx",     //封面图url
                          "location":"xxx",       //地理位置
                          "play_url":"xxx",       //播放地址
                          "create_time":"xxxx-xx-xx xx:xx:xx",  //创建时间
          				"ratio":"4:3",
          				"duration":10,
          				"author":{
          					"user_id":"xxx",          //用户id
          					"nick_name":"xxx",     //昵称
          					"avatar":"xxx",          //头像url
          				}
                       }
                    ]
                 }
              }

          服务端数据库文档

          用户表

          use multimedia_shortvideo_new;
          DROP TABLE IF EXISTS `User`;
          CREATE TABLE `User` (
           `user_id` varchar(50) NOT NULL COMMENT '用户id',
           `password` varchar(255) NOT NULL COMMENT '用户密码',
           `nickname` varchar(100) NOT NULL COMMENT '用户昵称',
           `telephone` bigint(20) DEFAULT 0 COMMENT '手机号',
           `account_type` tinyint(4) DEFAULT 0 COMMENT '账号类型,默认为app账号',
           `account_status` tinyint(4) DEFAULT 0 COMMENT '账号状态,默认为正常',
           `sex` tinyint(4) DEFAULT 2 COMMENT '性别',
           `avatar` varchar(255) DEFAULT NULL COMMENT '头像',
           `front_cover` varchar(255) DEFAULT NULL COMMENT '用户封面',
           `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
           `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '登录更新时间',
           `expire_time` int(11) DEFAULT 0 COMMENT '登录超时日期(s)',
           `version` int(11) DEFAULT 0 COMMENT '内部使用, 乐观锁',
           PRIMARY KEY (`user_id`),
           UNIQUE KEY `nickname_idx` (`nickname`),
           KEY `account_status_idx` (`account_status`),
           KEY `create_time_idx` (`create_time`)
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息表';

          媒资表

          DROP TABLE IF EXISTS `Media`;
          CREATE TABLE `Media` (
           `media_id` varchar(50) NOT NULL COMMENT '媒资id',
           `sub_media_id` varchar(50) DEFAULT NULL COMMENT '子媒资id(转码模版对应)',
           `user_id` varchar(50) NOT NULL COMMENT '用户id',
           `file_id` varchar(100) NOT NULL COMMENT '文件名称',
           `title` varchar(255) DEFAULT NULL COMMENT '标题',
           `status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '内部状态',
           `review_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '审核状态',
           `front_cover` varchar(255) DEFAULT NULL COMMENT '封面',
           `location` varchar(128) DEFAULT NULL COMMENT '地理位置',
           `play_url_list` varchar(4096) DEFAULT NULL COMMENT '转码后播放列表',
           `thumbnail_list` varchar(4096) DEFAULT NULL COMMENT '缩略图列表',
           `play_count` int(11) DEFAULT 0 COMMENT '单个视频播放数量',
           `star_count` int(11) DEFAULT 0 COMMENT '单个视频点赞数量',
           `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
           `version` int(11) DEFAULT 0 COMMENT '内部使用, 乐观锁',
           PRIMARY KEY (`media_id`),
           KEY `subMediaId_idx` (`sub_media_id`),
           KEY `userId_idx` (`user_id`),
           KEY `status_idx` (`status`,`review_status`),
           KEY `create_time_idx` (`create_time`, `status`),
           KEY `file_id_idx` (`file_id`)
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='媒资信息表';

          token表

          DROP TABLE IF EXISTS `Token`;
          CREATE TABLE `Token` (
           `id` varchar(64) NOT NULL COMMENT 'id',
           `token` varchar(1024) DEFAULT NULL COMMENT 'sts密钥',
           `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '密钥更新时间',
           `expire_time_second` int(11) DEFAULT 0 COMMENT '超时日期(s)',
           `version` int(11) DEFAULT 0 COMMENT '内部使用, 乐观锁',
           PRIMARY KEY (`id`),
           KEY `expireTime_idx` (`expire_time_second`)
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='sts密钥信息表';

          审核表

          DROP TABLE IF EXISTS `media_review`;
          CREATE TABLE `media_review` (
           `media_id` varchar(50) NOT NULL COMMENT '用户id',
           `review_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '媒资审核状态',
           `vcr_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT 'vcr审核结果',
           `system_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '系统标注状态',
           `artificial_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '人工标注状态',
           `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
           `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
           `version` int(11) DEFAULT 0 COMMENT '内部使用, 乐观锁',
           PRIMARY KEY (`media_id`),
           KEY `create_time` (`create_time`)
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='媒资审核表';
          上一篇
          iOS短视频解决方案集成说明
          下一篇
          技术支持