2013-02-14 5 views
8

Donc, si je lance:Comment puis-je lire un flux web en direct dans java en utilisant xuggle? (Je peux le faire dans ffmpeg, tout simplement pas 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 

Il me donne 5 secondes snapsnot de vidéo de ce webstream qui obtient mis en test.flv. Maintenant, je voudrais faire la même chose en Java en utilisant xuggle sauf chaque fois que je tente et ouvrir le conteneur sur elle des erreurs moi et ensembles 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; 
    } 

Peut-être la meilleure façon de le faire est de flux dans ffmpeg à un conteneur xuggle en utilisant inputtream en quelque sorte? Ou peut-être il y a une autre façon de diffuser dans un webstream à Java?

Répondre

6

La chaîne source RTMP doit être dans le format suivant

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

Je recommande la création du lecteur comme le

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

Est-ce résoudre votre problème?

+0

rtmp: //170.93.143.150/rtplive/e000990f025f0075004d823633235daa devrait probablement travailler alors supposer que ce soit le streamName – jontro

+0

Selon https://groups.google.com/forum/?fromgroups=#!searchin/xuggler-users/playpath/xuggler-users/kXoRdAocXfg/GeobXLlnFfkJ les paramètres que j'ai sont corrects. Il devrait juste passer l'URL dans strtrtmp. – Grammin

+0

J'ai aussi essayé de créer le lecteur comment vous avez suggéré, et pas de chance, d'autres idées? – Grammin

Questions connexes