我正在尝试使用JavaCV及其FFmpegFrameGrabber类在Java中创建视频播放器。简而言之,在循环中,我使用
.grab()获取框架,然后将其绘制在面板上
问题是播放器延迟了。例如,经过30秒后,在视频中仅经过20秒。
来源还可以。其他玩家可以正常播放视频流。问题可能是打印时间长。
我不明白的是:“为什么.grab()方法为我带来了10秒钟前的帧?” 它不应该只是抓住正在播放的帧片刻?
(很抱歉,由于没有提供有效的代码,它遍历了不同的大类)
我使用以下采集卡选项(由其他同事选择):
grabber.setImageHeight(480);
grabber.setImageWidth(640);
grabber.setOption("reconnect", "1");
grabber.setOption("reconnect_at_eof", "1");
grabber.setOption("reconnect_streamed", "1");
grabber.setOption("reconnect_delay_max", "2");
grabber.setOption("preset", "veryfast");
grabber.setOption("probesize", "192");
grabber.setOption("tune", "zerolatency");
grabber.setFrameRate(30.0);
grabber.setOption("buffer_size", "" + this.bufferSize);
grabber.setOption("max_delay", "500000");
grabber.setOption("stimeout", String.valueOf(6000000));
grabber.setOption("loglevel", "quiet");
grabber.start();
谢谢