java播放rtsp视频(连接网络摄像头)和截取视频图片

该博客介绍了如何利用JavaCV库从RTSP视频流中抓取图像。通过设置依赖并实现简单的Java代码,可以实现视频播放和帧截图功能。代码示例中,首先配置了FFmpegFrameGrabber以从RTSP地址获取视频,并设置了图像尺寸。然后,提供了两种模式:一是使用CanvasFrame播放视频,二是保存视频帧为图片。
摘要由CSDN通过智能技术生成

[转载]https://blog.csdn.net/qq_35968173/article/details/106409297

依赖

<dependency>
	<groupId>org.bytedeco</groupId>
	<artifactId>javacv-platform</artifactId>
	<version>1.3.1</version>
</dependency>

   
   

    简单代码

    代码是从网络上搬运的,测试过可以使用。

    public class Test {
    	public static void main(String[] args) throws IOException {
    		String file = "rtsp://admin:admin@192.168.3.54/1";
    		FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(file);
    		grabber.setOption("rtsp_transport", "tcp"); // 使用tcp的方式,不然会丢包很严重
    		grabber.setImageWidth(960);
    		grabber.setImageHeight(540);
    		System.out.println("grabber start");
    		grabber.start();
    //1.播放视频
    /* 
    		CanvasFrame canvasFrame = new CanvasFrame("摄像机");
    		canvasFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		canvasFrame.setAlwaysOnTop(true);
    		OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();
    		while (true){
    			Frame frame = grabber.grabImage();
    			opencv_core.Mat mat = converter.convertToMat(frame);
    			canvasFrame.showImage(frame);
    		}
     */
    //2.帧截图
    /*
    		File outPut = new File("E:\\aa.jpg");
    		while (true){
    				Frame frame = grabber.grabImage();
    				if (frame != null) {
    					ImageIO.write(FrameToBufferedImage(frame), "jpg", outPut);
    					grabber.stop();
    					grabber.release();
    					System.out.println("图片已保存");
    					break;
    				}
    		}
     */
    	}
    	/**
    	 * 创建BufferedImage对象
    	 */
    	public static BufferedImage FrameToBufferedImage(Frame frame) {
    		Java2DFrameConverter converter = new Java2DFrameConverter();
    		BufferedImage bufferedImage = converter.getBufferedImage(frame);
    //		bufferedImage=rotateClockwise90(bufferedImage);
    		return bufferedImage;
    	}
    	/**
    	 * 处理图片,将图片旋转90度。
    	 */
    	public static BufferedImage rotateClockwise90(BufferedImage bi) {
    		int width = bi.getWidth();
    		int height = bi.getHeight();
    		BufferedImage bufferedImage = new BufferedImage(height, width, bi.getType());
    		for (int i = 0; i < width; i++)
    			for (int j = 0; j < height; j++)
    				bufferedImage.setRGB(j, i, bi.getRGB(i, j));
    		return bufferedImage;
    	}
    
    评论 1
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值