帅哥海海海 2021-08-06 11:10 采纳率: 0%
浏览 73
已结题

JAVACV如何将本机摄像头录像并且按60S每段保存


OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
grabber.start();//开启抓取器
// 就是这个recoder怎么切片(Segment)保存
FrameRecorder recorder = FrameRecorder.createDefault(outputFile, width, height);


跟车载导航一样,60秒保存一个文件,按照时间排序,命名如 202108060001.mp4

也不知道有没有人回答,试着用杯星巴克,看有没有人提供点思路,希望CSDN上的人给力,PEACE AND LOVE

  • 写回答

3条回答 默认 最新

  • 王大师王文峰 企业官方账号 2021-08-06 14:14
    关注

    这个可以试一试,望采纳,谢谢

    
    import org.bytedeco.ffmpeg.global.avcodec;
    import org.bytedeco.javacv.FFmpegFrameGrabber;
    import org.bytedeco.javacv.FFmpegFrameRecorder;
    import org.bytedeco.javacv.Frame;
    import org.bytedeco.javacv.FrameGrabber.Exception;
     
     
    public class FFMpegTest {
     
        public static void main(String[] args) throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {
            // 此处使用的是外网地址
            String inputFile = "rtmp://127.0.0.1:1935/live/home";
            //视频存放地址
            String outputFile = "C:\\Users\\Administrator\\Desktop\\c.avi";
            frameRecord(inputFile, outputFile, 1);
        }
     
        public static void frameRecord(String inputFile, String outputFile, int audioChannel)
                throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {
            // 设置为全局控制变量,用于控制录制结束
            boolean isStart = true;
            // 获取视频源
            FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputFile);
            // 如果不设置成tcp连接时,默认使用UDP,丢包现象比较严重
            grabber.setOption("rtsp_transport", "tcp"); // 设置成tcp以后比较稳定
            // 流媒体输出地址,分辨率(长,高),是否录制音频(0:不录制/1:录制)
            FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputFile, 1280, 720, audioChannel);
            // 不进行转码时,编码格式默认为HFYU,使用VLC播放器时无法播放下载的视频 --可能和海康的摄像头有关
            recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);// avcodec.AV_CODEC_ID_H264,编码
     
            System.err.println("ddd");
            // 开始取视频源
            recordByFrame(grabber, recorder, isStart);
        }
     
        private static void recordByFrame(FFmpegFrameGrabber grabber, FFmpegFrameRecorder recorder, Boolean status)
                throws Exception, org.bytedeco.javacv.FrameRecorder.Exception {
            System.err.println("aaa");
            try {
                // 建议在线程中使用该方法
                grabber.start();
                recorder.start();
                Frame frame = null;
     
                // 此处仅为本地预览
                // CanvasFrame cframe = new CanvasFrame("欢迎", CanvasFrame.getDefaultGamma() /
                // grabber.getGamma());
                // cframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 窗口关闭,则程序关闭
                // cframe.setAlwaysOnTop(true);
     
                while (status && (frame = grabber.grabFrame()) != null) {
                    System.err.println("111");
                    recorder.record(frame);
                    // cframe.showImage(frame);
                }
                recorder.stop();
                grabber.stop();
            } finally {
                if (grabber != null) {
                    grabber.stop();
                }
            }
        }
     
    }
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月13日
  • 创建了问题 8月6日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题