读书人

java Runtime Process调用可执行文件

发布时间: 2012-09-01 09:33:03 作者: rapoo

java Runtime Process调用可执行文件,子进程阻塞


我用java调用mencoder实施转码,但是转码过程中出现子进程阻塞,而且还是看了API才知道这个问题的。因为mencoder的控制台输出信息很多,把缓存区所有的空间占满了,所以程序不能执行后面的程序,mencoder就只能转码28秒的视频,所以需要建立线程及时清空缓存区。

新建一个类StreamGobble类:

在main函数中调用Runtime/Process执行转码

view plaincopy to clipboardprint?
  1. String?line?=?value.toString();???String[]?str?=?line.split("?");???
  2. String?fOutput?=?null;???fOutput?=?str[3]?+?".flv";???
  3. Process?process?=?null;???try?{???
  4. ????Runtime?runtime?=?Runtime.getRuntime();???????process?=?runtime?.exec("mencoder?-ofps?30000/1001?-vf?harddup"???
  5. ????????+?"?/user/student/data/"+str[0]???????????+?"?-ss?"+str[1]+"?-endpos?"+str[2]+"?-sws?2?-of?lavf?-ovc?lavc?-lavcopts?"???
  6. ????????+?"vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3?"???????????+?"-nosound?-srate?22050?-o?/user/student/data/"+fOutput);???
  7. ????new?StreamGobble(process.getInputStream(),?"INFO").start();???????new?StreamGobble(process.getErrorStream(),?"ERROR").start();???
  8. ????int?status?=?process.waitFor();???????System.out.println("Process?exitValue:?"?+?status);???
  9. ????}?catch?(Throwable?t)?{???????????t.getStackTrace();???
  10. ????}?finally?{???????????if?(process?==?null)???
  11. ????????????process.destroy();???????????process?=?null;???
  12. ????}?

读书人网 >软件架构设计

热点推荐