南昌市物联网技防平台-后台
tangzy
2021-04-24 97a0bbd8b75c7ba8df78a1e8f67bbaad23edf298
1.App警情反馈新增
3 files modified
184 ■■■■■ changed files
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/feedback/controller/FeedbackController.java 24 ●●●●● patch | view | raw | blame | history
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/feedback/vo/FeedbackVO.java 2 ●●●●● patch | view | raw | blame | history
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/rvideo/controller/RvideoController.java 158 ●●●● patch | view | raw | blame | history
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/feedback/controller/FeedbackController.java
@@ -170,6 +170,7 @@
    }
    @PostMapping("/insertfeed")
    public R insertfeed(String jid, String snumber, String sname, String addvcd, String place,
                        String result, String describe, String type, String devicenumber, String galarmpeople,
@@ -255,4 +256,27 @@
        return R.data(lists);
    }
    /**
     * 警情反馈新增
     */
    @PostMapping("/saves")
    public R saves(FeedbackVO feedback) {
        feedbackService.save(feedback);
        Wj wj = new Wj();
        //获取视频地址
        String[] splitsp = feedback.getSpaddress().split(",");//以逗号分割
        for (String string2 : splitsp) {
            wj.setJid(feedback.getJid());
            wj.setAddress(string2);
            iWjService.insertfeed(wj);
        }
        String[] splittp = feedback.getTpaddress().split(",");//以逗号分割
        for (String string3 : splittp) {
            wj.setJid(feedback.getJid());
            wj.setAddress(string3);
            iWjService.insertfeed(wj);
        }
        return R.success("新增成功");
    }
}
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/feedback/vo/FeedbackVO.java
@@ -35,5 +35,7 @@
    private  String addvnm;
    private  String address;
    private  String spaddress;
    private  String tpaddress;
}
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/rvideo/controller/RvideoController.java
@@ -62,6 +62,7 @@
    private static String PRF_MINIO_URL = "minio/jfpt/void/";
    private static  Thread thread;
    private static  String UUIDs;
    private static  String uids;
    private static  int count=0;
    /**
@@ -195,143 +196,66 @@
//    }
//        /**
//     * Javacv录制视频
//     */
//    @PostMapping("/rVoids")
//    public void rVoids(String url,String uid) {
//        String UUID = DateUtil.time();
//        uids=uid;
//        UUIDs=UUID;
//        RecordVideoThread recordVideoThread = new RecordVideoThread();
//        recordVideoThread.filePath = "D:\\software\\minio\\data\\jfpt\\void\\"+UUID + ".mp4";
//        recordVideoThread.timesSec = 0L;
//        String newJson = StringEscapeUtils.unescapeHtml4(url);
//        recordVideoThread.streamURL =newJson;// 最好设置结束时长 如直接停止程序会造成输出文件的损坏无法正常播放
//        recordVideoThread.isAudio = true;
//        thread = new Thread(recordVideoThread);
//        thread.start();
//    }
//    @PostMapping("/stop")
//    public String stop(String jid) throws FrameGrabber.Exception {
//        //返回前端路径
//        String vaddress = null;
//        thread.stop();
//        //返回路径
//        vaddress = "https://web.byisf.com/" + PRF_MINIO_URL + UUIDs + ".mp4";
//        //把路径通过警情id添加到警情信息
//        alarmService.updateVaddress(vaddress,uids,jid);
//        return vaddress;
//
//    }
    public class RecordVideoThread implements Runnable {
        public String streamURL;// 流地址(测试可以用obs推流)
        public String filePath;// 文件路径
        public Long timesSec = 0L;// 停止录制时长 0为不限制时长
        public String fileFormat = "mp4";//录制的文件格式
        public boolean isAudio = true;//是否录制声音
        public RecordVideoThread(String streamURL, String filePath) {
            this.streamURL = streamURL;
            this.filePath = filePath;
        }
        @Override
        public void run() {
            System.out.println(streamURL);
            // 获取视频源
            FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(streamURL);
            FFmpegFrameRecorder recorder = null;
            try {
                grabber.start();
                Frame frame = grabber.grabFrame();
                createFile();
                //"rtmp://192.168.1.225:1935/live/home"
                // 流媒体输出地址,分辨率(长,高),是否录制音频(0:不录制/1:录制)
                recorder = new FFmpegFrameRecorder(filePath, 1280, 720, isAudio ? 1 : 0);
                recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);// 直播流格式
                recorder.setFormat(fileFormat);// 录制的视频格式
                recorder.setFrameRate(25);// 帧数
                //百度翻译的比特率,默认400000,但是我400000贼模糊,调成800000比较合适
                recorder.setVideoBitrate(800000);
                recorder.start();
                System.out.println("推流开始");
                while (!Thread.currentThread().isInterrupted()){
                    System.out.println("开始");
                    recorder.record(frame);//录制
                    frame = grabber.grabFrame();//获取下一帧
                    System.out.println("结束");
                }
                recorder.record(frame);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                //停止录制
                if (null != grabber) {
                    try {
                        grabber.stop();
                    } catch (FrameGrabber.Exception e) {
                        e.printStackTrace();
                    }
                }
                if (recorder != null) {
                    try {
                        recorder.stop();
                    } catch (FrameRecorder.Exception e) {
                        e.printStackTrace();
                    }
                }
                System.out.println("录制完成,录制时长:" + timesSec + "秒");
            }
        }
        private void createFile() {
            File outFile = new File(filePath);
            if (filePath.isEmpty() || !outFile.exists() || outFile.isFile()) {
                try {
                    outFile.createNewFile();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
    /**
     * Javacv录制视频测试
        /**
     * Javacv录制视频
     */
    @PostMapping("/rVoids")
    public void cs(String url,String uid) {
    public void rVoids(String url,String uid) {
        String UUID = DateUtil.time();
        UUIDs=UUID;
        if (uid!=null){
            count++;
        }
        uids=uid;
        RecordVideoThread recordVideoThread = new RecordVideoThread();
        recordVideoThread.filePath = "D:\\software\\minio\\data\\jfpt\\void\\"+UUID + ".mp4";
        recordVideoThread.timesSec = 0L;
        String newJson = StringEscapeUtils.unescapeHtml4(url);
        RecordVideoThread recordVideoThread = new RecordVideoThread(newJson,"D:\\software\\minio\\data\\jfpt\\void\\"+UUID +".mp4");
        recordVideoThread.streamURL =newJson;// 最好设置结束时长 如直接停止程序会造成输出文件的损坏无法正常播放
        recordVideoThread.isAudio = true;
        thread = new Thread(recordVideoThread);
        thread.start();
    }
    @PostMapping("/stop")
    public String stopcs(String jid) throws FrameGrabber.Exception {
    public String stop(String jid) throws FrameGrabber.Exception {
        //返回前端路径
        String vaddress = null;
        //  发出中断标志  true
        thread.interrupt();
        thread.stop();
        //返回路径
        vaddress = "https://web.byisf.com/" + PRF_MINIO_URL + UUIDs + ".mp4";
        //把路径通过警情id添加到警情信息
        String uids=Integer.toString(count);
        alarmService.updateVaddress(vaddress,uids,jid);
        return vaddress;
    }
//    /**
//     * Javacv录制视频测试
//     */
//    @PostMapping("/cs")
//    public void rVoids(String url,String uid) {
//        String UUID = DateUtil.time();
//        UUIDs=UUID;
//        String newJson = StringEscapeUtils.unescapeHtml4(url);
//        RecordVideoThread recordVideoThread = new RecordVideoThread(newJson,"D:\\software\\minio\\data\\jfpt\\void\\"+UUID +".mp4");
//        thread = new Thread(recordVideoThread);
//        thread.start();
//    }
//
//    @PostMapping("/csc")
//    public String stopcs(String jid) throws FrameGrabber.Exception {
//        //返回前端路径
//        String vaddress = null;
//        //  发出中断标志  true
//        thread.interrupt();
//        //返回路径
//        vaddress = "https://web.byisf.com/" + PRF_MINIO_URL + UUIDs + ".mp4";
//        //把路径通过警情id添加到警情信息
//        String uids=Integer.toString(count);
//        alarmService.updateVaddress(vaddress,uids,jid);
//        return vaddress;
//
//    }
}