PHP双码率视频云转码服务系统源码 m3u8切片秒切
逍遥客 发布于 阅读:430
项目概述
这是一个基于 CodeIgniter 框架的视频云转码系统(版本 v1.1.6),由桂林崇胜网络科技开发,主要功能是将上传的视频文件转码为 HLS(m3u8)格式,借助云转码,实现加密、水印、截图等功能。
核心架构
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直接转封装)
-
多码率支持
-
临时文件清理
-
进程监控防卡死
-
转码速度可调
-
原文件可选保留/删除
这是一个功能完整的商业级视频云转码系统,适合搭建视频网站、在线教育平台等需要视频处理的场景。