|
@@ -3,6 +3,10 @@ package com.huimv.receive.common.utils;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.lang.UUID;
|
|
|
import com.jcraft.jsch.*;
|
|
|
+import org.bytedeco.ffmpeg.avcodec.AVCodec;
|
|
|
+import org.bytedeco.javacv.FFmpegFrameGrabber;
|
|
|
+import org.bytedeco.javacv.FFmpegFrameRecorder;
|
|
|
+import org.bytedeco.javacv.Frame;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.util.StringUtils;
|
|
@@ -12,6 +16,7 @@ import javax.imageio.ImageIO;
|
|
|
import java.awt.*;
|
|
|
import java.awt.image.BufferedImage;
|
|
|
import java.io.*;
|
|
|
+import java.nio.file.Files;
|
|
|
import java.util.Date;
|
|
|
|
|
|
@Component
|
|
@@ -178,6 +183,107 @@ public class UploadImage {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //上传压缩的视频
|
|
|
+ public String getVideoCom(MultipartFile image) throws IOException {
|
|
|
+ String originalFilename = image.getOriginalFilename();
|
|
|
+ String filenameExtension = StringUtils.getFilenameExtension(originalFilename);
|
|
|
+ String path = DateUtil.format(new Date(), "yyyy-MM");
|
|
|
+ try {
|
|
|
+ InputStream inputStream = image.getInputStream();
|
|
|
+ BufferedInputStream in = new BufferedInputStream(inputStream);
|
|
|
+ ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
|
|
|
+
|
|
|
+ byte[] temp = new byte[1024];
|
|
|
+ int size = 0;
|
|
|
+ while ((size = in.read(temp)) != -1) {
|
|
|
+ out.write(temp, 0, size);
|
|
|
+ }
|
|
|
+ in.close();
|
|
|
+ byte[] content = out.toByteArray();
|
|
|
+ String imgname = UUID.randomUUID() + "." + filenameExtension;
|
|
|
+ sshSftp(content, path, imgname);
|
|
|
+ return url + path + "/" + imgname;
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return "上传失败";
|
|
|
+ }
|
|
|
+
|
|
|
+// //获取文件输入流
|
|
|
+// InputStream inputStream = image.getInputStream();
|
|
|
+// String originalFilename = image.getOriginalFilename();
|
|
|
+// String filenameExtension = StringUtils.getFilenameExtension(originalFilename);
|
|
|
+// String path = DateUtil.format(new Date(), "yyyy-MM");
|
|
|
+//
|
|
|
+// try {
|
|
|
+//
|
|
|
+// File tempFile = new File("tempVideo.mp4");
|
|
|
+// image.transferTo(tempFile);
|
|
|
+////
|
|
|
+//// // 使用FFmpegFrameGrabber读取视频信息
|
|
|
+//// FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(tempFile);
|
|
|
+//// grabber.start();
|
|
|
+////
|
|
|
+//// // 创建输出文件
|
|
|
+//// File compressedFile = new File("compressedVideo.mp4");
|
|
|
+////
|
|
|
+//// // 使用FFmpegFrameRecorder进行压缩
|
|
|
+//// FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(compressedFile, grabber.getImageWidth(), grabber.getImageHeight(), grabber.getAudioChannels());
|
|
|
+//// recorder.setInterleaved(true);
|
|
|
+//// recorder.setVideoOption("preset", "ultrafast"); // 设置压缩速度,可以根据需要调整
|
|
|
+//// recorder.setVideoOption("crf", "40"); // 设置视频质量,范围通常是0-51,值越大压缩率越高,质量越低
|
|
|
+//// recorder.setVideoCodec(findH264Encoder(recorder)); // 查找并设置H.264编解码器
|
|
|
+//// recorder.setFormat("mp4");
|
|
|
+//// recorder.setFrameRate(grabber.getFrameRate());
|
|
|
+//// recorder.setSampleRate(grabber.getSampleRate());
|
|
|
+//// recorder.setAudioBitrate(grabber.getAudioBitrate());
|
|
|
+//// recorder.setVideoBitrate(grabber.getVideoBitrate() / 2); // 压缩一半的视频比特率
|
|
|
+////
|
|
|
+//// // 开始录制并压缩视频
|
|
|
+//// recorder.start();
|
|
|
+//// Frame frame;
|
|
|
+//// while ((frame = grabber.grabFrame()) != null) {
|
|
|
+//// recorder.record(frame);
|
|
|
+//// }
|
|
|
+//// recorder.stop();
|
|
|
+//// grabber.stop();
|
|
|
+////
|
|
|
+//// // 读取压缩后的视频为字节数组
|
|
|
+//// byte[] compressedVideoBytes = Files.readAllBytes(compressedFile.toPath());
|
|
|
+////
|
|
|
+//// // 删除临时文件
|
|
|
+//// tempFile.delete();
|
|
|
+//// compressedFile.delete();
|
|
|
+////
|
|
|
+// String imgname = UUID.randomUUID() + "." + filenameExtension;
|
|
|
+// sshSftp(image, path, imgname);
|
|
|
+// return url+ path + "/" + imgname;
|
|
|
+// } catch (Exception e) {
|
|
|
+// e.printStackTrace();
|
|
|
+// return "上传失败";
|
|
|
+// } finally {
|
|
|
+// inputStream.close();
|
|
|
+// }
|
|
|
+ }
|
|
|
+
|
|
|
+// private int findH264Encoder(FFmpegFrameRecorder recorder) {
|
|
|
+// AVCodec codec = null;
|
|
|
+//
|
|
|
+// AVCodec.avcodec_register_all(); // 注册所有编解码器
|
|
|
+// for (AVCodec.AVCodecDescriptor desc : AVCodec.avcodec_descriptor_get(null)) {
|
|
|
+// if (desc.type() == AVCodec.AVMEDIA_TYPE_VIDEO &&
|
|
|
+// desc.id() != AVCodec.AV_CODEC_ID_NONE &&
|
|
|
+// desc.name().equals("libx264")) { // libx264是H.264的常用编码器名称
|
|
|
+// codec = AVCodec.avcodec_find_encoder(desc.id());
|
|
|
+// break;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if (codec == null) {
|
|
|
+// throw new RuntimeException("H.264 encoder not found");
|
|
|
+// }
|
|
|
+// return codec.id();
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|