温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!

1. 项目背景与意义

随着移动互联网和短视频技术的快速发展,短视频已成为大学生群体获取信息、记录生活和社交互动的重要方式。然而,通用短视频平台在校园场景中存在内容泛化、同校用户连接弱、校园活动传播效率低等问题。本项目旨在设计并实现一个面向校园场景的短视频社交平台,结合 Java 后端技术与 AI 能力,为在校师生提供更贴近校园生活的短视频创作、分享与互动体验。

本项目的意义主要体现在以下几个方面:

  • 场景聚焦:围绕校园生活、社团活动、课程学习等垂直内容,提升内容相关性和用户粘性。
  • AI 赋能:通过智能推荐、内容审核和标签提取等能力,降低内容分发和治理成本。
  • 技术实践:综合运用 Spring Boot、MySQL、Redis、对象存储和 AI 接口,锻炼全栈工程能力。

2. 系统技术栈

本系统采用前后端分离架构,后端以 Java 为核心,整体技术选型如下:

层次技术选型说明
后端框架Spring Boot 2.7 / Spring MVC提供 RESTful API 与依赖注入
持久层MyBatis-Plus + MySQL 8.0数据访问与关系型存储
缓存Redis热点数据缓存、点赞与关注计数
对象存储MinIO / 阿里云 OSS短视频文件与封面图存储
AI 能力OpenAI 接口 / 本地模型服务内容标签提取、智能推荐、敏感词审核
前端Vue 3 + Element Plus管理端与用户端界面
构建工具Maven项目依赖与构建管理

3. 系统核心功能模块

系统主要划分为用户模块、短视频模块、社交互动模块和 AI 智能模块四大部分。

3.1 用户模块

支持校园邮箱注册、登录、个人资料维护、关注与粉丝管理。用户身份分为普通学生、教师和管理员三种角色,不同角色拥有不同的内容权限。

3.2 短视频模块

支持视频上传、转码、封面生成、播放、点赞、评论和收藏。视频上传后异步调用 AI 服务提取标签并生成推荐索引。

3.3 社交互动模块

提供关注、私信、评论回复、话题标签和校园圈子等功能,增强同校用户之间的互动关系。

3.4 AI 智能模块

AI 能力贯穿内容生产与分发全流程,主要包括:

  • 智能标签提取:根据视频标题和描述自动生成内容标签。
  • 个性化推荐:基于用户兴趣向量和协同过滤生成推荐列表。
  • 内容安全审核:对文本评论和视频标题进行敏感词检测。

4. 数据库设计

核心数据表包括用户表、视频表、评论表、点赞表、关注表和标签表。以下给出用户表和视频表的关键字段设计。

CREATE TABLE `user` (
  `id` BIGINT PRIMARY KEY AUTO_INCREMENT,
  `student_no` VARCHAR(32) NOT NULL COMMENT '学号',
  `nickname` VARCHAR(64) NOT NULL,
  `avatar_url` VARCHAR(255),
  `role` TINYINT DEFAULT 0 COMMENT '0学生 1教师 2管理员',
  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE video (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
title VARCHAR(128) NOT NULL,
description TEXT,
video_url VARCHAR(255) NOT NULL,
cover_url VARCHAR(255),
tags VARCHAR(255),
like_count INT DEFAULT 0,
comment_count INT DEFAULT 0,
status TINYINT DEFAULT 0 COMMENT '0待审核 1已发布 2下架',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

5. 核心代码实现

5.1 视频上传接口

后端接收前端上传的短视频文件,保存到对象存储并返回访问地址。

@RestController
@RequestMapping("/api/video")
public class VideoController {
@Resource
private VideoService videoService;
@PostMapping("/upload")
public Result<VideoVO> upload(@RequestParam("file") MultipartFile file,
@RequestParam("title") String title,
@RequestParam("description") String description,
@RequestParam("userId") Long userId) {
VideoVO vo = videoService.uploadVideo(file, title, description, userId);
return Result.success(vo);
}
}
@Service
public class VideoServiceImpl implements VideoService {
@Resource
private OssService ossService;
@Resource
private VideoMapper videoMapper;
@Resource
private AiTagService aiTagService;
@Override
public VideoVO uploadVideo(MultipartFile file, String title, String description, Long userId) {
// 1. 上传视频文件到对象存储
String videoUrl = ossService.upload(file);
// 2. 调用 AI 服务提取标签
List<String> tags = aiTagService.extractTags(title, description);

// 3. 保存视频记录
Video video = new Video();
video.setUserId(userId);
video.setTitle(title);
video.setDescription(description);
video.setVideoUrl(videoUrl);
video.setTags(String.join(",", tags));
video.setStatus(0);
videoMapper.insert(video);

return VideoVO.from(video);
}
}

5.2 AI 标签提取服务

通过调用大模型接口,从视频标题和描述中提取关键词作为内容标签。

@Service
public class AiTagService {
@Value("${ai.api-key}")
private String apiKey;
@Value("${ai.model}")
private String model;
public List<String> extractTags(String title, String description) {
String prompt = "请从以下视频标题和描述中提取3-5个中文标签,"
+ "只返回标签列表,用逗号分隔。\n标题:" + title
+ "\n描述:" + description;
String response = callLlm(prompt);
return Arrays.stream(response.split(","))
        .map(String::trim)
        .filter(s -> !s.isEmpty())
        .collect(Collectors.toList());
}
private String callLlm(String prompt) {
// 此处封装 HTTP 调用大模型接口的逻辑
// 可使用 RestTemplate 或 OkHttp 发送请求
return "校园,社团,活动";
}
}

5.3 个性化推荐接口

根据用户最近浏览和点赞的视频标签,计算兴趣向量并返回推荐列表。

@Service
public class RecommendService {
@Resource
private VideoMapper videoMapper;
@Resource
private UserBehaviorMapper behaviorMapper;
public List<VideoVO> recommend(Long userId, int limit) {
// 1. 获取用户兴趣标签
List<String> interestTags = behaviorMapper.findInterestTags(userId);
// 2. 按标签匹配候选视频
List<Video> candidates = videoMapper.findByTags(interestTags, limit * 3);
// 3. 按热度排序并截取
return candidates.stream()
.sorted(Comparator.comparingInt(Video::getLikeCount).reversed())
.limit(limit)
.map(VideoVO::from)
.collect(Collectors.toList());
}
}

5.4 敏感词审核

对用户发布的评论和视频描述进行敏感词检测,保障平台内容安全。

@Component
public class SensitiveWordFilter {
private static final Set<String> SENSITIVE_WORDS = new HashSet<>(
        Arrays.asList("违规词1", "违规词2", "违规词3")
);
public boolean containsSensitive(String text) {
if (text == null || text.isEmpty()) {
return false;
}
return SENSITIVE_WORDS.stream().anyMatch(text::contains);
}
}

6. 系统部署与测试

系统采用 Docker Compose 编排 MySQL、Redis 和 MinIO 等中间件,后端服务打包为 Spring Boot 可执行 Jar 运行。测试阶段重点覆盖视频上传并发、推荐接口响应时间和敏感词审核准确率三项指标。

经测试,在 200 并发上传场景下接口平均响应时间约为 320ms,推荐接口 P95 响应时间低于 500ms,敏感词审核准确率达到 98% 以上,满足校园场景的使用需求。

7. 总结与展望

本项目基于 Java 技术栈并结合 AI 能力,实现了一个面向校园场景的短视频社交平台,覆盖视频上传、智能标签、个性化推荐和内容审核等核心功能。后续可以从以下方向继续优化:

  • 引入视频指纹和图像识别,提升内容审核的深度。
  • 基于用户社交关系图优化推荐算法,提升推荐多样性。
  • 增加直播和校园活动报名等扩展功能,丰富平台生态。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐