利用commonsfileupload+ffmpeg+mencoder完成视频的上传与转换(2)

这两天完善了一下视频转换这个东西,以前做的那套东西上传完之后就开始转换,无法适应大并发量下的视频转换(我觉得同时有10个ffmpeg进程在转视频服务器肯定要挂掉),所以我用了另一套方案,视频上传之后先不转换,把视频的基本信息存到数据库中,然后由程序定时的从数据库中读取数据,依次转换视频。具体做法是:1、上传文件,将文件名存入数据库,同时在数据库标明videostat字段为0(表示未转换)

  2、通过程序,每隔30秒(根据不同情况可以改变)取出一个未转换(videostat=0)且失败次数小于5(confailtime<5)的纪录

  3、开始转换视频,这里要先将数据库中videostat字段改为2(表示正在转换)不然30秒钟转换不完下个进程又会读到这条纪录开始转换......

  4、等待转换进程结束,如果成功将相应纪录的videostat字段的值改为1(表示转换成功),若转换失败则将失败次数字段加一(confailtime=confailtime+1)

  在鼓捣这东西的过程中,遇到了一个问题,如果一个进程先执行p.waitFor();方法而后输出命令行中的结果是不行的,即:

ContractedBlock.gif ExpandedBlockStart.gif Code
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->int flag = p.waitFor();
InputStream inErr 
= p.getErrorStream();
            InputStream inIns 
= p.getInputStream();
            BufferedReader brErr 
= new BufferedReader(new InputStreamReader(
                    inErr));
            BufferedReader brIns 
= new BufferedReader(new InputStreamReader(
                    inIns));
            
// inErr读取输出信息开始
            String strsErr = "";
            String strErr 
= brErr.readLine();
            
while (strErr != null) {
                strsErr 
= strsErr + strErr + "\n";
                System.out.println(strErr);
                strErr 
= brErr.readLine();
            }
            
// inErr读取输出信息结束

            
// inIns读取输出信息开始
            String strsIns = "";
            String strIns 
= brIns.readLine();
            
while (strIns != null) {
                strsIns 
= strsIns + strIns + "\n";
                System.out.println(strIns);
                strIns 
= brErr.readLine();
            }

如果这样执行的话进程会挂起,无法继续下午,而正确的方法是先读取命令行的数据,再来waitFor();

还有一点需要注意的是获得命令行的输出结果先要从错误流中获得,即(ErrorStream),而非从输入流(InputStream)中获得,很有用的经验。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值