<!--图片转视频依赖-->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.5.2</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.2</version>
</dependency>
/**
* @return com.nwpusct.csal.common.util.RestResult<java.lang.String>
* @Author HB
* @Date 2020/10/14 16:44
**/
@ApiOperation(value = "保存数据到数据库")
@PostMapping("/fileToDataSave")
public RestResult<String> fileToDataSave(@RequestBody DatagoMv createMp4
) {
if (StringUtils.isNotEmpty(createMp4.getId())) {
String mvPath = createMp4.getMvPath();
File f = new File(mvPath);
f.delete();
ndeFileServerService.deleteByMvId(createMp4.getId());
}
String locaPath = null;
//文件保存集合
List<File> fileList = new ArrayList<>();
DatagoMv dm = new DatagoMv();
dm.setId(StringUtils.createUUID());
dm.setCreateTime(new Date());
dm.setFileId(createMp4.getFileId());
NdeUploadFile ndeUploadFile = ndeUploadFileService.ndeUploadById(createMp4.getFileId());
int i=0;
List<NdeFileServer> fileServerList = new ArrayList<>();
for (ImageData strList : createMp4.getFrameList()
) {
String filePath = strList.getImageUrl().replaceAll(httpPath, createPath.split("/")[0]);
String userId = filePath.split("/")[3];
String batch = filePath.split("/")[4];
NdeFileServer nfs = new NdeFileServer();
nfs.setId(StringUtils.createUUID());
nfs.setCreateTime(new Date());
nfs.setImportNum(i++);
nfs.setUserId(userId);
nfs.setBatch(batch);
nfs.setMvId(dm.getId());
nfs.setIsKeyFrame(strList.getIsKeyFrame());
//移动文件
File vueFile = new File(filePath);
locaPath = createPath + "/" + ndeUploadFile.getDirUrl();
File locaFile = new File(locaPath);
if (!locaFile.exists()) {
locaFile.mkdirs();
}
//要移动得文件路径
String newFile = locaPath + "/" + vueFile.getName();
nfs.setFilePath(newFile);
File file = new File(newFile);
//移动文件
//vueFile.renameTo(file);
try {
copyFile(vueFile, file);
fileList.add(new File(newFile));
} catch (IOException e) {
e.printStackTrace();
return RestResultUtil.failed("生成视频异常");
}
nfs.setHttpUrl(httpPath + newFile.replaceAll(newFile.split("/")[0], ""));
fileServerList.add(nfs);
}
//合成的MP4
String mp4SavePath = locaPath + "/" + createMp4.getName() + ".mp4";
Map<Integer, File> imgMap = new HashMap<Integer, File>();
int num = 0;
for (File imgFile : fileList) {
imgMap.put(num, imgFile);
num++;
}
try {
//视频生成
FileUtil.createMp4(mp4SavePath, imgMap, createMp4.getWidth(), createMp4.getHeight(),
createMp4.getFps());
//批量增加
ndeFileServerService.insertBatchSelective(fileServerList);
//视频添加
dm.setHeight(createMp4.getHeight());
dm.setMvHttp(httpPath + mp4SavePath.replaceAll(mp4SavePath.split("/")[0], ""));
dm.setMvPath(mp4SavePath);
dm.setFps(createMp4.getFps());
dm.setWidth(createMp4.getWidth());
dm.setName(createMp4.getName()+ ".mp4");
datagoMvService.insertSelective(dm);
return RestResultUtil.genSuccessResult(dm.getId());
} catch (FrameRecorder.Exception e) {
e.printStackTrace();
}
return RestResultUtil.failed();
}