项目概述
这是一个基于 CodeIgniter 框架的视频云转码系统(版本 v1.1.6_20180901),由桂林崇胜网络科技开发,主要功能是将上传的视频文件转码为 HLS(m3u8)格式,借助云转码,实现加密、水印、截图等功能。
官网地址:https://www.ctcms.cn/
核心架构
1. 技术栈
后端框架: CodeIgniter 3.x
数据库: MySQL 5.6+
PHP版本: PHP 7.1+
服务器: Linux + Apache(推荐)
转码工具: FFmpeg/FFprobe
前端: Layui + jQuery
2. 目录结构
ctcms/ ├── apps/ # 应用程序目录 │ ├── application/ # 主应用 │ │ ├── controllers/ # 控制器 │ │ ├── models/ # 模型 │ │ ├── libraries/ # 自定义库 │ │ ├── helpers/ # 辅助函数 │ │ └── config/ # 配置文件 │ └── system/ # CI框架核心 ├── libraries/ # 核心库文件 │ ├── config.php # 系统配置 │ ├── database.php # 数据库配置 │ └── ctcms.php # 系统初始化 ├── packs/ # 资源包 │ ├── ffmpeg/ffmpeg.exe # Windows转码工具 │ ├── ffmpeg # Linux转码工具 │ ├── layui/ # UI框架 │ ├── jquery/ # JS库 │ ├── plupload/ # 上传组件 │ ├── ckplayer/ # 播放器 │ └── logo.png # 水印图片 ├── template/ # 模板文件 ├── video/ # 视频存储 │ ├── data/ # 原始视频 │ └── m3u8/ # 转码后的m3u8文件 ├── index.php # 前台入口 └── admin.php # 后台入口
3. 数据库设计
三张核心表:
mu_video – 视频记录表
id, cid(分类ID), name(视频名称) path(原文件路径), m3u8(m3u8路径), pic(截图路径) md5(文件MD5), vid(自定义ID) sid(转码状态:0待转码/1完成/2失败/3异常) duration(时长), size(大小), addtime(上传时间)
mu_queue – 转码队列表
id, vid(视频ID), xu(码率序号) path(源文件), jpg(截图路径), gif(动图路径), m3u8(m3u8路径) duration(时长), sid(状态), addtime(转码开始时间)
mu_class – 分类表
id, name(分类名称), xid(排序)
4. 核心功能模块
控制器(Controllers)
- Upload.php – 文件上传(支持分片上传、MD5秒传)
- Video.php – 视频管理(列表、详情、删除、转码状态查询、执行转码)
- Vlist.php – 分类管理
- Setting.php – 系统设置
- Play.php – 视频播放
- M3u8.php – M3U8文件输出(支持加密、防盗链)
- Login.php – 后台登录
- Install.php – 系统安装
- Home.php – 前台首页
核心库(Libraries)
Xyz.php – 视频处理核心类
- transcode() – 视频转码
- format() – 获取视频信息
- vodtojpg() – 视频截图
- vodtogif() – 生成GIF动图
- watermark_zm() – 添加水印/字幕
- m3u8aes() – M3U8加密
Ffm.php – ZIP压缩库(加密混淆)
辅助函数(Helpers)
- m3u8_link() – 生成M3U8播放链接
- m3u8_dir() – 生成存储路径
- sys_auth() – 加密/解密函数
- formatsize() – 格式化文件大小
- formattime() – 格式化时长
- is_referer() – 防盗链验证
- safe_replace() – SQL注入过滤
5. 核心功能特性
视频上传
- 分片上传(支持大文件)
- MD5秒传(避免重复上传)
- 支持格式:avi, wmv, mpeg, mp4, mov, mkv, flv, f4v, m4v, rmvb, rm, mpg
- 临时文件自动清理
视频转码
- 转码为HLS(m3u8 + ts分片)
- 支持自定义TS时长(默认5秒)
- 支持多码率转码
- 支持视频缩放
- 支持码率控制
- 支持跳过片头
- 支持秒切(快速转码)
- 转码速度可调(ultrafast到slower)
视频加密
- AES-128加密
- 自定义密钥
- TS文件伪装后缀
- 加密链接(防盗链)
水印功能 - 支持4个位置(左上、右上、左下、右下)
- 支持PNG水印图片
- 支持ASS字幕
截图功能
- 自动截图(可设置张数、间隔、尺寸)
- GIF动图生成
- 自定义截图时间点
防盗链
- Referer验证
- 域名白名单
- M3U8地址加密
- 直接播放控制
队列管理
- 自动转码队列
- 转码进度实时查询
- 失败自动重试
- 进程监控(防止卡死)
API同步
- 支持外部API同步
- 转码完成回调
- 自定义秘钥验证
6. 配置项(config.php)
主要配置包括:
域名配置(站点域名、转码域名、M3U8域名)
后台账号密码
截图设置(开关、张数、间隔、尺寸)
GIF设置(开关、时长、尺寸)
转码设置(加密、秒切、码率、尺寸、多码率)
水印设置(4个位置开关)
字幕设置
文件路径(上传路径、转码路径、FFmpeg路径)
防盗链设置
API同步设置
上传设置(秒传、外部上传、支持格式)
7. 工作流程
上传阶段:
用户上传视频 → 分片上传 → 合并文件
检查MD5(秒传) → 获取视频信息(FFprobe)
写入video表 → 生成队列记录
转码阶段:
前端轮询getpro接口 → 检查队列
调用transcode接口 → 执行FFmpeg转码
生成m3u8 + ts分片 + 截图 + GIF
添加水印/字幕/加密
更新转码状态 → 删除队列记录
播放阶段:
访问play页面 → 获取m3u8链接
如果开启加密:通过M3U8控制器输出
防盗链验证 → 返回视频流
8. 安全机制
SQL注入过滤(safe_replace)
XSS防护
文件类型验证
防盗链验证
加密传输(AES-128)
后台登录验证(Cookie + MD5)
目录权限控制
9. 优化特性
- 秒切模式(MP4直接转封装)
- 多码率支持
- 临时文件清理
- 进程监控防卡死
- 转码速度可调
- 原文件可选保留/删除
这是一个功能完整的商业级视频云转码系统,适合搭建视频网站、在线教育平台等需要视频处理的场景。
毛桃博客







评论前必须登录!
注册