想問下用過javacv或ffmpeg的老哥們,我這邊通過別人回傳遠程rtsp監控地址,根據這個rtsp視頻流使用javacv進行抽幀解碼,但是抽取出來的圖片偶爾會有灰屏或花屏的問題,改成tcp還是這樣,這個問題研究了好久都沒找到解決方法
請問下javacv有沒有什么方法可以判斷每一幀的圖片是否完整的方法
uj5u.com熱心網友回復:
FFmpegFrameGrabber grabber = null;grabber = FFmpegFrameGrabber.createDefault(rtspUrl);
int width = aiVideoConfig.getImageWidth(), height = aiVideoConfig.getImageHeight();
// 使用tcp的方式,不然會丟包很嚴重
grabber.setOption("rtsp_transport", "tcp");
grabber.setOption("framerate", "25");
//grabber.setFormat("gdigrab");
grabber.setImageWidth(width);
grabber.setImageHeight(height);
grabber.setVideoBitrate(3000000);
grabber.setVideoCodec(AV_CODEC_ID_H265);
//grabber.setVideoOption("vcodec", "copy");
grabber.setOption(TimeoutOption.RW_TIMEOUT.getKey(), "10000000");
// 增加超時引數
grabber.setOption("stimoout", "5*1000*1000");
/*grabber.setOption("buffer_size","1024000");
grabber.setOption("stimeout", "8000000");*/
//開始拉流
grabber.start();
Frame frame = null;
ByteArrayOutputStream stream = null;
opencv_core.IplImage img = null;
OpenCVFrameConverter converter = new OpenCVFrameConverter.ToIplImage();
while(true){
frame = grabber.grabFrame();
if (frame.image == null) {
continue;
}
BufferedImage image = null;
image = java2DFrameConverter.getBufferedImage(frame);
if (frame == null) {
continue;
}
stream = new ByteArrayOutputStream();
//生成UUID
String uuid = UUID.randomUUID().toString().toUpperCase();
ImageIO.write(image, "jpg", new File("d:/images/" + uuid + ".jpg"));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/112027.html
標籤:Java相關
