JavaCV:将rtsp流媒体保存为jpg到磁盘

注:文章说明的内容是记录了解的一些常见单位或名词的含义等,如有错误请在评论指出,不胜感激。


前言

图像:一个图像由像素点和像素点的色彩信息构成,常见的像素数据有rgb、yuv、rbga等。

图像容量:例如一幅彩色图像(RGB),分辨率为256×512,每一种颜色用8bit表示,则该彩色图像的数据量为 2565128*3 bit。

视频帧:图像经过编码形成(如H264等,对图像数据进行压缩),视频帧由关键帧(i帧)和B/P帧组成。

帧率:单位FPS(每秒钟要多少帧画面),影响画面流畅度,与画面流畅度成正比。

码率:编码器每秒编出的数据大小,单位是kbps,比如800kbps代表编码器每秒产生800kb(或100KB)的数据。

一、BufferedImage

位于java.awt.image包中,主要用于将一副图片加载到内存。(具体使用方法jdk的doc)

二、JavaCV操作rtsp流媒体

1.依赖库

<dependency>
      <groupId>org.bytedeco</groupId>
      <artifactId>javacv</artifactId>
      <version>1.4.4</version>
    </dependency>

    <dependency>
      <groupId>org.bytedeco.javacpp-presets</groupId>
      <artifactId>ffmpeg-platform</artifactId>
      <version>4.1-1.4.4</version>
    </dependency>

2.代码

public class RtspTest {
  private FFmpegFrameGrabber grabber;
  private String rtsp;
  private boolean isStart = false;
  
  @Test
  public void test01() throws Exception {
    rtsp = "rtsp://admin:123456@192.168.100.100";
    grabber = FFmpegFrameGrabber.createDefault(rtsp);         
    grabber.setOption("rtsp_transport","tcp");                  //tcp方式连接
    grabber.setFrameRate(10);                                   //设置帧率
    grabber.setImageWidth(740);                                 //设置获取的视频宽度
    grabber.setImageHeight(480);                                //设置获取的视频高毒
    grabber.setVideoBitrate(2000000);                           //设置视频比特率
   
    Java2DFrameConverter java2DFrameConverter = new Java2DFrameConverter();
    while(true){
      try{
        if(grabber != null && !isStart) {
          grabber.start();
          isStart = true;
          System.out.println("启动成功");
        }
        if(grabber != null){
          Frame frame = grabber.grabImage();
          if(null == frame){
            continue;
          }
          BufferedImage bufferedImage = java2DFrameConverter.getBufferedImage(frame);
          String fileName = UUID.randomUUID().toString();
          File file = new File("E:\\jpg\\"+fileName+"."+"jpg");
          ImageIO.write(bufferedImage,"jpg",file);
          bufferedImage.flush();
        }
      }catch(FrameGrabber.Exception | RuntimeException e){
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }

3.结果

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值