在工作中常常会接触到图片与视频的处理,下面简单介绍下我接触过的视频断点续传与视频转码相关思路。java语言编写,文件存储我们用的GFS,视频转码用的ffmpeg,发消息用的ActiveMQ,数据库用的mysql,另外还用到了redis保存片信息。
GFS,ffmpeg,activeMQ,mysql,redis我这里只是简单介绍下思路
- 为了实现断点续传(传到一半,下次接着传)呢,采用的是分块上传的方法。当有一个上传请求的时候,flash首先计算视频的md5码,并传给服务器端,server端验证flash身份。如果身份通过,通过该md5去数据库中查找,是否存在改MD5的数据,也就是这个视频是否上传过。
-
如果没有上传过,从第一块开始上传,如果上传过,看是否已经上传完,如果上传完返回视频封面图,地址,视频时长等。如果没有从redis中根据md5获取已经上传的块编号,总块数给flash端。
-
flash发送下一块的数据流,总块数,已经上传的块编号给服务器端
-
服务器端接收数据流,合并到之前的块文件中,更新redis中已经上传的块编号。
-
如果上传完所有块文件,将文件复制到真正的存储地址,删除临时块文件信息,更新数据库信息,推送索引,向消息队列发送转码请求等。