我正在使用JavaCV处理RTSP视频流。我要做的是抓取RTSP流的每一帧并将其写入JPG文件。这是我的代码:
package test;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class PravegaCameraconnector
{
public static void grabberVideoFramer() {
Frame frame = null;
int flag = 0;
int max_value = 9999999;
FFmpegFrameGrabber fFmpegFrameGrabber = new FFmpegFrameGrabber("rtsp://192.168.1.11:8554/stream");
fFmpegFrameGrabber.setframeRate(30);
try {
fFmpegFrameGrabber.start();
BufferedImage bImage = null;
while (flag < max_value) {
String fileName = "/home/rtsp/tmp/imgs/img_" + String.valueOf(flag) + ".jpg";
File outPut = new File(fileName);
frame = fFmpegFrameGrabber.grabImage();
if (frame != null) {
ImageIO.write(FrameToBufferedImage(frame),"jpg",outPut);
}
flag++;
if (flag == max_value) {
flag = 0;
}
}
fFmpegFrameGrabber.stop();
} catch (IOException E) {
// nothing to do
}
}
public static BufferedImage FrameToBufferedImage(Frame frame) {
Java2DFrameConverter converter = new Java2DFrameConverter();
BufferedImage bufferedImage = converter.getBufferedImage(frame);
return bufferedImage;
}
public static void main(String[] args) {
grabberVideoFramer();
}
}
它可以工作,但是如果RTSP关闭,该代码将继续运行,以使CPU使用率为100%。
那么有可能检测RTSP流源是打开还是关闭?
while (flag < max_value) {
if (RTSP source is down) { // how to detect whether the source is down or not???
break;
}
// grab frame and write it into JPG file
}