javacv FFmpegFrameGrabber 阻塞重连解决方法汇总

devtools/2024/12/22 22:57:01/
  • JavaCV中FrameGrabber类可以连接直播流地址, 进行解码, 获取Frame帧信息, 常用方式如下
FrameGrabber grabber = new FrameGrabber("rtsp:/192.168.0.0");
while(true) {Frame frame = grabber.grabImage();// ...
}
  • 在如上代码中, 若连接地址网络不通, 或者连接超时, 则会出现程序阻塞卡死的情况, . 此时可以增加一个超时参数进行解决.
FrameGrabber grabber = new FrameGrabber("rtsp:/192.168.0.0");
// 增加超时参数
grabber.setOption(TimeoutOption.STIMEOUT.key(), "5000000");
while(true) {Frame frame = grabber.grabImage();// ...
}
  • 在上面的基础上, 若刚开始网络是通的, 程序可以获取到解码后的视频帧. 而在已经运行通了的时候, 网络突然断掉, 此时上面的timeout是不生效的。这个时候就阻塞卡住了。就算网络重新连上后,画面也会不动,没有恢复获取帧,搜了网上的资料有的说:
  • 方法(1)继承重写FrameGrabber类, 把超时callback增加到原代码,这样比较复杂,参考(https://github.com/bytedeco/javacv/blob/master/samples/FFmpegStreamingTimeout.java)
  • 方法(2)使用异步机制:启动一个单独的线程或使用Future/Callable来执行获取帧的操作,并设置合理的超时时间。超过设置的时间没有获取到帧信息后,就进行重连操作,这样就可以达到掉线重连了。

       ExecutorService executor = Executors.newCachedThreadExecutor();

       Callable<Frame> callableGrabImage = () -> grabber.grabImage();

       Future<Frame> futureFrame = executor.submit(callableGrabImage);

       Frame frame=futureFrame .get(10,TimeUnit.SECONDS)

       超过时间没有获取到frame重连就可以了


http://www.ppmy.cn/devtools/120113.html

相关文章

特殊的 BASE64 1

这个一看题目就是base64编码表被改了. 知识点&#xff1a; Base64编码使用一个包含64个字符的字符集&#xff0c;这些字符分别是&#xff1a; 大写字母A-Z小写字母a-z数字0-9特殊字符和/ 这些字符分别对应64个不同的6位二进制数。在补零后形成的8位字节中&#xff0c;实际使用…

爬虫库是什么?是ip吗

爬虫库通常指的是用于网页爬虫&#xff08;Web Scraping&#xff09;开发的代码库或框架&#xff0c;它不是IP地址。以下是关于爬虫库的详细解释&#xff1a; 爬虫库的定义 爬虫库是一些用于简化网络数据抓取过程的工具和框架&#xff0c;通常提供了一系列函数和类&#xff0…

SpringCloud源码:服务端分析(二)- EurekaServer分析

背景 从昨日的两篇文章&#xff1a;SpringCloud源码&#xff1a;客户端分析&#xff08;一&#xff09;- SpringBootApplication注解类加载流程、SpringCloud源码&#xff1a;客户端分析&#xff08;二&#xff09;- 客户端源码分析。 我们理解了客户端的初始化&#xff0c;其实…

OpenCV视频I/O(10)视频采集类VideoCapture之从视频流中检索一帧图像函数 retrieve()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 解码并返回已抓取的视频帧。 cv::VideoCapture::retrieve() 是 VideoCapture 类的一个成员函数&#xff0c;用于从视频流中检索一帧图像。 retr…

【递归】9. leetcode 104 二叉树的最大深度

1 题目描述 题目链接&#xff1a;二叉树的最大深度 2 解答思路 递归分为三步&#xff0c;接下来就按照这三步来思考问题 第一步&#xff1a;挖掘出相同的子问题 &#xff08;关系到具体函数头的设计&#xff09; 第二步&#xff1a;只关心具体子问题做了什么 &#xff0…

实现微信小程序中点击单词显示在input的交互功能指南

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

JMeter压测HTTPS 在window 11处理SSL证书认证

在此位置&#xff0c;找到chrome 的证书 证书到出到指定的路径&#xff0c; 利用jdk中的keytool.exe工具&#xff0c;重新生成证书 crm 去到命令窗口&#xff0c;再去到JDK路径下&#xff0c;如下 输入 keytool -import -alias “zhengshu.store” -file “D:\Program F…

LeetCode[中等] 279.完全平方

给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;而 3 和 11 不是。 1…