Как сделать проксирование до 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?