在解码MB 34 60,字节流(td)

时间:2016-04-08 11:41:43

标签: ffmpeg rtsp xuggler

我很擅长展示RTSP-Streams和Xuggler,所以我真的不知道该怎么做。

我试图在Java-Swing窗口中显示我的IP-Camera的Main-Stream并得到这个:

enter image description here

我也遇到了这些错误:

  

13:21:45.941 [main] ERROR org.ffmpeg - [h264 @ 15AC7660]错误解码MB 8 7,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - 解码MB 34 60时出现[h264 @ 15AC7660]错误,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - 解码MB 8 36时出现[h264 @ 15AC7660]错误,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660]错误解码MB 68 62,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660]错误解码MB 118 38,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660]错误解码MB 60 62,字节流(td)
  17:47:04.192 [主要] ERROR org.ffmpeg - [h264 @ 15AC7660] qscale diff的cabac解码在1 7时失败   13:21:46.940 [main] ERROR org.ffmpeg - [h264 @ 15AC7660]错误解码MB 1 7,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660]错误解码MB 28 37,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - 解码MB 18 35时出现[h264 @ 15AC7660]错误,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660]错误解码MB 17 41,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660]错误解码MB 53 32,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - 解码MB 31 29时出现[h264 @ 15AC7660]错误,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660]错误解码MB 21 29,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660]左侧块无法在0 35请求的帧内模式   13:21:49.902 [main] ERROR org.ffmpeg - [h264 @ 15AC7660]错误解码MB 0 35,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660]错误解码MB 17 21,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660]错误解码MB 46 10,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - 解码MB 109 28时出现[h264 @ 15AC7660]错误,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660]错误解码MB 60 10,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - 解码MB 11 14时出现[h264 @ 15AC7660]错误,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - 解码MB 101 9时出现[h264 @ 15AC7660]错误,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660]错误解码MB 76 9,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660]错误解码MB 86 11,字节流(td)
  17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660]错误解码MB 60 24,字节流(td)

这是我使用的代码的一部分:

private IMediaListener mediaListener = new MediaListenerAdapter() {

    @Override
    public void onVideoPicture(IVideoPictureEvent event) {
        try {
            BufferedImage bi = event.getImage();
            if (bi != null)
                updateWindow(bi);
        } catch (Exception ex) {
            LOG.error("Error getting Image from IVideoPictureEvent: " + ex);
        }
    }
};

public DisplayWindow() {
    display();
}

private void display() {
    IMediaReader mediaReader = ToolFactory
            .makeReader("rtsp://user:password@192.168.1.22:554/Streaming/Channels/1");

    mediaReader
            .setBufferedImageTypeToGenerate(BufferedImage.TYPE_3BYTE_BGR);
    mediaReader.setQueryMetaData(false);
    mediaReader.addListener(mediaListener);

    openWindow();

    while (true) {
        IError error = null;
        if(mediaReader != null){
            error = mediaReader.readPacket();
            if(error != null){
                LOG.error("Error at mediaReader.readPacket(): " + error);
            }
        }
    }
}

显示子流(分辨率较低)效果很好。

我在Maven中使用Xuggler 5.4。

这个问题可能有一个简单的解决方案,但是我已经搜索了整个互联网并找不到它,所以我很感激任何帮助。谢谢!

更新:我也很高兴(免费!)替代Xuggler。

1 个答案:

答案 0 :(得分:2)

我通过强制TCP传输修复了HIKVision相机的错误。要强制TCP,需要手动创建IContainer并在IMetaData中传递设置:

    IMetaData im = IMetaData.make();
    im.setValue("rtsp_transport", "tcp");

    IContainer streamContainer = IContainer.make();        
    int result = streamContainer.open("rtsp://user:password@192.168.1.22:554/Streaming/Channels/1", IContainer.Type.READ, null, true, false, im, null);

    if (result < 0) {
        // Error
    }

    IMediaReader mediaReader = ToolFactory.makeReader(streamContainer);