2013-02-14 9 views
8

Quindi, se corro:Come posso leggere un webstream live in java usando xuggle? (Posso farlo in ffmpeg, solo che non xuggle)

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 

Mi dà un cinque secondi snapsnot di video da quel webstream che viene messo in test.flv. Ora vorrei fare la stessa cosa in Java utilizzando xuggle tranne ogni volta che provo e aprire gli errori contenitore fuori su di me e imposta x -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; 
    } 

Forse il modo migliore per farlo è quello di flusso in ffmpeg in un contenitore xuggle utilizzando inputstream in qualche modo? O forse c'è un altro modo per lo streaming in un webstream a Java?

risposta

6

La stringa di origine RTMP dovrebbe essere nel seguente formato

String rtmpSourceUrl = "rtmp://hostname/appName/streamName"; 

Poi mi sento di raccomandare la creazione del lettore come la seguente

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); 

Questo risolto il problema?

+0

rtmp: //170.93.143.150/rtplive/e000990f025f0075004d823633235daa dovrebbe probabilmente lavorare allora assumendo questo è lo streamName – jontro

+0

Secondo https://groups.google.com/forum/?fromgroups=#!searchin/xuggler-users/playpath/xuggler-users/kXoRdAocXfg/GeobXLlnFfkJ quei parametri che ho sono corretti. Dovrebbe solo passare urlString in librtmp. – Grammin

+0

Ho anche provato a creare al lettore come hai suggerito, e senza fortuna, qualche altra idea? – Grammin