ffmpeg - 使用 Xuggler 显示 RTSP-Stream : org. ffmpeg - [h264 @ 15AC7660] 解码 MB 34 60、字节流 (td) 时出错

标签 ffmpeg rtsp xuggler

我刚开始接触 RTSP-Streams 和 Xuggler,所以我真的不知道该怎么做。

我正在尝试在 Java-Swing 窗口中显示 IP 摄像机的主流并获取以下内容:

enter image description here

我也收到这些错误:

13:21:45.941 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 8 7, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 34 60, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 8 36, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 68 62, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 118 38, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 60 62, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] cabac decode of qscale diff failed at 1 7
13:21:46.940 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 1 7, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 28 37, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 18 35, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 17 41, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 53 32, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 31 29, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 21 29, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] left block unavailable for requested intra mode at 0 35
13:21:49.902 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 0 35, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 17 21, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 46 10, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 109 28, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 60 10, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 11 14, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 101 9, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 76 9, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 86 11, bytestream (td)
17:47:04.192 [main] ERROR org.ffmpeg - [h264 @ 15AC7660] error while decoding MB 60 24, bytestream (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:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c7b7a6b4b4b0a8b5a387f6fef5e9f6f1ffe9f6e9f5f5" rel="noreferrer noopener nofollow">[email protected]</a>: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);
            }
        }
    }
}

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

我将 Xuggler 5.4 与 Maven 结合使用。

这个问题可能有一个简单的解决方案,但我搜索了整个互联网但没有找到,所以我将不胜感激。谢谢!

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

最佳答案

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

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

    IContainer streamContainer = IContainer.make();        
    int result = streamContainer.open("rtsp://user:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0c7c6d7f7f7b637e684c3d353e223d3a34223d223e3e" rel="noreferrer noopener nofollow">[email protected]</a>:554/Streaming/Channels/1", IContainer.Type.READ, null, true, false, im, null);

    if (result < 0) {
        // Error
    }

    IMediaReader mediaReader = ToolFactory.makeReader(streamContainer);

关于ffmpeg - 使用 Xuggler 显示 RTSP-Stream : org. ffmpeg - [h264 @ 15AC7660] 解码 MB 34 60、字节流 (td) 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36498689/

相关文章:

ffmpeg - 如何覆盖多个旋转的文本和视频

如果目标分辨率大于源,ffmpeg 缩放不起作用

ffmpeg - 将 rtmp 流转换为 rtsp 和 http 流

c - gstreamer 代理 rtspsrc 到 tcpserver

ffmpeg - 使用 Xuggle 对 HTTP 实时流进行编码

ffmpeg - 我想知道为什么 logcat 说 "NO SUCH A FILE OR DIRECTORY(2)"

cdn - Wowza+AWS Cloudfront 流可用性延迟

java - Xuggler 在 64 位中导致 JVM 崩溃

java - Swing 在不同的平台上工作不同

ffmpeg concat 视频和图像问题