descargar - ¿Cómo puedo leer un webstream en vivo en Java usando xuggle?(Puedo hacerlo en ffmpeg, pero no en Xuggle)
xuggler descargar (1)
La cadena fuente rtmp debe estar en el siguiente formato
String rtmpSourceUrl = "rtmp://hostname/appName/streamName";
Entonces recomendaría crear el lector como el siguiente
IContainerFormat inFormat = IContainerFormat.make();
inFormat.setInputFormat("flv"); // set the input format to avoid FFMPEG
// probing
IMediaReader reader = ToolFactory.makeReader(rtmpSourceUrl);
reader.setQueryMetaData(false);
reader.setBufferedImageTypeToGenerate(-1);
reader.getContainer().setForcedVideoCodec(ID.CODEC_ID_FLV1);
reader.getContainer().open(rtmpSourceUrl , IContainer.Type.READ, inFormat,
true, false);
¿Esto resuelve tu problema?
Entonces si corro:
ffmpeg -t 10 -re -i "rtmp://170.93.143.150/rtplive/ app=rtplive/ playpath=e000990f025f0075004d823633235daa swfUrl=http://www.chart.state.md.us/video/mediaplayer/player.swf pageUrl=http://www.chart.state.md.us/video/video.asp?feed=e000990f025f0075004d823633235daa stop=5000 flashver=`LNX 11,2,202,262` live=true" test.flv -report
Me da un snapsnot de video de 5 segundos de esa webstream que se pone en test.flv. Ahora me gustaría hacer lo mismo en Java usando xuggle, excepto cada vez que intento y abro el contenedor que me falla y establece x en -1:
public IMediaReader grabStream(IMediaReader reader) throws IOException
{
String rtmp = "rtmp://170.93.143.150/rtplive/";
rtmp = rtmp + " app=rtplive/";
rtmp = rtmp + " playpath=e000990f025f0075004d823633235daa";
rtmp = rtmp + " swfUrl=http://www.chart.state.md.us/video/mediaplayer/player.swf";
rtmp = rtmp + " pageUrl=http://www.chart.state.md.us/video/video.asp?feed=e000990f025f0075004d823633235daa";
rtmp = rtmp + " flashver=`LNX 11,2,202,262`";
rtmp = rtmp + " live=true";
IContainer container = IContainer.make();
IMediaReader newReader = ToolFactory.makeReader(container);
int x = container.open(rtmp, IContainer.Type.READ, null, true, false);
if (x < 0)
{
IError ie = IError.make(x);
System.out.println("Open error: " + ie.getType().toString());
throw new RuntimeException("failed to open with error" + x);
}
return newReader;
}
¿Quizás la mejor manera de hacerlo es transmitir en ffmpeg a un contenedor de xuggle usando inputstream de alguna manera? ¿O tal vez hay otra forma de transmitir en una webstream a Java?