2013-02-14 7 views
8

Also, wenn ich laufen:Wie kann ich einen Live-Webstream in Java mit xuggle lesen? (Ich kann es in ffmpeg tun, nur nicht 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 

Es gibt mir ein 5 Sekunden snapsnot von Video von diesem Webstream, die in test.flv setzen wird. Nun möchte Ich mag die gleiche Sache in Java zu tun, jedes Mal mit xuggle außer ich versuchen, die Behälter, den er Fehler auf mich und setzt x auf -1 öffnen:

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

Vielleicht der beste Weg, es zu tun ist Stream in ffmpeg zu einem xuggle Container mit Inputstream irgendwie? Oder gibt es eine andere Möglichkeit, in einem Webstream nach Java zu streamen?

Antwort

6

Die rtmp Quelle String sollte

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

dann in folgendem Format sein Ich würde empfehlen, den Leser wie folgt

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

Ist dies Ihr Problem lösen?

+0

rtmp: //170.93.143.150/rtplive/e000990f025f0075004d823633235daa sollte wahrscheinlich funktionieren dann davon aus, das die stream ist – jontro

+0

Nach https://groups.google.com/forum/?fromgroups=#!searchin/xuggler-users/playpath/xuggler-users/kXoRdAocXfg/GeobXLlnFfkJ Diese Parameter, die ich habe, sind korrekt. Es sollte einfach den URL-String in librmp übergeben. – Grammin

+0

Ich habe auch versucht, den Leser zu erstellen, wie Sie vorgeschlagen, und kein Glück, andere Ideen? – Grammin