只需要传入两个参数,流地址和保存路径即可
public static void startRecording(String rtspUrl, String outputFilePath) {
if (!recordingThreads.containsKey(rtspUrl)) {
Thread recordingThread = new Thread(() -> {
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(rtspUrl);
FFmpegFrameRecorder recorder;
try {
grabber.start();
recorder = new FFmpegFrameRecorder(outputFilePath, grabber.getImageWidth(),
grabber.getImageHeight());
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
recorder.setFormat("mp4");
recorder.setAudioChannels(1);
// 设置视频位率
// recorder.setVideoBitrate(7000);
// 设置帧率
// recorder.setFrameRate(80);
recorder.start();
System.out.println("Recording started for " + rtspUrl);
Frame frame;
while (!Thread.currentThread().isInterrupted()) {
frame = grabber.grabFrame();
if (frame != null) {
recorder.record(frame);
}
}
grabber.stop();
recorder.stop();
System.out.println("Recording stopped for " + rtspUrl);
} catch (FrameGrabber.Exception | FrameRecorder.Exception e) {
e.printStackTrace();
}
});
recordingThreads.put(rtspUrl, recordingThread);
recordingThread.start();
} else {
System.out.println("Recording already in progress for " + rtspUrl);
}
}
// 设置视频位率 recorder.setVideoBitrate(7000); 设置帧率 // recorder.setFrameRate(80);