2

我目前正在使用 Xuggler 接收 AR.Drone 的视频流。流格式为 H.264 720p。我可以使用以下代码解码和显示视频,但处理器使用率非常高(双核 2ghz 为 100%),并且流中存在巨大的延迟,并且不断增加。

        final IMediaReader reader = ToolFactory.makeReader("http://192.168.1.1:5555");
        reader.setBufferedImageTypeToGenerate(BufferedImage.TYPE_3BYTE_BGR);

        MediaListenerAdapter adapter = new MediaListenerAdapter()
        {
            public void onVideoPicture(IVideoPictureEvent e)
            {
                currentframe = e.getImage();
                //Draw frame
            }

            public void onOpenCoder(IOpenCoderEvent e) {
                videostreamopened = true;
            }
        };

        reader.addListener(adapter);

        while (!stop) {
            try {
                reader.readPacket();
            } catch(RuntimeException re) {
                // Errors happen relatively often
            }
        }

使用 Xuggler 示例应用程序不能解决任何问题,所以我认为我的方法是正确的。此外,当我将分辨率降低到 360p 时,流是实时的,一切正常。有谁知道这种性能问题是否正常或我必须做些什么来避免这种情况?我对此陌生,我一直无法找到信息,所以有人有建议吗?

顺便说一句,我尝试更改比特率但没有成功。呼叫reader.getContainer().getStream(0).getStreamCoder().setBitRate(bitrate);似乎被忽略了...

提前致谢!

更新: 我得到了很多这样的错误:

9593 [Thread-7] ERROR org.ffmpeg - [h264 @ 0x7f12d40e53c0] mmco: unref short failure
39593 [Thread-7] ERROR org.ffmpeg - [h264 @ 0x7f12d40e53c0] number of reference frames (0+2) exceeds max (1; probably corrupt input), discarding one
39593 [Thread-15] ERROR org.ffmpeg - [h264 @ 0x7f12d40e53c0] reference overflow
39593 [Thread-15] ERROR org.ffmpeg - [h264 @ 0x7f12d40e53c0] decode_slice_header error

更新 2:更改编解码器可以解决上述错误,但性能仍然很差。

4

0 回答 0