相关疑难解决方法(0)

捕获Apache Commons-Exec的大量输出

我正在用Java编写视频应用程序,执行ffmpeg并将其输出捕获到标准输出.我决定使用Apache Commons-Exec而不是Java Runtime,因为它似乎更好.但是,我很难捕获所有输出.

我认为使用管道是可行的方法,因为它是进程间通信的标准方式.但是,我的设置使用PipedInputStreamPipedOutputStream错误.它似乎工作,但只适用于流的前1042个字节,奇怪的是恰好是值的PipedInputStream.PIPE_SIZE.

我对使用管道并不感兴趣,但我想避免使用磁盘I/O(如果可能),因为数据的速度和数量(512x384分辨率的1m 20s视频产生690 M个管道数据).

关于处理来自管道的大量数据的最佳解决方案的想法?我的两个课程的代码如下.(是的,sleep很糟糕.对此的想法? wait()notifyAll()?)

WriteFrames.java

public class WriteFrames {
    public static void main(String[] args) {
        String commandName = "ffmpeg";
        CommandLine commandLine = new CommandLine(commandName);
        File filename = new File(args[0]);
        String[] options = new String[] { 
                "-i",
                filename.getAbsolutePath(),
                "-an",
                "-f",
                "yuv4mpegpipe",
                "-"};

        for (String s : options) {
            commandLine.addArgument(s);
        }



        PipedOutputStream output = new PipedOutputStream();
        PumpStreamHandler streamHandler = new PumpStreamHandler(output, System.err); …
Run Code Online (Sandbox Code Playgroud)

java pipe apache-commons video-streaming

5
推荐指数
1
解决办法
5240
查看次数

标签 统计

apache-commons ×1

java ×1

pipe ×1

video-streaming ×1