2013-02-14 38 views
8

所以,如果我運行:如何使用xuggle在java中讀取實時webstream? (我能做到這一點的ffmpeg中,只是沒有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 

它給我的視頻從被投入test.flv是webstream 5秒snapsnot。 現在我想用xuggle除了每次我嘗試做同樣的事情在Java和打開容器它的錯誤出在我身上,並設置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; 
    } 

也許這樣做是最好的方式以某種方式使用inputstream將ffmpeg中的數據流傳輸到一個xuggle容器?或者,也許有另一種方式流到一個webstream到Java?

回答

6

的RTMP源字符串應在以下格式

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

然後我會建議建立像下面

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

這是否解決您的問題,讀者?

+0

RTMP://170.93.143.150/rtplive/e000990f025f0075004d823633235daa或許應該工作,那麼假設這是streamName中 – jontro 2013-02-25 17:45:04

+0

據https://groups.google.com/forum/?fromgroups=#!searchin/xuggler-users/playpath/xuggler-users/kXoRdAocXfg/GeobXLlnFfkJ我擁有的這些參數都是正確的。它應該只是將urlString傳遞給librtmp。 – Grammin 2013-02-25 21:50:16

+0

我也試過創建讀者如何建議,並沒有運氣,任何其他的想法? – Grammin 2013-02-25 22:02:31

相關問題