2013-02-14 15 views
8

Vì vậy, nếu tôi chạy:Làm thế nào tôi có thể đọc một webstream trực tiếp trong java bằng cách sử dụng xuggle? (Tôi có thể làm điều đó trong ffmpeg, chỉ cần không 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 

Nó mang lại cho tôi một snapsnot 5 giây của video từ đó webstream đó được đưa vào test.flv. Bây giờ tôi muốn làm điều tương tự trong java sử dụng xuggle trừ mọi tôi cố gắng và mở các lỗi chứa nó ra cho tôi và bộ 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; 
    } 

Có lẽ cách tốt nhất để làm điều đó là để dòng trong ffmpeg để một container xuggle sử dụng inputstream bằng cách nào đó? Hoặc có thể có một cách khác để truyền trực tuyến trong webstream sang java?

Trả lời

6

Chuỗi nguồn RTMP nên theo định dạng sau

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

Sau đó, tôi sẽ khuyên bạn nên tạo cho người đọc như sau

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

Điều này giải quyết vấn đề của bạn?

+0

rtmp: //170.93.143.150/rtplive/e000990f025f0075004d823633235daa có lẽ nên hoạt động sau đó giả sử đây là streamName – jontro

+0

Theo https://groups.google.com/forum/?fromgroups=#!searchin/xuggler-users/playpath/xuggler-users/kXoRdAocXfg/GeobXLlnFfkJ những thông số mà tôi có là chính xác. Nó chỉ cần chuyển urlString vào librtmp. – Grammin

+0

Tôi cũng đã thử tạo trình đọc cách bạn đề xuất và không có may mắn, bất kỳ ý tưởng nào khác? – Grammin

Các vấn đề liên quan