Explorar el Código

摄像头模块

wzhmo hace 2 años
padre
commit
3ccffee348

+ 5 - 0
src/main/java/com/welampiot/common/Constant.java

@@ -2,4 +2,9 @@ package com.welampiot.common;
 
 public class Constant {
     public static String success="0000";
+
+    // 国标接口访问地址
+    public static String GB_HOST_ADDRESS = "http://47.112.108.98:8089";
+    // 流媒体服务器接口访问地址
+    public static String ZK_HOST_ADDRESS = "http://47.112.108.98:8060";
 }

+ 25 - 0
src/main/java/com/welampiot/controller/VideoController.java

@@ -73,4 +73,29 @@ public class VideoController {
         videoMonitorVO.setList(videoMonitorDTOS);
         return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,videoMonitorVO);
     }
+
+
+    /**
+     * 获取摄像头回放列表
+     * @param videoMonitorDTO
+     * @return
+     */
+    @RequestMapping(value = "/getRecordPlay", method = RequestMethod.POST)
+    public BaseResult getRecordPlay(VideoMonitorDTO videoMonitorDTO){
+        int version = videoMonitorDTO.getVersion();
+//        Integer id = videoMonitorDTO.getId();
+        long startTime = System.currentTimeMillis() - 24 * 3600 * 1000;
+        ArrayList<VideoMonitorDTO> videoMonitorDTOS = new ArrayList<>();
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        while (System.currentTimeMillis() > startTime + 20 * 60 * 1000) {
+            VideoMonitorDTO videoMonitorDTO1 = new VideoMonitorDTO();
+            videoMonitorDTO1.setStartTime(simpleDateFormat.format(new Date(startTime)));
+            videoMonitorDTO1.setEndTime(simpleDateFormat.format(new Date(startTime + 20 * 60 * 1000)));
+            videoMonitorDTOS.add(videoMonitorDTO1);
+        }
+        VideoMonitorVO videoMonitorVO = new VideoMonitorVO();
+        videoMonitorVO.setList(videoMonitorDTOS);
+        return toolUtils.response(InterfaceResultEnum.OPERATION_SUCCESS,version,videoMonitorVO);
+    }
 }

+ 10 - 0
src/main/java/com/welampiot/dao/SystemConfigDao.java

@@ -0,0 +1,10 @@
+package com.welampiot.dao;
+
+import com.welampiot.dto.SystemConfigDto;
+import org.apache.ibatis.annotations.Param;
+
+public interface SystemConfigDao {
+    SystemConfigDto getOneBykey(@Param("key") String key);
+    void updateByDto(SystemConfigDto dto);
+    void addByDto(SystemConfigDto dto);
+}

+ 3 - 0
src/main/java/com/welampiot/dao/VideoMonitorDao.java

@@ -27,5 +27,8 @@ public interface VideoMonitorDao {
 
     Integer getVideoCountByLampPoleId(@Param("lampPoleId") Integer lampPoleId);
 
+    VideoMonitorDTO getOneByDbAddress(@Param("gbAddress") String gbAddress);
+    void updateBackAddress(VideoMonitorDTO dto);
+
     List<VideoMonitorDTO> getVideoListBySectionId(@Param("sectionId") Integer sectionId);
 }

+ 10 - 0
src/main/java/com/welampiot/dto/SystemConfigDto.java

@@ -0,0 +1,10 @@
+package com.welampiot.dto;
+
+import lombok.Data;
+
+@Data
+public class SystemConfigDto {
+//    private int id;
+    private String value;
+    private String key;
+}

+ 10 - 0
src/main/java/com/welampiot/service/SystemConfigService.java

@@ -0,0 +1,10 @@
+package com.welampiot.service;
+
+import com.welampiot.dto.SystemConfigDto;
+import org.apache.ibatis.annotations.Param;
+
+public interface SystemConfigService {
+    SystemConfigDto getOneBykey(@Param("key") String key);
+    void updateByDto(SystemConfigDto dto);
+    void addByDto(SystemConfigDto dto);
+}

+ 3 - 0
src/main/java/com/welampiot/service/VideoMonitorService.java

@@ -2,6 +2,7 @@ package com.welampiot.service;
 
 import com.welampiot.dto.VideoMonitorDTO;
 import com.welampiot.vo.VideoMonitorVO;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -20,5 +21,7 @@ public interface VideoMonitorService {
     void deleteVideoMonitorById(Integer id);
     Integer getLampPoleIdByVideoMonitorId(Integer id);
     Integer getVideoCountByLampPoleId(Integer lampPoleId);
+    VideoMonitorDTO getOneByDbAddress(@Param("gbAddress") String gbAddress);
+    void updateBackAddress(VideoMonitorDTO dto);
     List<VideoMonitorDTO> getVideoListBySectionId(Integer sectionId);
 }

+ 27 - 0
src/main/java/com/welampiot/service/impl/SystemConfigServiceImpl.java

@@ -0,0 +1,27 @@
+package com.welampiot.service.impl;
+
+import com.welampiot.dao.SystemConfigDao;
+import com.welampiot.dto.SystemConfigDto;
+import com.welampiot.service.SystemConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SystemConfigServiceImpl implements SystemConfigService {
+    @Autowired
+    private SystemConfigDao dao;
+    @Override
+    public SystemConfigDto getOneBykey(String key) {
+        return dao.getOneBykey(key);
+    }
+
+    @Override
+    public void updateByDto(SystemConfigDto dto) {
+        dao.updateByDto(dto);
+    }
+
+    @Override
+    public void addByDto(SystemConfigDto dto) {
+        dao.addByDto(dto);
+    }
+}

+ 10 - 0
src/main/java/com/welampiot/service/impl/VideoMonitorServiceImpl.java

@@ -85,6 +85,16 @@ public class VideoMonitorServiceImpl implements VideoMonitorService {
         return videoMonitorDao.getVideoCountByLampPoleId(lampPoleId);
     }
 
+    @Override
+    public VideoMonitorDTO getOneByDbAddress(String gbAddress) {
+        return videoMonitorDao.getOneByDbAddress(gbAddress);
+    }
+
+    @Override
+    public void updateBackAddress(VideoMonitorDTO dto) {
+        videoMonitorDao.updateBackAddress(dto);
+    }
+
     @Override
     public List<VideoMonitorDTO> getVideoListBySectionId(Integer sectionId) {
         return videoMonitorDao.getVideoListBySectionId(sectionId);

+ 107 - 0
src/main/java/com/welampiot/utils/VideoUtil.java

@@ -0,0 +1,107 @@
+package com.welampiot.utils;
+
+import com.welampiot.common.Constant;
+import com.welampiot.dto.SystemConfigDto;
+import com.welampiot.dto.VideoMonitorDTO;
+import com.welampiot.service.SystemConfigService;
+import com.welampiot.service.VideoMonitorService;
+
+/**
+ * 摄像头相关公共方法
+ */
+public class VideoUtil {
+
+    /**
+     * 获取摄像头播放的ssrc
+     * @param service 配置表server对象
+     * @return ssrc
+     */
+    public static int getVideoSrc(SystemConfigService service){
+        SystemConfigDto videoSsrcCode = service.getOneBykey("video_ssrc_code");
+        String value;
+        if (videoSsrcCode != null){
+            value = videoSsrcCode.getValue();
+            int i = Integer.parseInt(value);
+            i = i+1;
+            videoSsrcCode.setValue(Integer.toString(i));
+            service.updateByDto(videoSsrcCode);
+        }else {
+            value = "1";
+            SystemConfigDto systemConfigDto = new SystemConfigDto();
+            systemConfigDto.setKey("video_ssrc_code");
+            systemConfigDto.setValue(value);
+            service.addByDto(systemConfigDto);
+        }
+        return 1000000 + Integer.parseInt(value);
+    }
+
+    public static String getGbPlayBackAddress(VideoMonitorService service,SystemConfigService systemConfigService, String gbAddress, String startTime, String endTime){
+        VideoMonitorDTO oneByDbAddress = service.getOneByDbAddress(gbAddress);
+        Boolean back = false;
+        if (oneByDbAddress != null && oneByDbAddress.getBackAddress() != null && !oneByDbAddress.getBackAddress().isEmpty()){
+            String url = Constant.GB_HOST_ADDRESS+"/api/playback/"+oneByDbAddress.getBackAddress()+"/stop";
+            WebUtils.requestPost(url, "");
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                throw new RuntimeException(e);
+            }
+            back = true;
+        }
+        int videoSrc = getVideoSrc(systemConfigService);
+        String url = Constant.ZK_HOST_ADDRESS+"/index/api/getMediaList?secret=weclouds123";
+        String s = WebUtils.requestGet(url, "");
+        VideoMonitorDTO videoMonitorDTO = new VideoMonitorDTO();
+        videoMonitorDTO.setBackAddress(String.valueOf(videoSrc));
+        videoMonitorDTO.setGbAddress(gbAddress);
+        service.updateBackAddress(videoMonitorDTO);
+
+        url = Constant.GB_HOST_ADDRESS+"/api/playback/"+gbAddress+"/34020000001320000001/"+videoSrc;
+        String param = "{\"startTime\":\""+startTime+"\",\"endTime\":\""+endTime+"\"}";
+        WebUtils.requestPost(url, param);
+        return "";
+    }
+
+    // 获取国标摄像头回放地址
+//    public function get_gb_play_back_address($gb_address,$startTime,$endTime,$res = ''){
+//
+//        $back_info = $this->db->query('select back_address from video_monitor where `gb_address` = "'.$gb_address.'"')->row_array();
+//        $back = false;
+//        if (!empty($back_info) && !empty($back_info['back_address'])) {
+//            $url = 'http://'.$this->config->config['gb_host'].':8089/api/playback/'.$back_info['back_address'].'/stop';
+//            // $url = 'http://139.196.213.241:8050/api/playback/'.$back_info['back_address'].'/stop';
+//            request_post($url,[],1);
+//            sleep(1);
+//            $back = true;
+//        }
+//        $ssrc = $this->get_video_ssrc();
+//        if (empty($res)) $res = http_get('http://'.$this->config->config['gb_host'].':8060/index/api/getMediaList?secret=weclouds123');
+//        $res = json_decode($res,true);
+//
+//        $url = 'http://'.$this->config->config['gb_host'].':8089/api/playback/'.$gb_address.'/34020000001320000001/'.$ssrc;
+//        // $url = 'http://139.196.213.241:8050/api/playback/'.$gb_address.'/34020000001320000001/'.$ssrc;
+//        $this->db->query('update video_monitor set back_address = '.$ssrc.' where `gb_address` = "'.$gb_address.'"');
+//        $gb_id = substr('00000000'.base_convert($ssrc, 10, 16), -8);
+//        if ($res && isset($res['code']) && $res['code'] == 0) {
+//            $data = isset($res['data']) ? $res['data'] : array();
+//            $flag = 0;
+//            foreach ($data as $key => $value) {
+//                if (strtolower($value['stream']) == strtolower($gb_id)) {
+//                    $flag = 1;
+//                    break;
+//                }
+//            }
+//
+//            if ($flag) {
+//                $address = 'https://gb.lampmind.com:8087/gb3/rtp/'.strtoupper($gb_id).'.live.mp4';
+//            }else{
+//                $res = request_post($url,['startTime'=>$startTime,'endTime'=>$endTime],5);
+//                json_decode($res,true);
+//                $address = 'https://gb.lampmind.com:8087/gb3/rtp/'.strtoupper($gb_id).'.live.mp4';
+//                if ($back) sleep(7);
+//            }
+//            return $address;
+//        }
+//        return '';
+//    }
+}

+ 106 - 2
src/main/java/com/welampiot/utils/WebUtils.java

@@ -4,7 +4,15 @@ import com.alibaba.fastjson.JSON;
 import lombok.extern.slf4j.Slf4j;
 
 import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
 import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.List;
+import java.util.Map;
 
 @Slf4j
 public class WebUtils
@@ -26,12 +34,18 @@ public class WebUtils
         }
     }
 
+    /**
+     * 将 HH:ii 格式的时间切换到某个时区的时间
+     * @param time 时间 HH:ii
+     * @param timezone  时区
+     * @return 装换时区后的时间 HH:ii
+     */
     public static String getDateFormat(String time,int timezone){
         String res = "";
         try {
             String[] split = time.split(":");
-            Integer h = Integer.parseInt(split[0]);
-            Integer i = Integer.parseInt(split[1]);
+            int h = Integer.parseInt(split[0]);
+            int i = Integer.parseInt(split[1]);
             if (h - timezone < 0) {
                 h = h - timezone + 24;
             }else if(h - timezone >= 24){
@@ -46,4 +60,94 @@ public class WebUtils
         }
         return res;
     }
+
+    /**
+     * 模拟post请求
+     * @param url  请求地址
+     * @param param  请求参数
+     * @return 请求返回信息
+     * @throws Exception
+     */
+    public static String requestPost(String url, String param) {
+        StringBuilder response;
+        try {
+            URL obj = new URL(url);
+            HttpURLConnection con = (HttpURLConnection) obj.openConnection();
+            con.setRequestMethod("POST");
+            con.setRequestProperty("User-Agent", "Mozilla/5.0");
+            con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
+
+            con.setDoOutput(true);
+            con.setReadTimeout(5000);
+            DataOutputStream wr = new DataOutputStream(con.getOutputStream());
+            wr.writeBytes(param);
+            wr.flush();
+            wr.close();
+
+            BufferedReader in = new BufferedReader(
+                    new InputStreamReader(con.getInputStream()));
+            String inputLine;
+            response = new StringBuilder();
+
+            while ((inputLine = in.readLine()) != null) {
+                response.append(inputLine);
+            }
+            in.close();
+        }catch (Exception e){
+            return "";
+        }
+        return response.toString();
+    }
+
+    /**
+     * 向指定URL发送GET方法的请求
+     *
+     * @param url   发送请求的URL
+     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+     * @return URL 所代表远程资源的响应结果
+     */
+    public static String requestGet(String url, String param) {
+        StringBuilder result = new StringBuilder();
+        BufferedReader in = null;
+        try {
+            String urlNameString = url + "?" + param;
+            URL realUrl = new URL(urlNameString);
+            // 打开和URL之间的连接
+            URLConnection connection = realUrl.openConnection();
+            // 设置通用的请求属性
+            connection.setRequestProperty("accept", "*/*");
+            connection.setRequestProperty("connection", "Keep-Alive");
+            connection.setRequestProperty("user-agent",
+                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            // 建立实际的连接
+            connection.connect();
+            // 获取所有响应头字段
+            Map<String, List<String>> map = connection.getHeaderFields();
+            // 遍历所有的响应头字段
+            for (String key : map.keySet()) {
+                System.out.println(key + "--->" + map.get(key));
+            }
+            // 定义 BufferedReader输入流来读取URL的响应
+            in = new BufferedReader(new InputStreamReader(
+                    connection.getInputStream()));
+            String line;
+            while ((line = in.readLine()) != null) {
+                result.append(line);
+            }
+        } catch (Exception e) {
+            System.out.println("发送GET请求出现异常!" + e);
+//            e.printStackTrace();
+        }
+        // 使用finally块来关闭输入流
+        finally {
+            try {
+                if (in != null) {
+                    in.close();
+                }
+            } catch (Exception e2) {
+//                e2.printStackTrace();
+            }
+        }
+        return result.toString();
+    }
 }

+ 19 - 0
src/main/resources/mapper/SystemConfigMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.welampiot.dao.SystemConfigDao">
+    <select id="getOneBykey" resultType="com.welampiot.dto.SystemConfigDto" parameterType="String">
+        select `value` from system_config
+        where `key` = #{key}
+    </select>
+
+    <update id="updateByDto" parameterType="com.welampiot.dto.SystemConfigDto">
+        update system_config set `value` = #{value}
+        where `key` = #{key}
+    </update>
+
+    <insert id="addByDto" parameterType="com.welampiot.dto.SystemConfigDto">
+        insert into transh_info(`value`, `key`)
+        values
+        (#{value}, #{key})
+    </insert>
+</mapper>

+ 14 - 0
src/main/resources/mapper/VideoMonitorMapper.xml

@@ -199,6 +199,20 @@
         where v.lamp_pole_id = #{lampPoleId}
     </select>
 
+    <select id="getOneByDbAddress" resultType="com.welampiot.dto.VideoMonitorDTO" parameterType="String">
+        select back_address as backAddress
+        from video_monitor v
+        where v.gb_address = #{gbAddress}
+    </select>
+
+    <update id="updateBackAddress" parameterType="VideoMonitorDTO">
+        update
+        video_monitor v
+        set
+        v.back_address = #{backAddress}
+        where v.gb_address = #{gbAddress}
+    </update>
+
     <select id="getVideoListBySectionId" resultType="VideoMonitorDTO">
         select v.id,v.name
         from video_monitor v