From cd2cfd37366002f790a2ed1435962d4eff7d5cec Mon Sep 17 00:00:00 2001
From: zengh <123456>
Date: Tue, 01 Jun 2021 09:39:30 +0800
Subject: [PATCH] 版本合并

---
 blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/rvideo/controller/RvideoController.java |  278 +++++++++++++++++++++++++++++++-----------------------
 1 files changed, 159 insertions(+), 119 deletions(-)

diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/rvideo/controller/RvideoController.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/rvideo/controller/RvideoController.java
index 378d2eb..9a7ee51 100644
--- a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/rvideo/controller/RvideoController.java
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/rvideo/controller/RvideoController.java
@@ -41,6 +41,7 @@
 import org.bytedeco.javacpp.avcodec;
 import org.bytedeco.javacv.*;
 import java.io.IOException;
+import java.util.Date;
 
 
 /**
@@ -62,7 +63,17 @@
 	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;
+	private static  String xcbj = "cs";
+
+	//录制视频相关
+	private static String streamURL;// 流地址(测试可以用obs推流)
+	private static String filePath;// 文件路径
+	private static Long timesSec = 100L;// 停止录制时长 0为不限制时长
+	private static String fileFormat = "mp4";//录制的文件格式
+	private static boolean isAudio = false;//是否录制声音
+	private static boolean stop = false;
 
 	/**
 	 * 详情
@@ -195,142 +206,171 @@
 //	}
 
 
-//		/**
-//	 * Javacv录制视频
+	/**
+	 * Javacv录制视频
+	 */
+	@PostMapping("/rVoids")
+	public void rVoids(String url,String uid,String jid) {
+
+		/*String UUID = DateUtil.time();
+		UUIDs=UUID;
+		uids=uid;
+		RecordVideoThread recordVideoThread = new RecordVideoThread();
+		recordVideoThread.filePath = "D:\\video\\"+UUID + ".mp4";
+		recordVideoThread.timesSec = 0L;
+		String newJson = StringEscapeUtils.unescapeHtml4(url);
+		recordVideoThread.streamURL =newJson;// 最好设置结束时长 如直接停止程序会造成输出文件的损坏无法正常播放
+		recordVideoThread.isAudio = true;
+		thread = new Thread(recordVideoThread);
+		thread.start();*/
+
+		String UUID = DateUtil.time();
+		UUIDs=UUID;
+		uids=uid;
+		//filePath = "D:\\video\\"+UUID + ".mp4";
+		filePath = "D:\\software\\minio\\data\\jfpt\\void\\"+UUID + ".mp4";
+		timesSec = 0L;
+		String newJson = StringEscapeUtils.unescapeHtml4(url);
+		streamURL =newJson;// 最好设置结束时长 如直接停止程序会造成输出文件的损坏无法正常播放
+		isAudio = true;
+		xcbj = "ce";
+		Thread threads = new Thread(new Runnable() {
+			@Override
+			public void run() {
+				//System.out.println("开始1111111");
+
+				// 获取视频源
+				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(10);// 帧数
+					//百度翻译的比特率,默认400000,但是我400000贼模糊,调成800000比较合适
+					recorder.setVideoBitrate(800000);
+					recorder.start();
+					System.out.println("推流开始");
+
+					//记录当前时间
+					long dqdate = new Date().getTime();
+
+					while (!jid.equals(xcbj)) {
+						//记录现在时间
+						long xzdate = new Date().getTime();
+						if (xzdate > (dqdate + 300000)){
+							break;
+						}
+
+						if (frame != null){
+
+							System.out.println("开始");
+							recorder.record(frame);//录制
+							frame = grabber.grabFrame();//获取下一帧
+							System.out.println("结束");
+
+						}
+					}
+
+					if (jid.equals(xcbj)){
+						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 + "秒");
+
+					String vaddress = null;
+					//返回路径
+					vaddress = "https://web.byisf.com/" + PRF_MINIO_URL + UUID + ".mp4";
+					//把路径通过警情id添加到警情信息
+					alarmService.updateVaddress(vaddress, uids, jid);
+				}
+
+			}
+		});
+		threads.start();
+
+	}
+
+	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();
+			}
+		}
+
+	}
+
+	@PostMapping("/stop")
+	public String stop(String jid) throws FrameGrabber.Exception {
+		//返回前端路径
+//		String vaddress = null;
+//		if (thread != null){
+//			thread.stop();
+//			//返回路径
+//			vaddress = "https://web.byisf.com/" + PRF_MINIO_URL + UUIDs + ".mp4";
+//			//把路径通过警情id添加到警情信息
+//			alarmService.updateVaddress(vaddress,uids,jid);
+//			return vaddress;
+//		}
+		xcbj = jid;
+		return "";
+	}
+
+
+//	/**
+//	 * Javacv录制视频测试
 //	 */
-//	@PostMapping("/rVoids")
+//	@PostMapping("/cs")
 //	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;
+//		RecordVideoThread recordVideoThread = new RecordVideoThread(newJson,"D:\\software\\minio\\data\\jfpt\\void\\"+UUID +".mp4");
 //		thread = new Thread(recordVideoThread);
 //		thread.start();
 //	}
-
-//	@PostMapping("/stop")
-//	public String stop(String jid) throws FrameGrabber.Exception {
+//
+//	@PostMapping("/csc")
+//	public String stopcs(String jid) throws FrameGrabber.Exception {
 //		//返回前端路径
 //		String vaddress = null;
-//        thread.stop();
+//		//  发出中断标志  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;
 //
 //	}
-
-	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录制视频测试
-	 */
-	@PostMapping("/rVoids")
-	public void cs(String url,String uid) {
-		String UUID = DateUtil.time();
-		UUIDs=UUID;
-		if (uid!=null){
-			count++;
-		}
-		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("/stop")
-	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;
-
-	}
 
 
 

--
Gitblit v1.9.3