Java获取rtsp视频流,实现rtsp流预览功能,并将视频流每帧保存成图片

先展示maven依赖吧,就一个javacv


			org.bytedeco
			javacv-platform
			1.5.1
			pom
		

然后就是测试类

public static void testzc() throws FrameGrabber.Exception
	{
		String rtsp = "获取的对应rtsp流";

		FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(rtsp);
		grabber.setOption("rtsp_transport", "tcp"); // 使用tcp的方式,不然会丢包很严重
		grabber.setImageWidth(960);
		grabber.setImageHeight(540);
		grabber.start();

		CanvasFrame canvasFrame = new CanvasFrame("正茂");// 创建窗口
		canvasFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置窗口关闭程序是否也跟随关闭
		canvasFrame.setAlwaysOnTop(true);

		OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();
		int ex = 0;
		while (true)
		{
			Frame frame = grabber.grabImage();
			canvasFrame.showImage(frame);
            //程序到这里其实已经实现了预览的功能了,下面的方法就是将流保存成图片


			//opencv_core.Mat
			Mat mat = converter.convertToMat(frame);
			opencv_imgcodecs.imwrite("E:\\tp\\" + ex + ".png", mat);
			
			ex++;
			try
			{
				Thread.sleep(1000);
			}
			catch (InterruptedException e)
			{
				e.printStackTrace();
			} // 1000毫秒刷新一次圖像
		}

	}

还有一个调用这个方法的主类,我也贴出来吧

public static void main(String[] args)
	{
		try
		{
			testzc();
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}

最后我还是想说一句,在调用rtsp流之前,先弄清楚你的摄像头设备的流获取规则,比如我的摄像头牌子是海康的,对应的获取流的规则,我在另个帖子说了,你们要根据你们的牌子找对应的规则获取到流后再做上面的流处理。

你可能感兴趣的:(javavc,java)