Передача потока вывода в ffmpeg через Runtime.exe c () - PullRequest
0 голосов
/ 07 мая 2020

Я хочу использовать 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 с помощью каналов?

...