java调用外部程序主要使用ProcessBuilder(当然还有另外一种方法Runtime,本文暂不介绍)
拿一个具体例子做主要介绍:
java调用ffmpeg对视频做处理,(ffmpeg可以在dos中输入命令行来进行操作视频)
dos命令为:ffmpeg -re -i test.mp4 -vcodec libx264 -acodec aac -strict -2 -f flv rtmp://localhost:1357/live/room
在java中:
下面参数为:ffmpegPath是ffmpeg的软件的绝对路径,localvideo是本地视频的绝对路径,比如test.mp4,rtmpPath是输出为rtmp流的字符串,比如rtmp://localhost:1357/live/room
public boolean videoToRtmp(String ffmpegPath,String localvideo,Strting rtmpPath)
{
List<String> list = new ArrayList<>();
list.add("");
list.add("ffmpeg ");
list.add("-re");
list.add("-i");
list.add("localvideo");
list.add("-vcodec");
list.add("libx264");
list.add("-acodec");
list.add("aac");
list.add("-strict");
list.add("-2");
list.add("-f");
list.add("flv");
list.add("rtmpPath");
ProcessBuilder builder = new ProcessBuilder();
builder.command(list);//将参数添加进去
Process p = builder.start();//启动外部程序执行
InputStream in = p.getInputStream();
InputStream error = p.getErrorStream();
while(in.avaiable())
{
System.out.println((char)in.read());//输出运行的信息
}
while(error.avaiable())
{
System.out.println((char)error.read());//输出错误的信息
}
error.close();
in.close();
p.destroy();
}