Я хочу использовать ffmpeg для чтения видео, которое передается из Java InputStream какого-либо вида, без необходимости записывать его в файл, а затем использовать ffmpeg для завершения обработки файла, надеюсь, через его стандарт вывод.
Я хочу сделать это с помощью ProcessBuilder или объектов Process. Возможно ли это сделать, и если да, то как? Если это невозможно с этими объектами, можно ли сделать это с помощью оболочки ffmpeg?
Первоначально я использую команду ffmpeg -i fromServerFromJava.264 -vcodec copy -acodec copy -bsf dump_extra playable.avi
, и мой код выглядит как
var clientSocket = new Socket("192.168.31.150", 9000);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
var bs = Files.readAllBytes(Paths.get("c:/Projects/JavaSocketTest/toServer1.bin"));
outToServer.write(bs);
FileOutputStream fs = new FileOutputStream(
new File("c:\\\\Projects\\\\JavaSocketTest\\\\fromServerFromJava.264"));
do {
int i = clientSocket.getInputStream().read();
fs.write(i);
} while (true);
Но как Могу ли я напрямую передавать данные в ffmpeg из clientSocket.getInputStream()
вместо записи данных в FileOutputStream
?
Я читал, что ffmpeg поддерживает pipe:
, pipe:1
для ввода и вывода. Может быть, есть способ передать ему данные из Java InputStream с помощью каналов?