南昌市物联网技防平台-后台
tangzy
2021-04-25 a4ff2b571be305e2641c9dd67797f4102e795ebb
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/rvideo/controller/RvideoController.java
@@ -16,23 +16,18 @@
 */
package org.springblade.jfpt.rvideo.controller;
import io.minio.MinioClient;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import jodd.util.StringPool;
import lombok.AllArgsConstructor;
import javax.validation.Valid;
import net.logstash.logback.encoder.org.apache.commons.lang3.StringEscapeUtils;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringUtil;
import org.springblade.jfpt.alarm.service.IAlarmService;
import org.springblade.jfpt.xlfeedback.service.IXlfeedbackService;
import org.springframework.web.bind.annotation.*;
@@ -67,6 +62,8 @@
   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;
   /**
    * 详情
@@ -135,6 +132,7 @@
   /**
    * 删除
    */
   @PostMapping("/remove")
   @ApiOperationSupport(order = 8)
   @ApiOperation(value = "删除", notes = "传入ids")
@@ -142,89 +140,122 @@
      return R.status(rvideoService.removeByIds(Func.toLongList(ids)));
   }
   /**
    * @param sourcePath 源路径
    * @param jid 警情id
    * @throws Exception
    */
   @PostMapping("/rVoid")
   public String rVoid(String sourcePath,String jid) throws Exception {
      String webroot = "D:\\LXVideoServer\\3rd\\ffmpeg\\bin";
      String UUID = DateUtil.time();
      //目标路径
      String targetPath = PRE_URL + UUID + ".mp4";
      //返回前端路径
      String vaddress = null;
      Runtime run = null;
      try {
         run = Runtime.getRuntime();
         long start = System.currentTimeMillis();
         System.out.println(new File(webroot).getAbsolutePath());
         //通过视频url录制30s视频保存,格式为MP4
         String newJson = StringEscapeUtils.unescapeHtml4(sourcePath);
         Process p = run.exec(new File(webroot).getAbsolutePath() + "/ffmpeg -i " +newJson+ " -y -t 00:00:30 -codec copy -f mp4 " + targetPath);
         //释放进程
         p.getOutputStream().close();
         p.getInputStream().close();
         p.getErrorStream().close();
         p.waitFor();
         long end = System.currentTimeMillis();
         System.out.println(sourcePath + " convert success, costs:" + (end - start) + "ms");
      } catch (Exception e) {
         e.printStackTrace();
      } finally {
         //run调用lame解码器最后释放内存
         run.freeMemory();
         //返回路径
         vaddress = "https://web.byisf.com/" + PRF_MINIO_URL + UUID + ".mp4";
         //把路径通过警情id添加到警情信息
         alarmService.updateVaddress(vaddress,jid);
      }
      return vaddress;
   }
//   /**
//    * @param sourcePath 源路径
//    * @param jid 警情id
//    * @throws Exception
//    */
//   @PostMapping("/rVoid")
//   public String rVoid(String sourcePath,String jid) throws Exception {
//      String webroot = "D:\\LXVideoServer\\3rd\\ffmpeg\\bin";
//      String UUID = DateUtil.time();
//      //目标路径
//      String targetPath = PRE_URL + UUID + ".mp4";
//      //返回前端路径
//      String vaddress = null;
//      Runtime run = null;
//
//      try {
//
//         run = Runtime.getRuntime();
//
//         long start = System.currentTimeMillis();
//
//         System.out.println(new File(webroot).getAbsolutePath());
//         //通过视频url录制30s视频保存,格式为MP4
//         String newJson = StringEscapeUtils.unescapeHtml4(sourcePath);
//         Process p = run.exec(new File(webroot).getAbsolutePath() + "/ffmpeg -i " +newJson+ " -y -t 00:00:30 -codec copy -f mp4 " + targetPath);
//
//         //释放进程
//
//         p.getOutputStream().close();
//
//         p.getInputStream().close();
//
//         p.getErrorStream().close();
//
//         p.waitFor();
//
//         long end = System.currentTimeMillis();
//
//         System.out.println(sourcePath + " convert success, costs:" + (end - start) + "ms");
//
//      } catch (Exception e) {
//
//         e.printStackTrace();
//
//      } finally {
//         //run调用lame解码器最后释放内存
//         run.freeMemory();
//         //返回路径
//         vaddress = "https://web.byisf.com/" + PRF_MINIO_URL + UUID + ".mp4";
//         //把路径通过警情id添加到警情信息
//         alarmService.updateVaddress(vaddress,jid);
//      }
//      return vaddress;
//   }
      /**
    * Javacv录制视频
    */
   @PostMapping("/rVoids")
   public void rVoids() {
   public void rVoids(String url,String uid) {
      String UUID = DateUtil.time();
      UUIDs=UUID;
      uids=uid;
      RecordVideoThread recordVideoThread = new RecordVideoThread();
      recordVideoThread.filePath = "D:\\software\\minio\\data\\jfpt\\void\\"+UUID + ".mp4";
      recordVideoThread.timesSec = 0L;
      recordVideoThread.streamURL = "https://web.byisf.com:18000/live?port=1935&app=live&stream=0012415A75C6-1";// 最好设置结束时长 如直接停止程序会造成输出文件的损坏无法正常播放
      String newJson = StringEscapeUtils.unescapeHtml4(url);
      recordVideoThread.streamURL =newJson;// 最好设置结束时长 如直接停止程序会造成输出文件的损坏无法正常播放
      recordVideoThread.isAudio = true;
      thread = new Thread(recordVideoThread);
      thread.start();
   }
   @PostMapping("/stop")
   public void stop(String jid) throws FrameGrabber.Exception {
   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,jid);
      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;
//
//   }
}