pom文件
<dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.11</version>
</dependency>
相关代码
public static Thread download(String rtspUrl, String outputFilePath, String fileName) {Thread thread = new Thread(() -> {String name = fileName+".mp4";log.info("最终文件名称:{},fileName: {}, rtspUrl: {}",name,fileName,rtspUrl);// 视频采集对象FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(rtspUrl);grabber.setOption("rtsp_transport", "tcp");
// grabber.setOption("logLevel", "debug");grabber.setOption("x264-params","bframes=0");FFmpegFrameRecorder recorder = null;try {grabber.start();log.info("最终文件路径:{}",outputFilePath+name);log.info("通道编号:{}",grabber.getAudioChannels());recorder = new FFmpegFrameRecorder(outputFilePath+name, grabber.getImageWidth(), grabber.getImageHeight(), grabber.getAudioChannels());recorder.setFormat("mp4");// 视频码率recorder.setVideoBitrate(grabber.getVideoBitrate());// 音频码率recorder.setAudioBitrate(grabber.getAudioBitrate());// 通道数量recorder.setAudioChannels(grabber.getAudioChannels());// 设置帧率recorder.setFrameRate(25);recorder.setSampleRate(grabber.getSampleRate());recorder.start();
// FFmpegLogCallback.setLevel(48);Frame frame;LocalDateTime startTime = LocalDateTime.now();DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");log.info("文件名称为:{},开始写入,当前时间:{}",name, dateTimeFormatter.format(startTime));while (!Thread.currentThread().isInterrupted()) {frame = grabber.grab();if (frame != null) {recorder.record(frame);}}LocalDateTime endTime = LocalDateTime.now();log.info("文件名称为:{}, 写入完成,当前时间: {}",name, dateTimeFormatter.format(endTime));} catch (Exception e) {log.error("刻录文件下载异常,异常原因:",e);} finally {try {if (recorder != null) {recorder.stop();recorder.release();}grabber.stop();grabber.release();} catch (Exception e) {log.error("刻录文件资源关闭异常,异常原因:",e);}}});thread.start();return thread;}