Browse Source

视频处理

suntianwu 3 years ago
parent
commit
b878dd94db

+ 19 - 9
src/main/java/com/iden/bms/controller/TraceController.java

@@ -10,6 +10,7 @@ import com.iden.common.logaspect.LogAnnotation;
 import com.iden.common.logaspect.OperateType;
 import com.iden.common.logaspect.OperateType;
 import com.iden.common.util.Result;
 import com.iden.common.util.Result;
 import com.iden.common.util.WebPageUtils;
 import com.iden.common.util.WebPageUtils;
+import com.iden.common.vo.CameraVideoVO;
 import com.iden.common.vo.TraceVO;
 import com.iden.common.vo.TraceVO;
 import com.iden.common.vo.UserLoginedConvertVO;
 import com.iden.common.vo.UserLoginedConvertVO;
 import io.swagger.annotations.*;
 import io.swagger.annotations.*;
@@ -68,17 +69,17 @@ public class TraceController {
     @ApiOperation(value = "使用上传图像获取目标轨迹列表(地图打点划线) ")
     @ApiOperation(value = "使用上传图像获取目标轨迹列表(地图打点划线) ")
     @ApiImplicitParams(value = {
     @ApiImplicitParams(value = {
             @ApiImplicitParam(paramType = "query", name = "imageNames", value = "图像名称,多个用逗号分割"),
             @ApiImplicitParam(paramType = "query", name = "imageNames", value = "图像名称,多个用逗号分割"),
-            @ApiImplicitParam(paramType = "query", name = "beginDate", value = "开始时间(yyyyMMdd)"),
-            @ApiImplicitParam(paramType = "query", name = "endDate", value = "结束时间(yyyyMMdd)")
+            @ApiImplicitParam(paramType = "query", name = "beginTime", value = "开始时间(yyyyMMdd HH:mm:ss)"),
+            @ApiImplicitParam(paramType = "query", name = "endTime", value = "结束时间(yyyyMMdd HH:mm:ss)")
 
 
     })
     })
     public Result<List<TraceVO>> listUploadImagesTrace(HttpServletRequest request, @RequestHeader(value = "token") String token,
     public Result<List<TraceVO>> listUploadImagesTrace(HttpServletRequest request, @RequestHeader(value = "token") String token,
                                                        @RequestParam(value = "imageNames", required = true) String imageNames,
                                                        @RequestParam(value = "imageNames", required = true) String imageNames,
-                                                       @RequestParam(value = "beginDate", required = false) String beginDate,
-                                                       @RequestParam(value = "endDate", required = false) String endDate){
+                                                       @RequestParam(value = "beginTime", required = false) String beginTime,
+                                                       @RequestParam(value = "endTime", required = false) String endTime){
         try {
         try {
             UserLoginedConvertVO loginUser = WebPageUtils.getCurrentLoginedUser(request);
             UserLoginedConvertVO loginUser = WebPageUtils.getCurrentLoginedUser(request);
-            List<TraceVO> datas = this.traceService.listUploadImagesTrace(imageNames,beginDate,endDate,loginUser);
+            List<TraceVO> datas = this.traceService.listUploadImagesTrace(imageNames,beginTime,endTime,loginUser);
             return Result.success(datas);
             return Result.success(datas);
         }catch (Exception e) {
         }catch (Exception e) {
             log.error("轨迹管理: 使用上传图像获取目标轨迹列表出现异常",e);
             log.error("轨迹管理: 使用上传图像获取目标轨迹列表出现异常",e);
@@ -87,10 +88,19 @@ public class TraceController {
     }
     }
 
 
 
 
-    @GetMapping("/cameraVideo`Play/{id}")
-    @ApiOperation(value = "摄像机视频播放")
-    public Result<TraceVO> cameraVideoPlay(HttpServletRequest request, @RequestHeader("token") String token, @PathVariable("id") Long id){
-        this.traceService.cameraVideoPlay(id);
+    @GetMapping("/getCameraVideoList")
+    @ApiOperation(value = "获取摄像机视频列表")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(paramType = "query", name = "cameraId", value = "摄像机ID"),
+            @ApiImplicitParam(paramType = "query", name = "beginTime", value = "开始时间(yyyyMMdd HH:mm:ss)"),
+            @ApiImplicitParam(paramType = "query", name = "endTime", value = "结束时间(yyyyMMdd HH:mm:ss)")
+
+    })
+    public Result<CameraVideoVO> getCameraVideoList(HttpServletRequest request, @RequestHeader("token") String token,
+                                                 @RequestParam(value = "cameraId", required = false) Long cameraId,
+                                                 @RequestParam(value = "beginTime", required = false) String beginTime,
+                                                 @RequestParam(value = "endTime", required = false) String endTime){
+        this.traceService.getCameraVideoList(cameraId,beginTime,endTime);
         return  Result.success("查询成功!");
         return  Result.success("查询成功!");
     }
     }
 
 

+ 5 - 2
src/main/java/com/iden/bms/face/FaceIdenService.java

@@ -303,7 +303,7 @@ public class FaceIdenService {
                                 String videoFileName = videoFile.getName();
                                 String videoFileName = videoFile.getName();
                                 String shootEndTimeStr = videoFileName.substring(0, videoFileName.indexOf("_"));
                                 String shootEndTimeStr = videoFileName.substring(0, videoFileName.indexOf("_"));
                                 Date shootEndTime = DateUtils.strToDate(shootEndTimeStr,"yyyyMMddHHmmss");
                                 Date shootEndTime = DateUtils.strToDate(shootEndTimeStr,"yyyyMMddHHmmss");
-                                VideoUtil.fetchAllPic(videoFile,idenRoot + "data/origin/camera/image/" + cameraCode, shootEndTime);
+                                Long duration = VideoUtil.fetchAllPic(videoFile,idenRoot + "data/origin/camera/image/" + cameraCode, shootEndTime);
 
 
                                 File finalDir = new File(videoFile.getParentFile().getAbsolutePath().replace("origin","final"));
                                 File finalDir = new File(videoFile.getParentFile().getAbsolutePath().replace("origin","final"));
                                 if(!finalDir.exists()){
                                 if(!finalDir.exists()){
@@ -321,7 +321,10 @@ public class FaceIdenService {
                                 idenCameraVideo.setCameraId(idenCamera.getId());
                                 idenCameraVideo.setCameraId(idenCamera.getId());
                                 idenCameraVideo.setCommunityId(idenCamera.getCommunityId());
                                 idenCameraVideo.setCommunityId(idenCamera.getCommunityId());
                                 idenCameraVideo.setName(videoFileName.substring(0,videoFileName.lastIndexOf(".mp4")));
                                 idenCameraVideo.setName(videoFileName.substring(0,videoFileName.lastIndexOf(".mp4")));
-                                idenCameraVideo.setPhotographTime(shootEndTime);
+                                Long begin = shootEndTime.getTime() - duration;
+                                idenCameraVideo.setPhotographBeginTime(new Date(begin));
+                                idenCameraVideo.setPhotographEndTime(shootEndTime);
+                                idenCameraVideo.setDuration(duration);
                                 idenCameraVideo.setCreateTime(new Date());
                                 idenCameraVideo.setCreateTime(new Date());
                                 idenCameraVideoService.save(idenCameraVideo);
                                 idenCameraVideoService.save(idenCameraVideo);
                             }
                             }

+ 30 - 11
src/main/java/com/iden/bms/service/TraceService.java

@@ -7,13 +7,15 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.face.monitor.FaceMonitor;
 import com.face.monitor.FaceMonitor;
 import com.face.monitor.model.FaceModel;
 import com.face.monitor.model.FaceModel;
 import com.iden.bms.face.FaceIdenTool;
 import com.iden.bms.face.FaceIdenTool;
+import com.iden.common.entity.IdenCameraVideo;
 import com.iden.common.entity.IdenFaceImage;
 import com.iden.common.entity.IdenFaceImage;
-import com.iden.common.entity.IdenWarningPersonTrace;
 import com.iden.common.exception.BDException;
 import com.iden.common.exception.BDException;
 
 
-import com.iden.common.service.IdenWarningPersonTraceService;
+import com.iden.common.service.IdenCameraVideoService;
 import com.iden.common.util.DateUtils;
 import com.iden.common.util.DateUtils;
+import com.iden.common.util.FileUtil;
 import com.iden.common.util.ImgUtil;
 import com.iden.common.util.ImgUtil;
+import com.iden.common.vo.CameraVideoVO;
 import com.iden.common.vo.FaceRetrieveResultVO;
 import com.iden.common.vo.FaceRetrieveResultVO;
 import com.iden.common.vo.TraceVO;
 import com.iden.common.vo.TraceVO;
 import com.iden.common.vo.UserLoginedConvertVO;
 import com.iden.common.vo.UserLoginedConvertVO;
@@ -40,7 +42,8 @@ public class TraceService {
 
 
     @Resource
     @Resource
     private FaceImageService faceImageService;
     private FaceImageService faceImageService;
-
+    @Resource
+    private IdenCameraVideoService idenCameraVideoService;
 
 
 
 
 
 
@@ -87,15 +90,15 @@ public class TraceService {
      * 图像识别,使用特征码查询图像库,得到图库表中对应的数据列表
      * 图像识别,使用特征码查询图像库,得到图库表中对应的数据列表
      * @return
      * @return
      */
      */
-    public List<TraceVO> listUploadImagesTrace(String imageNames, String beginDate, String endDate, UserLoginedConvertVO loginUser) {
+    public List<TraceVO> listUploadImagesTrace(String imageNames, String beginTime, String endTime, UserLoginedConvertVO loginUser) {
         List<TraceVO> result = new ArrayList<>();
         List<TraceVO> result = new ArrayList<>();
         Date dateBegin = null;
         Date dateBegin = null;
-        if(StringUtils.isNotEmpty(beginDate)){
-            dateBegin  = DateUtils.strToDate(beginDate,"yyyyMMdd");
+        if(StringUtils.isNotEmpty(beginTime)){
+            dateBegin  = DateUtils.strToDate(beginTime,"yyyyMMdd HH:mm:ss");
         }
         }
         Date dateEnd = null;
         Date dateEnd = null;
-        if(StringUtils.isNotEmpty(endDate)){
-            dateEnd  = DateUtils.strToDate(endDate,"yyyyMMdd");
+        if(StringUtils.isNotEmpty(endTime)){
+            dateEnd  = DateUtils.strToDate(endTime,"yyyyMMdd HH:mm:ss");
         }
         }
 
 
         if(imageNames.endsWith(",")) {
         if(imageNames.endsWith(",")) {
@@ -143,11 +146,11 @@ public class TraceService {
         File[] cameraCodeDirFiles = cameraImageDirFile.listFiles();
         File[] cameraCodeDirFiles = cameraImageDirFile.listFiles();
         if (cameraCodeDirFiles != null && cameraCodeDirFiles.length > 0){
         if (cameraCodeDirFiles != null && cameraCodeDirFiles.length > 0){
             for (File cameraCodeDirFile : cameraCodeDirFiles) {
             for (File cameraCodeDirFile : cameraCodeDirFiles) {
-                File[] cameraImageFiles = cameraCodeDirFile.listFiles();
+                File[] cameraImageFiles =  FileUtil.sortByName(cameraCodeDirFile.listFiles());
                 if (cameraImageFiles != null && cameraImageFiles.length > 0){
                 if (cameraImageFiles != null && cameraImageFiles.length > 0){
                     for (File cameraImageFile : cameraImageFiles){
                     for (File cameraImageFile : cameraImageFiles){
                         String photographTime = cameraImageFile.getName().substring(0, cameraImageFile.getName().indexOf("_"));
                         String photographTime = cameraImageFile.getName().substring(0, cameraImageFile.getName().indexOf("_"));
-                        Date photographDate = DateUtils.strToDate(photographTime.substring(0,8),"yyyyMMdd");
+                        Date photographDate = DateUtils.strToDate(photographTime,"yyyyMMdd HH:mm:ss");
                         if(dateBegin != null && photographDate.before(dateBegin)){
                         if(dateBegin != null && photographDate.before(dateBegin)){
                             continue;
                             continue;
                         }
                         }
@@ -164,8 +167,24 @@ public class TraceService {
     }
     }
 
 
 
 
-    public void cameraVideoPlay(Long cameraId) {
+    public  List<CameraVideoVO> getCameraVideoList(Long cameraId, String beginTime,String endTime) {
+        List<CameraVideoVO> vos = new ArrayList<>();
+        QueryWrapper<IdenCameraVideo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(IdenCameraVideo::getCameraId,cameraId)
+                .le(StringUtils.isNotEmpty(endTime),IdenCameraVideo::getPhotographBeginTime,endTime)
+                .ge(StringUtils.isNotEmpty(beginTime),IdenCameraVideo::getPhotographEndTime,beginTime)
+                .orderByAsc(IdenCameraVideo::getPhotographEndTime);
 
 
+        List<IdenCameraVideo> idenCameraVideos = this.idenCameraVideoService.list(queryWrapper);
+        if(CollUtil.isNotEmpty(idenCameraVideos)){
+            idenCameraVideos.forEach(item->{
+                CameraVideoVO vo = new CameraVideoVO();
+                BeanUtil.copyProperties(item,vo);
+                vos.add(vo);
+            });
+
+        }
+        return  vos;
     }
     }
 
 
 }
 }

+ 15 - 6
src/main/java/com/iden/common/entity/IdenCameraVideo.java

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 
 
-import java.time.LocalDateTime;
 
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableField;
 
 
@@ -22,7 +21,7 @@ import lombok.experimental.Accessors;
  * 摄像机视频表(IdenCameraVideo)实体类
  * 摄像机视频表(IdenCameraVideo)实体类
  *
  *
  * @author makejava
  * @author makejava
- * @since 2022-01-03 15:36:55
+ * @since 2022-01-04 13:56:47
  */
  */
 
 
 @Data
 @Data
@@ -31,7 +30,7 @@ import lombok.experimental.Accessors;
 @TableName("iden_camera_video")
 @TableName("iden_camera_video")
 @ApiModel(value = "摄像机视频表", description = "")
 @ApiModel(value = "摄像机视频表", description = "")
 public class IdenCameraVideo implements Serializable {
 public class IdenCameraVideo implements Serializable {
-    private static final long serialVersionUID = 914965308244813944L;
+    private static final long serialVersionUID = 337337376412013599L;
 
 
     @TableId(value = "ID", type = IdType.AUTO)
     @TableId(value = "ID", type = IdType.AUTO)
     private Long id;
     private Long id;
@@ -62,9 +61,19 @@ public class IdenCameraVideo implements Serializable {
     private String pic;
     private String pic;
 
 
 
 
-    @ApiModelProperty("拍摄时间")
-    @TableField("PHOTOGRAPH_TIME")
-    private Date photographTime;
+    @ApiModelProperty("拍摄开始时间")
+    @TableField("PHOTOGRAPH_BEGIN_TIME")
+    private Date photographBeginTime;
+
+
+    @ApiModelProperty("时长(ms)")
+    @TableField("DURATION")
+    private Long duration;
+
+
+    @ApiModelProperty("拍摄结束时间")
+    @TableField("PHOTOGRAPH_END_TIME")
+    private Date photographEndTime;
 
 
 
 
     @ApiModelProperty("createTime")
     @ApiModelProperty("createTime")

+ 57 - 13
src/main/java/com/iden/common/util/VideoUtil.java

@@ -2,14 +2,14 @@ package com.iden.common.util;
 
 
 
 
 import com.iden.common.enums.TimeoutOption;
 import com.iden.common.enums.TimeoutOption;
-import org.bytedeco.javacv.FFmpegFrameGrabber;
-import org.bytedeco.javacv.FFmpegFrameRecorder;
+import org.bytedeco.javacpp.avcodec;
+import org.bytedeco.javacv.*;
 import org.bytedeco.javacv.Frame;
 import org.bytedeco.javacv.Frame;
-import org.bytedeco.javacv.Java2DFrameConverter;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 
 
 import javax.imageio.ImageIO;
 import javax.imageio.ImageIO;
+import javax.swing.*;
 import java.awt.*;
 import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.File;
@@ -117,7 +117,7 @@ public class VideoUtil {
         return files;
         return files;
     }
     }
 
 
-    public static List<File> fetchAllPic(File videoFile, String saveDir, Date shootEndTime) throws Exception {
+    public static Long fetchAllPic(File videoFile, String saveDir, Date shootEndTime) throws Exception {
 
 
         Long endTime = shootEndTime.getTime() ;
         Long endTime = shootEndTime.getTime() ;
 
 
@@ -153,7 +153,7 @@ public class VideoUtil {
             i++;
             i++;
         }
         }
         ff.stop();
         ff.stop();
-        return files;
+        return duration;
     }
     }
 
 
     private static File writeToFile(Frame frame, String saveDir, String fileName) throws Exception {
     private static File writeToFile(Frame frame, String saveDir, String fileName) throws Exception {
@@ -198,7 +198,6 @@ public class VideoUtil {
         return times;
         return times;
     }
     }
 
 
-
     /**
     /**
      * 视频截取
      * 视频截取
      * @param videoFile
      * @param videoFile
@@ -207,12 +206,59 @@ public class VideoUtil {
     public static void cut(File videoFile, File outputFile) throws Exception{
     public static void cut(File videoFile, File outputFile) throws Exception{
         boolean isStart = true;// 该变量建议设置为全局控制变量,用于控制录制结束
         boolean isStart = true;// 该变量建议设置为全局控制变量,用于控制录制结束
         FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(videoFile);
         FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(videoFile);
+//        // 微秒 大概为设置时间的两倍
+        //      grabber.setOption(TimeoutOption.RW_TIMEOUT.getKey(), "10000000");
+        // rtsp 默认udp 丢包 改为tcp
+        // grabber.setOption("rtsp_transport", "tcp");
+
+        grabber.start();
+        //好多视频熟悉可以获取后打印 示例几个
+        System.out.println("ImageWidth:" + grabber.getImageWidth());
+        System.out.println("ImageHeight:" + grabber.getImageHeight());
+        System.out.println("AudioChannels:" + grabber.getAudioChannels());
+        System.out.println("Format:" + grabber.getFormat());
+        FrameRecorder recorder = new FFmpegFrameRecorder(outputFile, grabber.getImageWidth(), grabber.getImageHeight(),grabber.getAudioChannels());
+        recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); // avcodec.AV_CODEC_ID_H264,编码
+        recorder.setFormat("flv");//封装格式,如果是推送到rtmp就必须是flv封装格式
+        recorder.setFrameRate( grabber.getFrameRate());
+
+        recorder.start();//开启录制器
+        long startTime=0;
+        long videoTS=0;
+        CanvasFrame frame = new CanvasFrame("camera", CanvasFrame.getDefaultGamma() / grabber.getGamma());
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        frame.setAlwaysOnTop(true);
+        Frame rotatedFrame= null;
+        while (frame.isVisible() && (rotatedFrame = grabber.grabFrame()) != null) {
+            rotatedFrame = grabber.grabFrame();
+            frame.showImage(rotatedFrame);
+            if (startTime == 0) {
+                startTime = System.currentTimeMillis();
+            }
+            videoTS = 1000 * (System.currentTimeMillis() - startTime);
+            recorder.setTimestamp(videoTS);
+            recorder.record(rotatedFrame);
+            Thread.sleep(40);
+        }
+        frame.dispose();
+        recorder.stop();
+        recorder.release();
+        grabber.stop();
+    }
+
+    /**
+     * 视频截取
+     * @param videoFile
+     * @throws Exception
+     */
+    public static void cut2(File videoFile, File outputFile) throws Exception{
+        boolean isStart = true;// 该变量建议设置为全局控制变量,用于控制录制结束
+        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(videoFile);
 //        // 微秒 大概为设置时间的两倍
 //        // 微秒 大概为设置时间的两倍
  //      grabber.setOption(TimeoutOption.RW_TIMEOUT.getKey(), "10000000");
  //      grabber.setOption(TimeoutOption.RW_TIMEOUT.getKey(), "10000000");
         // rtsp 默认udp 丢包 改为tcp
         // rtsp 默认udp 丢包 改为tcp
        // grabber.setOption("rtsp_transport", "tcp");
        // grabber.setOption("rtsp_transport", "tcp");
-        // rtsp 默认udp 丢包 改为tcp
-  //      grabber.setOption("rtsp_transport", "tcp");
+
         grabber.start();
         grabber.start();
         //好多视频熟悉可以获取后打印 示例几个
         //好多视频熟悉可以获取后打印 示例几个
         System.out.println("ImageWidth:" + grabber.getImageWidth());
         System.out.println("ImageWidth:" + grabber.getImageWidth());
@@ -221,11 +267,11 @@ public class VideoUtil {
         System.out.println("Format:" + grabber.getFormat());
         System.out.println("Format:" + grabber.getFormat());
         FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputFile,  grabber.getImageWidth(), grabber.getImageHeight(),grabber.getAudioChannels());
         FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(outputFile,  grabber.getImageWidth(), grabber.getImageHeight(),grabber.getAudioChannels());
         recorder.setFrameRate(grabber.getFrameRate());
         recorder.setFrameRate(grabber.getFrameRate());
-					recorder.setAudioBitrate(grabber.getAudioBitrate());
+        recorder.setAudioBitrate(grabber.getAudioBitrate());
 				recorder.setSampleRate(grabber.getSampleRate());
 				recorder.setSampleRate(grabber.getSampleRate());
 //					recorder.setGopSize(2);
 //					recorder.setGopSize(2);
-        recorder.setFormat(grabber.getFormat());
-    //    recorder.setAudioCodecName("aac");
+        recorder.setFormat("mp4");
+        recorder.setAudioCodecName("aac");
         recorder.setVideoCodec(grabber.getVideoCodec());
         recorder.setVideoCodec(grabber.getVideoCodec());
         recorder.start();
         recorder.start();
         Frame frame = null;
         Frame frame = null;
@@ -241,8 +287,6 @@ public class VideoUtil {
         recorder.release();
         recorder.release();
         grabber.stop();
         grabber.stop();
         grabber.release();
         grabber.release();
-
-
     }
     }
     public static void main(String[] args) {
     public static void main(String[] args) {
         try {
         try {

+ 68 - 0
src/main/java/com/iden/common/vo/CameraVideoVO.java

@@ -0,0 +1,68 @@
+package com.iden.common.vo;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 摄像机视频表(IdenCameraVideo)实体类
+ *
+ * @author makejava
+ * @since 2022-01-03 15:36:55
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "摄像机视频表", description = "")
+public class CameraVideoVO implements Serializable {
+    private static final long serialVersionUID = 914965308244813944L;
+
+    private Long id;
+
+
+    @ApiModelProperty("视频名称")
+    private String name;
+
+
+    @ApiModelProperty("摄像头ID")
+    private Long cameraId;
+
+
+    @ApiModelProperty("小区ID")
+    private Long communityId;
+
+
+    @ApiModelProperty("视频地址")
+    private String videoUrl;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @ApiModelProperty("拍摄开始时间")
+    private Date photographBeginTime;
+
+
+    @ApiModelProperty("时长(ms)")
+    private Long duration;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @ApiModelProperty("拍摄结束时间")
+    private Date photographEndTime;
+
+    @ApiModelProperty("视频缩略图")
+    private String pic;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @ApiModelProperty("createTime")
+    private Date createTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @ApiModelProperty("modifyTime")
+    private Date modifyTime;
+
+
+}