Переглянути джерело

fix
1. 修复时区转换导致的回放点播失败

kindring 1 рік тому
батько
коміт
1488c38b8b

+ 4 - 2
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java

@@ -433,14 +433,16 @@ public class SIPCommander implements ISIPCommander {
         }else {
             sdpIp = mediaServerItem.getSdpIp();
         }
+        logger.info("[录像回放] 播放设备:{} 播放时间:[ {} - {} ]", device.getDeviceId(), startTime, endTime);
         StringBuffer content = new StringBuffer(200);
         content.append("v=0\r\n");
         content.append("o=" + channelId + " 0 0 IN IP4 " + sdpIp + "\r\n");
         content.append("s=Playback\r\n");
         content.append("u=" + channelId + ":0\r\n");
         content.append("c=IN IP4 " + sdpIp + "\r\n");
-        content.append("t=" + DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(startTime) + " "
-                + DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(endTime) + "\r\n");
+        // 防止自行加8小时
+        content.append("t=" + DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(startTime,0) + " "
+                + DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(endTime,0) + "\r\n");
 
         String streamMode = device.getStreamMode();
 

+ 1 - 0
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/RecordInfoResponseMessageHandler.java

@@ -122,6 +122,7 @@ public class RecordInfoResponseMessageHandler extends SIPRequestProcessorParent
                                 record.setEndTime(DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(endTimeStr));
                             } catch (Exception e) {
                                 sumNum--;
+                                logger.error("[国标录像解析] 异常内容: ", e);
                                 logger.error("[国标录像解析] 时间解析错误,移除该项数据");
                                 continue;
                             }

+ 21 - 2
src/main/java/com/genersoft/iot/vmp/utils/DateUtil.java

@@ -33,10 +33,11 @@ public class DateUtil {
     public static final String PATTERN = "yyyy-MM-dd HH:mm:ss";
 
     public static final String zoneStr = "Asia/Shanghai";
-
+    public static final String zoneUTCStr = "Z";
     public static final DateTimeFormatter formatterCompatibleISO8601 = DateTimeFormatter.ofPattern(ISO8601_COMPATIBLE_PATTERN, Locale.getDefault()).withZone(ZoneId.of(zoneStr));
     public static final DateTimeFormatter formatterISO8601 = DateTimeFormatter.ofPattern(ISO8601_PATTERN, Locale.getDefault()).withZone(ZoneId.of(zoneStr));
     public static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(PATTERN, Locale.getDefault()).withZone(ZoneId.of(zoneStr));
+    public static final DateTimeFormatter formatterZero = DateTimeFormatter.ofPattern(PATTERN, Locale.getDefault()).withZone(ZoneId.of(zoneUTCStr));
 
 	public static String yyyy_MM_dd_HH_mm_ssToISO8601(String formatTime) {
 
@@ -45,7 +46,6 @@ public class DateUtil {
 	
 	public static String ISO8601Toyyyy_MM_dd_HH_mm_ss(String formatTime) {
         return formatter.format(formatterCompatibleISO8601.parse(formatTime));
-
     }
 
     /**
@@ -59,6 +59,25 @@ public class DateUtil {
         return instant.getEpochSecond();
 	}
 
+    /**
+     * yyyy_MM_dd_HH_mm_ss 转时间戳
+     * @param formatTime 要转换的时间
+     * @param offsetHours 偏移量,小时 0-24
+     * @return
+     */
+    public static long yyyy_MM_dd_HH_mm_ssToTimestamp(String formatTime, int offsetHours){
+        // 偏移量限制为 -12 - 14之间
+        if (offsetHours < -12 || offsetHours > 14) {
+            offsetHours = 0;
+        }
+        String ZoneStr = "+" + String.valueOf(offsetHours);
+        // 获取零时区时间戳
+        DateTimeFormatter _formatter = DateTimeFormatter.ofPattern(PATTERN, Locale.getDefault()).withZone(ZoneId.of(ZoneStr));
+        TemporalAccessor temporalAccessor = _formatter.parse(formatTime);
+        Instant instant = Instant.from(temporalAccessor);
+        return instant.getEpochSecond();
+    }
+
     /**
      * 获取当前时间
      * @return

+ 5 - 1
web_src/src/components/common/ptzControl.vue

@@ -162,7 +162,11 @@ let conClickTimer = null;
 let pressTimer = null;
 let sendEndTimer = null;
 
-
+/**
+ * @description 云台控制组件
+ * @param deviceId 设备id
+ * @param channelId 通道id
+ */
 export default {
   name: "ptzControl",
   components: {Microphone},