package com.hxzkoa.util;
|
|
import org.springframework.stereotype.Component;
|
|
import java.io.InputStream;
|
import java.io.InputStreamReader;
|
import java.io.OutputStream;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
@Component
|
public class RtspToMP4 {
|
public class In implements Runnable{
|
private InputStream inputStream;
|
|
public In(InputStream inputStream) {
|
this.inputStream = inputStream;
|
}
|
@Override
|
public void run() {
|
try {
|
//转成字符输入流
|
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "gbk");
|
int len = -1;
|
char[] c = new char[1024];
|
//读取进程输入流中的内容
|
while ((len = inputStreamReader.read(c)) != -1) {
|
String s = new String(c, 0, len);
|
System.out.print(s);
|
}
|
}catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
public Process StartRecord(String ffmpegPath,String streamUrl, String FilePath){
|
ProcessBuilder processBuilder = new ProcessBuilder();
|
//定义命令内容
|
List<String> command = new ArrayList<>();
|
command.add(ffmpegPath);
|
command.add("-rtsp_transport");
|
command.add("tcp");
|
command.add("-y");
|
command.add("-i");
|
command.add(streamUrl);
|
command.add("-c");
|
command.add("copy");
|
command.add("-f");
|
command.add("mp4");
|
command.add(FilePath);
|
processBuilder.command(command);
|
System.out.println("脚本:" + command.toString());
|
//将标准输入流和错误输入流合并,通过标准输入流读取信息
|
processBuilder.redirectErrorStream(true);
|
try {
|
//启动进程
|
Process process = processBuilder.start();
|
System.out.println("开始时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis())));
|
//获取输入流
|
InputStream inputStream = process.getInputStream();
|
Thread inThread = new Thread(new In(inputStream));
|
inThread.start();
|
return process;
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
public boolean stopRecord(Process process) {
|
try {
|
OutputStream os = process.getOutputStream();
|
os.write("q".getBytes());
|
InputStream inputStream = process.getInputStream();
|
Thread inThread = new Thread(new In(inputStream));
|
inThread.interrupt();
|
// 一定要刷新
|
os.flush();
|
os.close();
|
} catch (Exception err) {
|
err.printStackTrace();
|
return false;
|
}
|
return true;
|
}
|
}
|