|
@@ -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 {
|