ffmpeg超时设置
一般情况下,ffmpeg拉流过程中如果摄像头突然关闭了获取网络出现问题,就会导致线程阻塞,这时就需要设置连接超时参数,对进程进行监听,连接不到rtsp流的情况下会退出进程,便于我们知道录像出现问题。
以下设置超时间时需要注意的问题:
使用参数 : -timeout 位置:-i前
如果-timeout参数值过小就会报错比如:
ffmpeg -rtsp_transport tcp -timeout 2000 -i rtsp://${username}:${password}@${ip}:554/h264/ch1/sub/av_stream -vcodec h264 -f mp4 E:\lastTimeoutTestlast.mp4
因为数值单位:us 微秒(1秒=1*1000*1000微秒)
[in#0 @ 000001a87876d740] Error opening input: Operation not permitted
Error opening input file rtsp://admin:iot123456@10.10.10.233:554/h264/ch1/sub/av_stream.
Error opening input files: Operation not permitted
报错容易让人误解为参数不可用,但其实是数值问题,注意单位是us 微秒。
正确数值举例:
ffmpeg -rtsp_transport tcp -timeout 2000000 -i rtsp://${username}:${password}@${ip}:554/h264/ch1/sub/av_stream -vcodec h264 -f mp4 E:\lastTimeoutTest.mp4
javacv超时设置
使用javacv如果使用ffmpeg4.0就不能使用-timeout了,不然会出现 unknown error,使用6.0版本就不变。
注意:如果使用4.0版本进行多路摄像头(我使用的是5路或六路)拼接并录像,使用java执行命令的形式,就有时会出现进程阻塞,无法录像,只需将ffmpeg版本升到6.0即可,当然记住要使用-timeout参数。
只需要改用 -stimeout即可,使用方式同上
在java使用api或者使用
ffmpegPath = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
执行cmd都是一样需要上面的参数。
以上内容如果对你有帮助,麻烦给个赞!~~~~谢谢!