前言:
现时各位老铁们对“java图片转视频流”大致比较关切,同学们都需要知道一些“java图片转视频流”的相关内容。那么小编也在网络上汇集了一些关于“java图片转视频流””的相关知识,希望小伙伴们能喜欢,大家一起来学习一下吧!废话不多说,直接开干。。。[酷拽][酷拽][酷拽]
运行依赖
首先,需要将JavaCV库添加到项目的依赖中。可以从官方网站或Maven中央仓库中下载JavaCV库。确保项目中包含所需要的JavaCV Jar文件。我这里引入的是比较新的依赖包1.5.9版本的。
<dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv</artifactId> <version>1.5.9</version></dependency><dependency> <groupId>org.bytedeco</groupId> <artifactId>ffmpeg</artifactId> <version>6.0-1.5.9</version> <classifier>windows-x86_64</classifier></dependency>实现步骤创建FFmpegFrameGrabber采集器,设置采集参数,包括帧率、视频分辨率等等(非必须),然后启动采集器。
// 创建采集器FrameGrabber grabber = new FFmpegFrameGrabber("desktop");// 设置帧率grabber.setFrameRate(30);// 设置比特率grabber.setVideoBitrate(4000000);// Windows 的 GDIGrab 接口grabber.setFormat("gdigrab");// 视频尺寸grabber.setOption("video_size", "1920x1080");// 启动采集器grabber.start();创建FFmpegFrameRecorder录制器,设置录制参数,包括帧率、分辨率等等(非必须),然后启动录制器。
// 创建录制器FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(output, 1920, 1080, 0);recorder.setVideoBitrate(grabber.getVideoBitrate());recorder.start();循环采集帧播放并推流/录制
CanvasFrame canvasFrame = new CanvasFrame("Desktop Example");canvasFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Frame frame;// 获取视频帧。while ((frame = grabber.grab()) != null) {// 显示视频帧。canvasFrame.showImage(frame);recorder.record(frame);}清理释放资源
// 停止抓取grabber.stop();// 关闭录制器recorder.stop();// 释放资源canvasFrame.dispose();功能测试
// start("rtsp://127.0.0.1:554/test");start("desktop.mp4");完整示例
/*** 桌面采集播放** @author Brant Liu*/public class GrabberRecorderDesktopExample { //录制时间(秒) private final static int recordTime = 10; public static void start(String output) throws Exception { FFmpegLogCallback.setLevel(avutil.AV_LOG_DEBUG); // 创建采集器 FrameGrabber grabber = new FFmpegFrameGrabber("desktop"); // 设置帧率 grabber.setFrameRate(30); // 设置比特率 grabber.setVideoBitrate(4000000); // Windows 的 GDIGrab 接口 grabber.setFormat("gdigrab"); // 视频尺寸 grabber.setOption("video_size", "1920x1080"); // 启动采集器 grabber.start(); // 创建录制器 FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(output, 1920, 1080, 0); recorder.setVideoBitrate(grabber.getVideoBitrate()); recorder.start(); CanvasFrame canvasFrame = new CanvasFrame("Desktop Example"); canvasFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //获取当前系统时间 long startTime = System.currentTimeMillis(); long videoTS; Frame frame; // 获取视频帧。 while ((frame = grabber.grab()) != null) { // 窗口是否关闭 if (!canvasFrame.isDisplayable()) { break; } // 显示视频帧。 canvasFrame.showImage(frame); recorder.record(frame); long endTime = System.currentTimeMillis(); long useTime = (endTime - startTime) / 1000; videoTS = (endTime - startTime) * 1000; recorder.setTimestamp(videoTS); // 录制10秒钟。 if (useTime > recordTime) { break; } // 休眠 50 毫秒。 Thread.sleep(50); } // 关闭采集器 grabber.stop(); // 关闭录制器 recorder.stop(); // 释放资源 canvasFrame.dispose(); } public static void main(String[] args) throws Exception { // start("rtsp://127.0.0.1:554/test"); start("desktop.mp4"); }}
示例代码将采集桌面视频播放,推流到流媒体服务器/录制桌面视频保存为mp4格式文件。运行后看到窗口播放桌面就说明开始正常运行了。播放10秒后会自动关闭并且在项目根目录生成一个desktop.mp4视频文件。当然,你也可以试试把桌面推流到流媒体服务器哈哈。
这里只是一个简单的小例子,你也可以根据需要添加更多的功能,如设置帧率、压缩质量、视频分辨率等参数,以及错误的处理等等。。。
End.
小知识
常用的采集参数:
帧率 (frameRate):表示每秒采集的帧数。
视频分辨率 (videoSize):表示视频的宽度和高度。
编码器 (codec):表示使用的编码器。
音频采样率 (audioSampleRate):表示音频的采样率。
音频通道数 (audioChannels):表示音频的通道数。
常用的编码器:
H.264:一种广泛使用的视频编码器。
VP9:一种新的视频编码器,具有较高的压缩率。
AV1:一种新的视频编码器,具有更高的压缩率和更低的延迟。
常用的音频编码器:
AAC:一种广泛使用的音频编码器。
MP3:一种经典的音频编码器。
FLAC:一种无损音频编码器。
标签: #java图片转视频流 #java实现视频在线播放