나는 httprequest를 기다리는 자바 서블릿을 가지고 있는데, 도착하면 FFmpeg를 호출하여 두 개의 비디오를 섞는다. FFmpeg가 끝나면 Java 코드는 혼합 된 비디오를 다시 요청자에게 보내야합니다. 혼합 비디오가 준비되면 FFmpeg를 설정하여 Java 서블릿에 알릴 수 있습니까? 현재 모양의 코드가 FFmpeg가 완전히 완료되지 않은 동안 비디오 전송을 시작합니다.작업이 끝나면 FFmpeg가 자바 코드로 신호를 보내도록 설정하는 방법은 무엇입니까?
thread.sleep() 또는 이와 유사한 메소드를 사용할 수 있지만 연구 작업의 처리 시간을 측정해야하므로 사용할 수 없습니다.
내가 도와 주시면 감사하겠습니다.
String videoId=req.getParameter("id");
String ad= "/var/Videos/ads/angrybirds-adv.mp4";
String url="http://"+RequesterIP+"/"+videoId;
System.out.println("url: "+url);
String output= new SimpleDateFormat("yyyyMMddhhmm'.mp4'").format(new Date());
String videoPath = "/var/Videos/"+output;
List<String> cmds = new ArrayList<>();
cmds.add("ffmpeg");
cmds.add("-i");
cmds.add(url);
cmds.add("-i");
cmds.add(ad);
cmds.add("-filter_complex");
cmds.add("[0:v][1:v] overlay");
cmds.add(videoPath);
ProcessBuilder pb = new ProcessBuilder(cmds);
Process p = pb.start();
/** Terminal **/
final InputStream inStream = p.getErrorStream();
new Thread(new Runnable() {
public void run() {
InputStreamReader reader = new InputStreamReader(inStream);
Scanner scan = new Scanner(reader);
while (scan.hasNextLine()) {
System.out.println(scan.nextLine());
}
}
}).start();
// send the mixed video to the requester
File downloadFile = new File(videoPath);
...
자세한 내용 : 광고 영상은 원본 비디오가 요청자 기계 공용 폴더에있는 FFmpeg를 동일한 시스템에있는 오버레이 비디오, 그리고이다 이 코드의 일부입니다 이 URL을 사용하여 액세스 할 수 있습니다 : http://requester-IP/videoId