我正在Android上使用FFMpegFrameGrabber
来消耗rtmp实时流,该流以30fps的速度流过,我尝试使用setFrameRate(4)
和setOption("framerate","4")
设置抓取器帧速率,以便解决滞后问题,但均无济于事。我还向抓取器中传递了一组选项,例如("fflags","nobuffer")
,这些选项似乎对其他人有用,但是non也起作用。我
grabber = FFmpegFrameGrabber.createDefault(this.listener.getVideoUrlOrPath());
grabber.setTimeout(Math.abs((int) GlobalHandler.configMnger.getConnectionTimeout() / 1000));
grabber.setOption("fflags", "nobuffer");
grabber.setOption("nobuffer", "1");
grabber.setOption("max_delay", "0");
grabber.setOption("hwaccel", "auto");
grabber.setOption("vsync", "0");
grabber.setOption("r", "4");
grabber.setOption("preset", "ultrafast");
grabber.setOption("tune", "zerolatency");
grabber.setOption("analyzeduration", "0");
grabber.setOption("fflags", "flush_packets");
grabber.setOption("fflags", "nofillin");
grabber.setOption("fflags", "noparse");
grabber.setOption("flags", "low_delay");
grabber.setOption("framedrop", "1");
grabber.setOption("fflags", "discardcorrupt");
grabber.setOption("framerate", "4");
grabber.setFrameRate(4);
grabber.setVideoCodec(avcodec.AV_CODEC_ID_H264);
grabber.start();
Frame image;
while((image=grabber.grabImage())!=null){
...
}
请注意,删除所有选项会得到相同的结果,其中我唯一可用的选项是使用以上timout
函数设置的setTimeout
。
请帮忙吗?谢谢!