当前位置: 主页 > 处理视频 > 视频转换教程 > 视频服务器自动转换视频为FLV格式的方法(2)

视频服务器自动转换视频为FLV格式的方法(2)

2009-02-06   互联网 / 蔡越锐 点击: 标签:视频转换 FLV
  思路:

一、文件上传和文件状态处理

1、 用户上传。

2、 判断是否是FLV文件:

是:直接写MediaLib表,在WaitMedia表中标识为“转换成FLV,未截图”,并复制FLV文件(用户直接上传在temp文件夹中)到用户文件夹。结束程序。

否:查询FileHash表,检查文件“指纹”。

3、 判断文件“指纹”是否已存在。(查询FileHash表)

是:根据MediaLibId查询MediaLib表得到对应的记录,后插入新的记录到MediaLib表,并复制FLV文件和省略图到用户文件夹,并在表MediaLib标识为“转换成FLV,已截图”,结束程序。

否:插入新的记录到WaitMedia表,并在表WaitMedia中标识为“未转换成FLV,未截图”。

到此:上传和文件的状态已做出了明确的标识。接下来开始处理FLV的转换。


二、开始转换FLV:

1、让JAVA开启两个线程,和一个缓存区。

2、线程ToFlvThread : 负责FLV转换的线程。

3、线程GetDataThread : 负责读数据库,表WaitMedia中的数据。

4、线程GetDataThread读数据库的数据到CircularBuffer,并将数据放在缓存区CircularBuffer 中, 线程ToFlvThread将缓存区CircularBuffer的数据取走,并做相应的处理(转换)。

5、CircularBuffer是一个存放数据库记录的数组,两个进程对这个数组进行操作。(说明:启用缓存区是为了提高程序的效率,不要让两个进程的等待时间过长)。

同时,在缓存区中还取得当前运行的线程的进程,和进程运作的最后时间是多少。

(说明:目的是为了防止外部应用程序因出错,而被被卡死。让程序可以主动的杀死被卡死的进程)。

6、当应用程序一启动时,就激活两个进程。


四、两个线程的工作流程:

1、线程GetDataThread读数据库中的数据库,普通的数据库查询操作。

2、线程ToFlvThread :

A 、先判断文件的状态:

  已转未截图 : 那么此时只提供截图操作,截图前程序会先对FLV 文件做修复操作,并更新MediaLib表中的状态为“转换成FLV,已截图,未审 核”,截图成功和更新操作成功后,删除WaitMedia表中的记录,并将文件的 MD5码插入到FileHash中。不成功,将 WaitMedia表中的状态修改为原来的 状态,并错误次数ErrCounter加1

  未转未截图:先选择用 mencoder 还是 Ffmpeg 进行视频flv的转换,转换成功后,进行修复和截图,重复之前的操作。

顶一下
(0)
0%
踩一下
(0)
0%
精彩推荐