【问题标题】:How can I read a live webstream in java using xuggle? (I can do it in ffmpeg, just not xuggle)如何使用 xuggle 在 java 中读取实时网络流? (我可以在 ffmpeg 中做到这一点,只是不能 xuggle)
【发布时间】:2013-01-30 12:12:05
【问题描述】:

所以如果我跑:

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

它为我提供了来自该网络流的 5 秒视频快照,该视频被放入 test.flv。 现在我想在 java 中使用 xuggle 做同样的事情,除了每次我尝试打开容器时它都会出错并将 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?

【问题讨论】:

    标签: java ffmpeg live-streaming xuggle


    【解决方案1】:

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

    这能解决您的问题吗?

    【讨论】:

    • rtmp://170.93.143.150/rtplive/e000990f025f0075004d823633235daa 应该可以工作然后假设这是streamName
    • 根据groups.google.com/forum/?fromgroups=#!searchin/xuggler-users/…,我拥有的那些参数是正确的。它应该只是将 urlString 传递给 librtmp。
    • 我也尝试按照您的建议创建阅读器,没有运气,还有其他想法吗?
    • 你得到什么错误,我们在生产代码中使用这个+错误处理
    猜你喜欢
    • 2012-09-05
    • 2011-09-04
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 2013-04-03
    相关资源
    最近更新 更多