终于回到项目学习中了。
本篇内容主要实现功能:视频投稿,瀑布流视频列表,视频在线播放,以及视频的点赞、收藏、投币等功能:
代码:videoapi---videoService---videoDao----mapper.video.xml
数据库表:
文件表:t_file。
视频表:t_video
关联标签表:t_vedio_tag
标签表:t_tag
视频投稿
功能描述:用户可以上传视频,并附带标题,描述,标签等信息
功能开发:前端传入用户上传视频相关信息,后端首先将相关信息存入视频表数据库,获得新增id后将视频id与标签批量存入关联标签表中。
瀑布流视频列表
功能描述:视频网站上分页展示视频功能,分页查询视频功能
功能开发:前端传入视频标签,每页展示视频数以及视频页数,后端首先根据视频标签查看视频总数,若总数大于0,则根据size和no取出具体视频信息并返回。
可能存在的问题:性能问题,当用户大量频繁地进行翻页操作时,后端要频繁地请求数据库。可能会导致性能下降。
解决思路:采用redis继续缓存。当用户翻页操作时,先检查缓存中是否存在数据,如果存在则,直接返回。如果不存在再去请求数据库,并将其存在缓存中。
视频在线播放
功能描述:用户在线观看视频
功能解读:视频在线播放和视频下载本质上是同理的,都是对视频的下载,从云端服务器获得到我们想要的内容进行下载。
视频在线播放功能通过流式传输实现,允许用户实时观看,而不需要先下载整个视频。
功能开发:
1. 前端发起请求,带上url参数
2. controller--service--FastUtil工具类的viewVideoOnlineBySlices方法中
1. 首先通过FastDfs获取视频文件的大小
2. 构建视频文件子啊FastDfs服务器上的完整URL
3. 获取用户发来的请求头headers
4. 总request中读取range写入headers中,range:需要获取视频文件的范围
5. 在响应头中加入信息
3. 调用工具类HttpUtil中get方法,填入刚才准备好的请求链接,请求头和响应头。
4. 在get方法中将获取的视频数据写入到http响应的输出流中。
视频相关功能(大部分是增删改查)
视频点赞、取消点赞功能
数据库表t_video_like
用户点赞,取消点赞都在t_video_like表中增加或删除数据。
视频的总点赞存放在视频信息表中,避免重复查询点赞总数。
视频收藏、取消收藏功能
数据库表t_video_collection
我觉得收藏本质上和点赞是差不多类型的东西。只不过收藏比点赞多了一个查看收藏,即通过收藏视频表查询出自己收藏过的视频,但是点赞实际上也可以做这个功能,查看自己点赞过的视频。
不同之处在于收藏可以设置分组
视频投币功能
没有取消投币
数据库表:t_vdeo_coin:
t_user_coin:用户具有多少硬币
首先获取视频id,检查视频是否存在,然后获取用户硬币数是否大于投币的数量,接着再获取用户对该视频已经投币数量,最后新增数据库表数据,减少用户硬币数。
最后函数要加上
@Transactional 事务
视频评论功能
数据库表:
评论功能比较简单,检查数据之后向数据库表中插入数据就可以了。
分页查询评论比较繁琐:
根据视频id查询出所有一级评论总数,分页查询一级评论,根据一级评论查询其子评论并查找相关用户,最后返回查询结果。
视频详情
传入视频id,通过数据库查询视频信息,再通过视频信息取出视频所有者id,查询数据库取出视频作者信息,打包返回。