# 概述 本项目为腾讯云小视频 APP 后台服务,采用 Nodejs 和 MySQL 搭建,提供了如下功能的演示: 1. 上传签名派发 2. 媒资管理 3. 内容审核 用户可以下载本项目源码,快速搭建自己的小视频后台服务。 # 准备 ## 帐号申请 申请[腾讯云](https://cloud.tencent.com/)帐号,获取[ API 密钥](https://console.cloud.tencent.com/cam/capi),得到 Appid、SecretId、SecretKey。 ## 环境准备 ### 安装 Nodejs 注意:nodejs 版本要求高于 8.x。 ``` curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash - sudo apt-get install -y nodejs ``` ### 安装 MySQL (mariadb) ``` sudo apt update sudo apt install mariadb-server sudo mysql --version sudo service mysql start ``` ### 初始化数据库 1. 在终端使用 root 帐号登录 MySQL: ``` sudo mysql -u root -p ``` 2. 创建小视频数据库用户 litvideo: ``` create user 'litvideo'@'localhost' identified by 'litvideo'; ``` 3. 创建小视频数据库 db_litvideo,并授权给小视频用户 litvideo: ``` create database db_litvideo default charset utf8 collate utf8_general_ci; grant all privileges on `db_litvideo`.* to 'litvideo'@'%' identified by 'litvideo'; ``` 4. 使用 litvideo,新建所需要的数据库: ``` use db_litvideo; CREATE TABLE IF NOT EXISTS tb_account( userid VARCHAR(50) NOT NULL, password VARCHAR(255), nickname VARCHAR(100), sex INT DEFAULT -1, avatar VARCHAR(254), frontcover varchar(255) DEFAULT NULL, create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(userid) )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS tb_ugc ( userid varchar(50) NOT NULL, file_id varchar(150) NOT NULL, title varchar(128) DEFAULT NULL, status tinyint(4) not NULL DEFAULT 0, review_status tinyint(4) not NULL DEFAULT 0, frontcover varchar(255) DEFAULT NULL, location varchar(128) DEFAULT NULL, play_url varchar(255) DEFAULT NULL, create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (file_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS tb_token( token VARCHAR(32) NOT NULL, userid VARCHAR(50) NOT NULL, expire_time DATETIME NOT NULL DEFAULT '1970-01-01', refresh_token VARCHAR(32) NOT NULL, PRIMARY KEY(token), KEY(userid), KEY(expire_time) )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS tb_queue( task_id VARCHAR(150) NOT NULL, file_id VARCHAR(150) NOT NULL, owner VARCHAR(50), create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, mark_time timestamp DEFAULT '1971-01-01 00:00:00', review_data longtext, PRIMARY KEY(task_id) )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE IF NOT EXISTS tb_review_record( task_id VARCHAR(150) NOT NULL, file_id VARCHAR(150) NOT NULL, reviewer_id VARCHAR(50) NOT NULL, review_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, review_status VARCHAR(50) NOT NULL, PRIMARY KEY(task_id) )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` # 快速开始 ## 配置工程 进入工作目录,克隆项目文件: ``` git clone https://github.com/tencentyun/vod-xiaoshipin-server.git cd vod-xiaoshipin-server ``` 在工作目录下,安装项目所需依赖: ``` npm install ``` 在 conf 文件夹下,复制 config_template.json 文件并命名为 localconfig.json 文件,修改腾讯云 API 密钥、数据库参数配置,以及 COS 存储配置。 ``` { "dbconfig":{ //数据库配置 "host":"127.0.0.1", //数据库 IP 地址,保持默认本机 "user":"litvideo", //数据库用户名,保持默认 "password":"litvideo", //数据库登录密码,保持默认 "database":"db_litvideo", //小视频所用数据库,保持默认 "port":3306, //数据库端口,保持默认 "supportBigNumbers": true, //保持默认 "connectionLimit":10 //保持默认 }, "tencentyunaccount":{ //腾讯运云帐号配置 "AppId":"", //腾讯云 Appid "SubAppId":"", //腾讯云点播子帐号,默认不使用,保持为空 "SecretId": "", //腾讯云 SecretId "SecretKey": "", //腾讯云 SecretKey "bucket":"xiaoshipin", // COS 存储bucket "region":"ap-guangzhou" // COS 存储地域 }, "server":{ "ip":"0.0.0.0", //服务启动 IP ,保持默认 "port":8001, //服务启动端口,保持默认 "reliablecb":true, //回调选择,保持默认 "reliablecbtimeout":5000 //消息拉取轮询间隔(毫秒) } } ``` ## 配置可靠回调 在腾讯云点播控制台,【视频处理设置】下【回调配置】中设置回调模式为【可靠回调】,【事件回调配置】中选择【上传完成回调】。详情参考[腾讯云点播回调配置](https://cloud.tencent.com/document/product/266/7829)。 ![回调设置](https://main.qcloudimg.com/raw/3dcabb94e5ce7a84c0497cd4c0cb9941.png) ## 启动服务 在工程根目录下启动服务: ``` npm start ``` 服务启动后,在另外一个终端下测试视频拉取接口: ``` curl -l -H "Content-type: application/json" -X POST -d '' http://localhost:8001/get_ugc_list ``` 如果服务正常运行,可返回如下结果: ``` {"code":200,"message":"OK","data":{"list":[],"total":0}} ``` ## 客户端搭建 参考[拥有自己的短视频app-替换代码中的后台地址](https://cloud.tencent.com/document/product/584/15540#step4.-.E6.9B.BF.E6.8D.A2.E7.BB.88.E7.AB.AF.E6.BA.90.E4.BB.A3.E7.A0.81.E4.B8.AD.E7.9A.84.E5.90.8E.E5.8F.B0.E5.9C.B0.E5.9D.80)。 ## 功能体验 ### 视频上传 服务启动正常后,打开短视频 App,点击底部加号,可以选择“录制”,“视频编辑”和“图片编辑”方式上传视频。上传成功后会在视频列表显示: ![App](https://main.qcloudimg.com/raw/bde628f5f0c9c463e56ffb15710b32ff.png) 用户可上传本项目提供的测试视频,用于体验后续人工审核功能:将项目文件夹 source 中的 video.mp4 导入手机,打开 App,通过“视频编辑”方式上传并发布。 ### 内容审核 腾讯云会针对用户上传的视频进行内容审核,审核结果为“pass”的视频可直接在 App 播放,审核结果为 “review”(建议人审)或者 “block”(建议屏蔽)的视频会推到鉴黄墙进行人工审核,打开浏览器访问 http://yourip:port/index.html 即可体验视频审核功能。其中 yourip 为运行本服务的服务器 ip 地址, port 由配置文件 localconfig.json 中,server 的 port 字段定义。页面如图: ![鉴黄墙](https://main.qcloudimg.com/raw/fed1aa095fc4c0d9ba563abd2055775d.png) 页面左侧显示视频 id 和 title,以及触犯规则的视频截图,截图 confidence 超过 70 会标红,右侧支持视频播放。点击相应截图,视频会从指定位置开始播放。 视频下方是审核通过/屏蔽按钮,审核人点击任一审核按钮后,可获取下一条待审视频。如果没有更多审核任务了,审核完当前视频后会提示:没有更多任务。 ### 媒资管理 打开 App,下拉列表会将媒资信息更新到视频列表。 用户上传视频后,会自动发起内容审核,后台根据返回的结果更新媒资,并在 App 列表页面-视频封面图的左上角展示:审核结果为“pass”的显示为“已通过”,“review”和“block”的视频会进行人工审核。 人工审核提交结果后,后台根据审核结果更新媒资,结果为“屏蔽”的视频显示为“涉黄”,“通过”的视频显示为“已审核”。其中只有“已通过”是视频可以播放,其他状态不可播放。如图所示: ![媒资](https://main.qcloudimg.com/raw/e9cdf6f358a075b837a5ea8a51aad563.png) # 参考 1. 腾讯云点播平台视频上传签名:https://cloud.tencent.com/document/product/266/9219 2. 腾讯云点播平台事件回调:https://cloud.tencent.com/document/product/266/7829 3. 腾讯云点播平台媒资获取:https://cloud.tencent.com/document/product/266/8586 4. 腾讯云点播平台视频审核:https://cloud.tencent.com/document/product/266/17914 5. 腾讯云 Node.js SDK:https://cloud.tencent.com/document/sdk/Node.js