Здесь я пытаюсь кодировать поток живого RTMP приходит от сервера Flash Media Server и трансляции потока низкой скорости передачи бит с помощью avconv инструмента Libav. Libav установлен на Ubuntu OS. Закодированный поток работает для 8 минут. Поскольку инструмент avconv запускается с использованием среды времени java. Java код приведен ниже -avconv инструмента выполнен из Java во время выполнения остановки кодирования через 8 минут
public class RunnableStream implements Runnable
{
String inStream,outStream,width,height,bitRate,frameRate,fname,line,ar,audioBitRate,audioChannel;
public RunnableStream(String fname,String inStream,String outStream,String ar,String audioBitRate,String audioChannel,String width,String height,String bitRate,String frameRate)
{
this.fname=fname;
this.inStream=inStream;
this.outStream=outStream;
this.width=width;
this.height=height;
this.bitRate=bitRate;
this.frameRate=frameRate;
this.ar=ar;
this.audioBitRate=audioBitRate;
this.audioChannel=audioChannel;
}
public void run() {
Process pr;
try {
pr = Runtime.getRuntime().exec("avconv -async 15 -i "+inStream+" -shortest -s "+width +"*"+height +" -r " +frameRate+" -b:v "+bitRate+" -ab "+audioBitRate+" -ac "+audioChannel+" -ar "+ar+" -f flv "+outStream);
InputStream in1 = pr.getInputStream();
InputStream in = pr.getErrorStream();
int c1;
while ((c1 = in1.read()) != -1)
{
System.out.print((char)c1);
}
int c;
while ((c = in.read()) != -1)
{
System.out.print((char)c);
}
pr.waitFor();
in.close();
in1.close();
}catch(Exception e){e.printStackTrace();}
}
}
Но когда та же схема кодирования или команда применяется непосредственно к командной строке, то он может работать в течение не менее чем 1 час. Командная строка заявление, как указано ниже -
avconv -async 15 -i rtmp://IP/live/streamname -shortest -s 176*144 -r 10 -b:v 56k -ab 12k -ac 1 -ar 22050 -f flv rtmp://IP/live/streamname2
Я понимаю, что это слишком поздно, но, возможно, этот проект будет полезен для вас: https://github.com/vbauer/avconv4java –