想问下用过javacv的兄弟,我这边用javacv抽取图片总是会抽取到灰色图片
public ProcessResult process(TaskContext context) throws Exception{
//rtsp地址
FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(url);
// 使用tcp的方式,不然会丢包很严重
grabber.setOption("rtsp_transport", "tcp");
//开始拉流
//TODO 慢
grabber.start();
//获取摄像头宽高
int width = grabber.getImageWidth();
int height = grabber.getImageHeight();
Frame frame = null;
ByteArrayOutputStream stream = null;
//OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();//转换器
//Java2DFrameConverter bimConverter = new Java2DFrameConverter();
while (true) {
try{
//抽帧
frame = grabber.grabImage();
if (frame.image == null) {
continue;
}
//IplImage grabbedImage = converter.convert(grabber.grabImage());//抓取一帧视频并将其转换为图像,至于用这个图像用来做什么?加水印,人脸识别等等自行添加
BufferedImage image = null;
image = createBufferedImage(frame,image);
stream = new ByteArrayOutputStream();
//生成UUID
//String uuid = UUID.randomUUID().toString().toUpperCase();
//TODO 超级慢
//BufferedImage bufferedImage = Java2DFrameUtils.toBufferedImage(frame);
//输出流
ImageIO.write(image, "jpg", stream);
String base64 = Base64.encode(stream.toByteArray());
}catch (Exception e){
if(grabber != null) {
grabber.close();
}
if(stream != null) {
stream.close();
}
throw e;
}
}
}