视频播放网站

视频播放网站毕业设计(Vue2 基础版),Node.js Express + FFmpeg HLS 切片转码,支持大文件上传、分类管理与在线 m3u8 流媒体播放。

评分:4.8/5.0
销量:28
发布:12/2/2025
难度:L3 高级

获取完整源码

演示视频仅作效果参考。完整源码、项目说明与运行答疑,请私聊沟通(适合毕业设计 / 课程设计 / 课设参考)。

获取完整源码
含项目说明文档,便于对照学习
可本地运行,适合课设演示
沟通获取后可咨询运行问题

项目概览

视频播放网站毕业设计采用 Express + MySQL 后端与 Vue 2 前端,集成 fluent-ffmpeg 实现视频 HLS 切片转码,支持前台播放与后台上传管理,适合 Node.js 流媒体类毕业设计;升级版见巨峰影视影院。

项目说明

视频播放网站

项目简介

这是一个完整的视频播放平台系统,包含PC端前台展示和后台管理功能。系统实现了视频上传、切片处理、在线播放、分类管理、用户管理等核心功能,采用HLS流媒体技术实现视频切片播放,支持大文件上传,适合作为视频网站全栈开发学习项目或计算机设计参考。

版本说明:本项目为 Vue2 基础版。若需要 Vue3、多清晰度 HLS 转码、游客试看、弹幕评论与更完整运营后台,请看升级版:巨峰影视影院

技术栈

后端技术

技术版本/说明
运行环境Node.js 14.21.3
Web框架Express 4.19.1
数据库MySQL 8.0+
数据库驱动mysql
视频处理fluent-ffmpeg
文件上传multer
跨域处理cors
ID生成nanoid
热重载nodemon
工具库lodash

前端技术

技术版本/说明
前端框架Vue 2.6.11
UI组件库Element UI 2.15.6
路由管理Vue Router 3.0.7
状态管理Vuex 3.4.0
HTTP请求Axios 0.24.0
CSS预处理器Less
粒子效果vue-particles

项目特点

  • 前后端分离:后端提供RESTful API,前端独立开发部署
  • HLS流媒体:采用HLS协议实现视频切片播放,支持大文件视频
  • FFmpeg处理:自动将上传视频转码为HLS格式(m3u8+ts切片)
  • 大文件上传:支持大视频文件上传和处理
  • 分类管理:支持视频分类浏览和管理
  • 用户角色:区分普通用户和管理员权限
  • 响应式设计:适配不同屏幕尺寸

功能模块

前台功能

1. 首页模块 (views/Index.vue)

  • 视频列表展示
  • 分类标签筛选
  • 视频封面预览
  • 发布人和时间显示
  • 点击播放跳转

2. 视频播放模块 (views/Play.vue)

  • HLS流媒体播放
  • 视频详情展示
  • 播放器控制

3. 用户认证模块

  • 用户登录 (views/AdminLogin.vue)
  • 用户注册 (views/AdminRegister.vue)
  • 登录状态保持

后台管理功能 (views/AdminIndex.vue)

1. 个人信息管理

  • 查看账号信息
  • 修改用户头像
  • 头像图片上传

2. 用户管理(管理员)

  • 用户列表查看
  • 用户信息展示
  • 用户头像显示

3. 视频管理

  • 视频列表展示
  • 上传新视频
  • 编辑视频信息
  • 删除视频
  • 视频播放预览
  • 视频封面上传

4. 分类管理(管理员)

  • 分类列表展示
  • 创建新分类
  • 编辑分类名称
  • 删除分类

项目结构

vue-node-video/
├── express/                        # 后端服务(Express + MySQL)
│   ├── public/                     # 静态资源目录
│   │   └── default-avatar.jpg      # 默认头像
│   ├── storage/                    # 视频切片存储目录
│   │   └── {videoId}/              # 每个视频的切片文件夹
│   │       ├── video.m3u8          # HLS播放列表
│   │       └── *.ts                # 视频切片文件
│   ├── uploads-temp/               # 临时上传目录
│   ├── main.js                     # 服务入口文件(包含所有API)
│   └── package.json
│
├── web/                            # 前端项目(Vue2 + Element UI)
│   ├── public/                     # 静态资源
│   ├── src/
│   │   ├── api/                    # API接口封装
│   │   │   ├── index.js            # API接口定义
│   │   │   └── request.js          # Axios请求封装
│   │   ├── assets/                 # 静态资源
│   │   │   ├── images/             # 图片资源
│   │   │   ├── scripts/            # 脚本工具
│   │   │   └── styles/             # 样式文件
│   │   ├── components/             # 公共组件
│   │   │   ├── ImageListUpload.vue # 图片上传组件
│   │   │   └── VideoAddUpdate.vue  # 视频新增/编辑组件
│   │   ├── filters/                # 过滤器
│   │   │   └── index.js            # 日期格式化等
│   │   ├── router/                 # 路由配置
│   │   │   └── index.js            # 路由定义
│   │   ├── views/                  # 页面视图
│   │   │   ├── Home.vue            # 首页布局
│   │   │   ├── Index.vue           # 视频列表页
│   │   │   ├── Info.vue            # 信息页
│   │   │   ├── Play.vue            # 视频播放页
│   │   │   ├── AdminIndex.vue      # 后台管理页
│   │   │   ├── AdminLogin.vue      # 登录页
│   │   │   └── AdminRegister.vue   # 注册页
│   │   ├── App.vue                 # 根组件
│   │   └── main.js                 # 入口文件
│   ├── package.json
│   └── vue.config.js               # Vue配置
│
├── 截图/                            # 项目截图
├── video-website.sql               # 数据库SQL文件
├── 视频播放平台.xmind               # 项目思维导图
└── README.md                       # 项目说明

数据模型

用户表 (user)

{
  id: int,                    // 用户ID(自增主键)
  avatar: varchar(1000),      // 头像URL
  role: int,                  // 角色 (0普通用户, 99管理员)
  username: varchar(10),      // 用户名
  password: varchar(100),     // 密码
  active: int,                // 状态 (0禁用, 1正常)
  update_time: timestamp,     // 更新时间
  create_time: timestamp      // 创建时间
}

视频表 (video)

{
  id: int,                    // 视频ID(自增主键)
  user_id: int,               // 上传用户ID
  title: varchar(255),        // 视频标题
  cate_id: int,               // 分类ID
  url: varchar(255),          // 视频播放地址(m3u8)
  cover: varchar(255),        // 封面图URL
  create_time: timestamp,     // 创建时间
  update_time: timestamp      // 更新时间
}

分类表 (cate)

{
  id: int,                    // 分类ID(自增主键)
  title: varchar(100),        // 分类名称
  cover: varchar(100),        // 分类图标
  update_time: timestamp,     // 更新时间
  create_time: timestamp      // 创建时间
}

视频分类

分类名称说明
搞笑搞笑类视频
娱乐娱乐类视频
体育体育类视频
新闻新闻类视频

API接口

用户接口

接口方法说明
/user/registerPOST用户注册
/user/loginPOST用户登录
/user/infoGET获取用户信息
/user/updatePOST更新用户信息
/user/listGET用户列表

分类接口

接口方法说明
/cate/listGET分类列表
/cate/addPOST新增分类
/cate/updatePOST更新分类
/cate/delPOST删除分类

视频接口

接口方法说明
/video/listGET视频列表
/video/infoGET视频详情
/video/addPOST新增视频
/video/updatePOST更新视频
/video/delPOST删除视频

上传接口

接口方法说明
/upload/picPOST图片上传
/upload/videoPOST视频上传(自动切片)
/play/:videoId/:filenameGET视频切片播放

运行环境要求

后端环境

  • Node.js 14.21.3(推荐)
  • MySQL 8.0+
  • FFmpeg(必须安装,用于视频切片)
  • npm 或 yarn

前端环境

  • Node.js 14.0+
  • npm 或 yarn
  • 现代浏览器(Chrome、Firefox、Edge等)

快速开始

1. 安装FFmpeg

FFmpeg是视频切片处理的核心依赖,必须先安装。

macOS:

brew install ffmpeg

Windows:

  1. 下载FFmpeg: https://ffmpeg.org/download.html
  2. 解压并添加到系统环境变量PATH

Linux:

sudo apt-get install ffmpeg

2. 数据库配置

  1. 创建MySQL数据库
CREATE DATABASE `video-website` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  1. 导入数据库文件
mysql -u root -p video-website < video-website.sql
  1. 修改数据库配置 编辑 express/main.js
var db = mysql.createConnection({
  database: 'video-website', // 数据库名称
  host: 'localhost', // 主机地址
  port: '3306', // 端口号
  user: 'root', // 用户名
  password: 'root', // 密码(修改为你的密码)
});

3. 启动后端服务

# 进入后端目录
cd express

# 安装依赖
npm install

# 启动服务(开发模式)
npm run dev

后端服务默认运行在 http://localhost:3300

4. 启动前端项目

# 进入前端目录
cd web

# 安装依赖
npm install

# 启动开发服务器
npm run dev

前端项目默认运行在 http://localhost:8080

5. 配置API地址

编辑 web/src/api/request.js,修改API基础地址:

const baseURL = 'http://localhost:3300'; // 修改为你的后端地址

默认账号

管理员账号

  • 用户名:admin
  • 密码:admin

测试账号

  • 用户名:test
  • 密码:test

视频处理流程

  1. 上传视频:用户通过前端上传视频文件
  2. 临时存储:视频先存储到 uploads-temp 目录
  3. FFmpeg处理:使用FFmpeg将视频转码为HLS格式
    • 视频编码:libx264
    • 音频编码:aac
    • 切片时长:10秒
    • 输出格式:m3u8 + ts切片
  4. 存储切片:切片文件存储到 storage/{videoId}/ 目录
  5. 返回地址:返回m3u8播放地址供前端播放

界面预览

项目包含截图文件夹,展示了系统的主要界面:

  • 首页视频列表
  • 视频播放页面
  • 后台管理界面
  • 登录注册页面

扩展建议

如需进一步完善项目,可考虑以下扩展:

  1. 视频评论:添加视频评论功能
  2. 点赞收藏:视频点赞和收藏功能
  3. 播放统计:视频播放次数统计
  4. 视频搜索:关键词搜索视频
  5. 用户关注:用户关注和粉丝系统
  6. 弹幕功能:视频弹幕系统
  7. 视频推荐:基于用户行为的推荐算法
  8. 多清晰度:支持多清晰度切换
  9. 断点续传:大文件断点续传
  10. 视频审核:视频内容审核机制

注意事项

  1. 本项目为学习演示项目,部分数据为模拟数据
  2. FFmpeg必须正确安装并配置环境变量
  3. 视频上传需要足够的磁盘空间存储切片文件
  4. 生产环境部署需要配置HTTPS
  5. 建议定期清理临时上传目录
  6. 大视频文件处理可能需要较长时间

常见问题

Q: 视频上传失败?

A: 检查FFmpeg是否正确安装,可在命令行执行 ffmpeg -version 验证

Q: 数据库连接失败?

A: 检查MySQL服务是否启动,数据库配置是否正确

Q: 视频无法播放?

A: 检查后端服务是否启动,视频切片文件是否生成成功

Q: 图片无法显示?

A: 检查后端服务是否启动,图片路径配置是否正确

Q: 登录后无法访问后台?

A: 检查本地存储是否正确保存用户信息

相关推荐

版本说明链接
本基础版Vue2 + Express + MySQL,HLS 切片入门当前项目
升级版Vue3 + 多清晰度转码、试看、弹幕评论、运营台巨峰影视影院

许可证

本项目仅供学习交流使用,请勿用于商业用途。

获取完整源码

技术分类

包含内容

完整源码
项目说明文档
演示材料

适合方向

适合 Node.js + Vue 毕业设计,关注视频上传转码、HLS 流媒体播放与视频网站全栈开发的计算机、数字媒体专业学生。

关于 AI源码

AI源码 整理计算机毕业设计、课程设计向的可运行项目参考,含说明文档与演示材料。完整源码请通过联系方式沟通获取。

QQ: 861077046
邮箱: 861077046@qq.com
已帮助 28+ 位同学完成选题参考
问能不能做我的题目

相关推荐

查看全部 →
电影购票网站
进阶·新上架

电影购票网站

PC 端电影在线购票演示网站,原生 HTML+CSS+JS 单页多视图,含热映列表、场次选择、7×8 可视化选座、订单确认与 localStorage 持久化,无需后端。

HTML大作业
4.869
妲己主题站
高级·新上架

妲己主题站

王者荣耀英雄妲己主题静态小站,以「愿照众生和」黑金视觉为基调,含首页 12 套皮肤 hover 换肤、皮肤图鉴、技能铭文出装、英雄故事、攻略视频与 31 条福愿语音等七页,HTML+CSS 为主,适合前端静态页毕业设计。

HTML大作业
4.871
Java个人博客系统
高级

Java个人博客系统

Spring Boot+MyBatis+Thymeleaf 个人博客系统,支持 Markdown 编写与 Editor.md 编辑、文章分类标签、评论管理与七牛云图片上传,Ehcache 缓存优化,适合 Spring Boot 入门类毕业设计。

SpringBootHTMLMySQL
4.825
精美风的音乐网站
高级

精美风的音乐网站

精美风在线音乐网站毕业设计,Spring Boot + 双 Vue 端(用户前台 + 管理后台),支持在线播放、歌词同步、歌单评论收藏与后台数据统计,界面现代体验佳。

SpringBootVue2MySQL
4.864
IT新技术与创新小程序
进阶

IT新技术与创新小程序

IT 新技术与创新展示微信小程序,涵盖 AI、区块链、5G、量子计算等前沿技术介绍、创新案例与趋势分析,纯前端 Mock,科技蓝 UI,适合 IT 科普类毕业设计。

小程序
4.890
在线视频聊天项目说明
高级·新上架

在线视频聊天项目说明

基于 WebRTC P2P 的多人视频聊天室,Vue3 + TypeScript + Express + Socket.IO 实现信令转发与房间管理,含屏幕共享、设备切换、图片编辑与视频录制等完整功能。

NodeHTML
4.881