一、需求分析
本项目提供学生在线学习,包括录播、直播、图文等,我负责的模块是录播
1、学生可以在windows浏览器上在线观看视频。
2、播放器具有快进、快退、暂停等基本功能。
3、学生可以方便切换章节进行学习。
二、解决方案
流媒体----->将原视频通过压缩上传到服务器,为了节约空间,压缩后的视频会变小,客户端通过解压的方式获取视频文件。
流式传输有两种方式:
一、顺序流式播放 不能快进,只能按照顺序播放
二、实时流式传输 可以快进
一、流媒体的业务流程图
图中的编码就是压缩
2.1、我们选择第二种实时流式传输,解决这种需求,我们选择的技术方案是:
HLS协议------------>avi ----------> n个 ts 小文件 + m3u8索引文件 ;
流程:
三、视频编码
【视频文件格式】和【视频文件编码格式】是不一样的。
视频文件格式:.mp4、.avi、.rmvb等
视频文件编码格式:MPEG系列 、H26x-------->视频压缩的格式
3.1、FFmpeg视频编码工具
3.1.1、资料里面有FFmpeg.exe文件,可以设置环境变量
3.2、将avi文件转换为m3u8和ts文件的过程,如下图:
说明:
.m3u8 索引文件 : 记录的是整个avi拆分的ts文件有哪些, ts文件先后顺序 , ts各个文件时长是多长 ;
.ts 文件 : 每一个都是一小段视频 ;
五、播放器的选择
5.1、播放器分类有:H5、flash(需要下载Adobe flash player)、浏览器插件。本项目采用H5 中的video.js开源播放器(它支持H5和flash)。
六、服务器的选择
6.1、HLS协议基于Http协议、本项目采用Nginx来作为视频播放器
七、媒资管理
7.1、需求分析
媒资查询:教学机构查询自己所拥有的媒体文件。
视频上传:将用户线下录制的教学视频上传到媒资系统。
视频处理:视频上传成功,系统自动对视频进行编码处理。
视频删除 :如果该视频已不再使用,可以从媒资系统删除。
7.2、端点续传的解决方案
上传流程如下:
1、上传前先把文件分成块
2、一块一块的上传,上传中断后重新上传,已上传的分块则不用再上传
3、各分块上传完成最后合并文件
7.3、文件分块代码实现,java代码如下,本项目采用的是在前端,用js实现文件分块,原理和java实现的一样。
package com.xuecheng.manage_media;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test