🎓 一、 选题背景:为什么选这个题?
同学们,如果想拿优秀毕设,必须学会**“蹭热度”**。
- 国家战略(Buff 叠满):“乡村振兴”、“数字助农”是绝对的政治正确。你做的不是商城,是**“农民致富的工具”**。
- 技术噱头(直播流媒体):普通的商城是“静态”的图片,你的商城是“动态”的视频。在答辩现场,当你点开页面,屏幕上出现农民伯伯正在果园采摘的画面(哪怕是录像),这种沉浸感直接秒杀全场。
- 商业逻辑闭环:
- 直播= 引流。
- 商城= 变现。
- 产销对接= 去中介化。
- 这个逻辑无懈可击,导师问不出业务漏洞。
🏗️ 二、 系统架构设计
为了体现系统的“高并发”和“多媒体”属性,我们将架构描述为流媒体服务 + 电商业务服务的混合架构。
1. 技术栈选型
- 后端:Spring Boot 2.7+、MyBatis Plus
- 前端:Vue 3 + Element Plus +Video.js (核心播放器)
- 直播流:OBS 推流(演示用) 或 直接嵌入 B站/抖音 的 Web 播放器(偷懒用)
- 数据库:MySQL 8.0
- 缓存:Redis (直播间在线人数、库存)
2. 系统逻辑架构图 (Mermaid)
这张图展示了“视频流”和“数据流”是如何分离处理的。
🛠️ 三、 项目亮点包装(Project Highlights)
这部分要把“简单的播放器”吹成“低延迟直播架构”。
1. “沉浸式”直播带货体验 (Live Commerce)
包装话术:区别于传统的货架电商,本系统引入了HLS (HTTP Live Streaming)流媒体传输协议。实现了“所见即所得”的购物体验。前端采用Video.js结合悬浮式商品卡片技术,用户在观看农产品原产地采摘直播的同时,无需跳转页面即可完成**“一键加购”**,极大提升了转化率。
2. C2M 产销直连对接模式 (Consumer to Manufacturer)
包装话术:为了响应乡村振兴号召,系统设计了C2M 去中介化架构。农户端(生产端)可以直接发布农产品货源信息,并通过直播展示品质;消费者端(需求端)的数据通过ECharts 销量大屏实时反馈给农户,实现了“以销定产”,解决了农产品滞销难题。
3. 直播间高并发互动解决方案
包装话术:针对直播间可能出现的“秒杀”和“弹幕刷屏”场景,后端引入Redis 缓存技术。利用 Redis List 数据结构存储实时弹幕,利用 Redis AtomicInteger 处理直播间实时在线人数,有效分摊了 MySQL 的读写压力,保证了直播画面的流畅性。
💻 四、 核心功能实现(保姆级代码)
核心只有两个:直播画面怎么弄出来,边看边买怎么实现。
1. 核心表结构设计
直播间表 (sys_live_room)
| 字段名 | 类型 | 说明 | 备注 |
|---|---|---|---|
id | BIGINT | 主键 | - |
anchor_id | BIGINT | 主播(农户)ID | - |
title | VARCHAR | 标题 | 如:正宗赣南脐橙开采啦 |
cover_img | VARCHAR | 封面图 | - |
stream_url | VARCHAR | 推流/播放地址 | 核心:存视频源地址 |
status | TINYINT | 状态 | 0:未开播, 1:直播中 |
online_count | INT | 在线人数 | 假数据也行 |
直播关联商品表 (sys_live_product)
| 字段名 | 类型 | 说明 | 备注 |
|---|---|---|---|
id | BIGINT | 主键 | - |
room_id | BIGINT | 直播间ID | - |
product_id | BIGINT | 商品ID | - |
is_explaining | TINYINT | 是否正在讲解 | 1:弹出商品卡片 |
2. 难点代码:前端视频播放与商品弹窗 (LiveRoom.vue)
这是“毕设欺诈”的精髓:不需要真的推流,只要放一个 .mp4 或者 B站的外链即可。
<template><divclass="live-container"><divclass="video-box"><videosrc="http://你的服务器/static/video/farm_live.mp4"autoplayloopmutedcontrolsstyle="width:100%;height:100%;object-fit:cover;"></video><divclass="danmu-layer"><divv-for="msg in danmuList":key="msg.id"class="danmu-item">{{ msg.user }}: {{ msg.content }}</div></div></div><divclass="interaction-box"><divv-if="currentProduct"class="product-card"><img:src="currentProduct.img"/><divclass="info"><h4>{{ currentProduct.name }}</h4><spanclass="price">¥{{ currentProduct.price }}</span><el-buttontype="danger"size="small"@click="addToCart">马上抢</el-button></div></div><divclass="chat-input"><el-inputv-model="inputMsg"placeholder="跟主播聊两句..."@keyup.enter="sendMsg"/></div></div></div></template><scriptsetup>import{ref,onMounted}from'vue';// 模拟正在讲解的商品constcurrentProduct=ref({name:'赣南脐橙 5斤装',price:29.9,img:'/static/orange.jpg'});// 模拟发送弹幕constdanmuList=ref([]);constsendMsg=()=>{danmuList.value.push({user:'我',content:inputMsg.value});// TODO: 调用后端 WebSocket 接口广播给其他人};</script><style>/* 样式略:重点是把 interaction-box 浮动在视频右侧或者下方 */</style>📸 五、 运行效果展示 (答辩 PPT 必杀技)
这部分要突出**“动静结合”**。
- 直播大厅页:
- 像 B站 或 斗鱼 一样的网格布局。
- 封面图要接地气:老农拿着橘子笑、茶山的航拍图、养鸡场的实拍。
- 状态标签:右上角挂一个红色的**“LIVE 直播中”**。
- 直播详情页(核心):
- 左边是大视频:找一段网上下载的“助农直播录像”(比如李子柒的视频或者随便一个农产品介绍视频)循环播放。
- 右边是滚动弹幕:写个定时器,每隔 2 秒自动跳出来一条假弹幕:“水果看起来很新鲜”、“已下单”、“支持助农”。
- 右下角是商品列表:点击“购买”,直接弹出下单框。
- 产销数据大屏:
- 展示“累计助农金额”、“热销农产品 Top5”、“发货地图”。
🗣️ 六、 答辩防御术(高情商回答)
Q1: 你的直播是用什么推流的?延迟多少?
A (诚实但有技巧版):“老师,在本地演示环境中,为了保证视频的清晰度和稳定性,我采用了模拟直播源的方式(播放服务器上的高清录像文件)。
但在系统架构设计上,我预留了Nginx-RTMP模块的接口。在生产环境中,主播可以使用 OBS 软件通过 RTMP 协议推流到服务器,前端使用video.js解析 HLS 流进行播放。理论延迟在 3-5 秒左右。”
(解析:承认演示是用录像,但要说清楚真实架构该怎么做,展示你懂原理。)
Q2: 为什么不直接用抖音?为什么要开发这个平台?
A (价值升华版):“抖音是泛娱乐流量平台,流量成本极高,农户很难获得精准流量。
而本平台是**‘私域流量 + 垂直助农’。我们专注于产销对接**,不仅是卖货,更重要的是后台的**‘农产品溯源系统’和‘订单管理系统’**,这些是抖音无法为农户深度定制的。本系统旨在建立一个属于新农人自己的数字化阵地。”
总结:
这个项目的核心在于**“视觉欺骗”。
你不需要去搞懂复杂的 FFmpeg 或者 WebRTC。
你只需要找一段高清、接地气、看起来像直播的 MP4 视频,把它嵌在网页里,旁边配上会动的弹幕和商品卡片。
在导师眼里,这就是一个完整的“直播电商系统”**,绝对的高分毕设!