Как сделать проксирование до ffmpeg?

Есть мобильный rtmp клиент и есть ffmpeg rtmp сервер.

Например: ffmpeg -f flv -listen 1 -i rtmp://192.168.0.21:1936/stream/set -c copy file.flv

Всё ок. Стриминг идет, файл заполняется данными.

Теперь появилась необходимость проксировать данные от клиента до сервера. И тут проблема. Если в stdin можно записать данные, то как получить ответ на них? Ведь в stdout мы получаем уже данные кодека, т.е.:

Process ffmpeg = new ProcessBuilder(
    "ffmpeg", // ffmpeg location
    "-f", "flv",
    "-i", "-", // input from stdin
    "-f", "flv",
    "-" // output to stdout
).start();

ServerSocket serverSocket = new ServerSocket(1936);
Socket socket = serverSocket.accept();

System.out.println("connect");

new Thread(() - > {
    int bytes_read;
    byte[] data = new byte[4096];

    try {
        InputStream inputRemote = socket.getInputStream();
        OutputStream outputFFmpeg = ffmpeg.getOutputStream();

        while ((bytes_read = inputRemote.read(data)) != -1) {
            System.out.println("read from remote");
            outputFFmpeg.write(data);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}).start();

new Thread(() - > {
    int bytes_read;
    byte[] reply = new byte[8];

    try {
        InputStream inputFFmpeg = ffmpeg.getInputStream();
        OutputStream outputStream = socket.getOutputStream();

        while ((bytes_read = inputFFmpeg.read(reply)) != -1) {
            System.out.println("read from ffmpeg");
            outputStream.write(reply);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}).start();

Нифига не работает. Поднимать каждый раз через -listen 1?


Ответы (0 шт):