JavaCV读取流设置超时
JavaCV中FrameGrabber类可以连接直播流地址, 进行解码, 获取Frame帧信息, 常用方式如下
FrameGrabber grabber = new FrameGrabber("rtsp:/192.168.0.0");
grabber.start();
while(true) {
Frame frame = grabber.grabImage();
// ...
}
实际上内部调用的是ffmpeg的avformat_open_input()方法去解析网络流,而ffmpeg的avformat_open_input()默认是阻塞的。
当遇到解析错误的网络流时,会导致该函数长时间不返回。为此可以设置ffmpeg的-stimeout 的参数,要注意 -stimeout的单位是us 微秒(1秒=1*1000*1000微秒)。
用法(设置在解析的 url 之前):
1.javaCV
FrameGrabber grabber = new FrameGrabber("rtsp:/192.168.0.0");
// 增加超时参数 grabber.setOption("stimoout", "5*1000*1000");
grabber.start; while(true) { Frame frame = grabber.grabImage(); // ... }
2.ffmpeg命令行
ffmpeg -stimeout 5000000 -i rtsp://admin:admin@192.168.7.102:554/h264...........
==========================================================================================
我希望每一篇文章的背后,都能看到自己对于技术、对于生活的态度。
我相信乔布斯说的,只有那些疯狂到认为自己可以改变世界的人才能真正地改变世界。面对压力,我可以挑灯夜战、不眠不休;面对困难,我愿意迎难而上、永不退缩。
其实我想说的是,我只是一个程序员,这就是我现在纯粹人生的全部。
==========================================================================================