欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

从视频直播流中下载视频到本地的步骤

最编程 2024-02-04 11:33:56
...
import java.awt.Dimension; import java.awt.image.BufferedImage; import com.tlzn.tkwl.util.StringUtil; import org.bytedeco.javacpp.avcodec; import org.bytedeco.javacv.FFmpegFrameGrabber; import org.bytedeco.javacv.FFmpegFrameRecorder; import org.bytedeco.javacv.Frame; import org.bytedeco.javacv.Java2DFrameConverter; public class VideoDownloader { private static final int NUM_OF_FRAMES = 5; // 指定需要截取几张图片 private static final double FRAME_RATE = 30.0; // 视频帧率 private static final Dimension FRAME_SIZE = new Dimension(1280, 720); // 视频大小 public static void download(String url, String outputPath) { FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(url); FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputPath, FRAME_SIZE.width, FRAME_SIZE.height); Java2DFrameConverter converter = new Java2DFrameConverter(); grabber.setOption("stimeout", "3000"); grabber.setOption("timeout", "5000000"); //设置超时时间 5秒 try { // 开始拉取视频 grabber.start(); recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4); // 设置转换后的视频格式为MP4 recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC); recorder.setAudioQuality(0); // 可选,设置音频质量 recorder.setSampleRate(44100); // 可选,设置音频采样率 recorder.setAudioChannels(2); // 可选,设置音频通道数量 recorder.setFrameRate(FRAME_RATE); recorder.start(); Frame frame = grabber.grabFrame(); // 循环拉取视频,并逐帧转换 for (int i = 0; ; i++) { if (StringUtil.isEmptyObject(frame)) { // 如果获取失败,表示视频播放结束或者发生了错误 break; } BufferedImage bufferedImage = converter.getBufferedImage(frame); // 将当前帧写入文件 recorder.record(frame); // 主动gc释放 System.gc(); frame = grabber.grabFrame(); // 获取下一帧图像 if (StringUtil.isEmptyObject(grabber.grabFrame())||StringUtil.isEmptyObject(frame)) { // 如果获取失败,表示视频播放结束或者发生了错误 break; } } recorder.stop(); grabber.stop(); System.out.println("视频拉取成功,已保存至:" + outputPath); } catch (Exception e) { System.err.println("视频拉取失败:" + e.getMessage()); } } public static void main(String[] args) { // 在需要调用的地方执行以下代码: String url = "https://fsacam.0.flv"; // 视频流地址 String outputPath = "C:\\Users\\dell-pc\\Desktop\\aaaaaaaaaaaa\\output.mp4"; // 指定输出路径 VideoDownloader.download(url, outputPath); } }

推荐阅读