利用commonsfileupload+ffmpeg+mencoder完成视频的上传与转换(2)
2009-08-26 16:38
681 查看
这两天完善了一下视频转换这个东西,以前做的那套东西上传完之后就开始转换,无法适应大并发量下的视频转换(我觉得同时有10个ffmpeg进程在转视频服务器肯定要挂掉),所以我用了另一套方案,视频上传之后先不转换,把视频的基本信息存到数据库中,然后由程序定时的从数据库中读取数据,依次转换视频。具体做法是:1、上传文件,将文件名存入数据库,同时在数据库标明videostat字段为0(表示未转换)
2、通过程序,每隔30秒(根据不同情况可以改变)取出一个未转换(videostat=0)且失败次数小于5(confailtime<5)的纪录
3、开始转换视频,这里要先将数据库中videostat字段改为2(表示正在转换)不然30秒钟转换不完下个进程又会读到这条纪录开始转换......
4、等待转换进程结束,如果成功将相应纪录的videostat字段的值改为1(表示转换成功),若转换失败则将失败次数字段加一(confailtime=confailtime+1)
在鼓捣这东西的过程中,遇到了一个问题,如果一个进程先执行p.waitFor();方法而后输出命令行中的结果是不行的,即:
Code
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)中获得,很有用的经验。
posted on 2009-08-04 17:45
2、通过程序,每隔30秒(根据不同情况可以改变)取出一个未转换(videostat=0)且失败次数小于5(confailtime<5)的纪录
3、开始转换视频,这里要先将数据库中videostat字段改为2(表示正在转换)不然30秒钟转换不完下个进程又会读到这条纪录开始转换......
4、等待转换进程结束,如果成功将相应纪录的videostat字段的值改为1(表示转换成功),若转换失败则将失败次数字段加一(confailtime=confailtime+1)
在鼓捣这东西的过程中,遇到了一个问题,如果一个进程先执行p.waitFor();方法而后输出命令行中的结果是不行的,即:
Code
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)中获得,很有用的经验。
posted on 2009-08-04 17:45
相关文章推荐
- 利用commonsfileupload+ffmpeg+mencoder完成视频的上传与转换
- 利用commonsfileupload+ffmpeg+mencoder完成视频的上传与转换(2)
- 利用commons upload+ffmpeg+mencoder完成视频的上传与转换
- 利用commons upload+ffmpeg+mencoder完成视频的上传与转换(1)
- java 整合ffmpeg和mencoder进行视频上传时转换格式功能
- 利用Jakarta commons fileupload组件实现多文件上传(原理)
- 利用ffmpeg+mencoder视频转换的总结(C#)
- JSP+Servlet使用commons.fileupload和commons.io完成图片上传
- Servlet利用Commons FileUpload实现文件上传
- 利用ffmpeg+mencoder视频转换的总结(C#)
- 利用ffmpeg+mencoder视频转换的总结(C#)
- 利用ffmpeg+mencoder视频转换的总结(C#)
- 利用ffmpeg+mencoder视频转换的总结(C#)
- SSH框架下使用Commons FileUpload控件完成多文件上传与下载
- 利用Jakarta commons fileupload组件实现多文件上传
- 利用ffmpeg mencoder视频转换的总结
- [转]利用ffmpeg+mencoder视频转换的总结(C#)
- 利用Jakarta commons fileupload组件实现多文件上传
- 利用Jakarta commons fileupload组件实现多文件上传
- [收藏]利用Jakarta commons fileupload组件实现多文件上传 by hbcui1984