注:文章说明的内容是记录了解的一些常见单位或名词的含义等,如有错误请在评论指出,不胜感激。
- 前言
- 一、BufferedImage
- 二、JavaCV操作rtsp流媒体
- 1.依赖库
- 2.代码
- 3.结果
前言
图像:一个图像由像素点和像素点的色彩信息构成,常见的像素数据有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.依赖库2.代码org.bytedeco javacv 1.4.4 org.bytedeco.javacpp-presets ffmpeg-platform 4.1-1.4.4
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.结果



