wanghongbo

素材封面图

package com.wondertek.dto.image;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.io.Serializable;
import java.util.*;
@Data
public class ImageVideoReq implements Serializable {
// 抽帧偏移量(毫秒)
@NotNull(message = "offset不可为空")
private Long offset;
// 输入参数,路径逗号分割
@NotBlank(message = "input参数集不可为空")
private String input;
// 截图参数
@NotEmpty(message = "output参数集不可为空")
private List<OutPut> output;
}
... ...
package com.wondertek.dto.image;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.io.Serializable;
@Data
public class OutPut implements Serializable {
// 序号1开始
@NotNull(message = "index不可为空")
private Integer index;
// 图片保存完整路径
@NotBlank(message = "path不可为空")
private String path;
}
... ...
... ... @@ -10,9 +10,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.type.TypeReference;
import com.wondertek.dto.*;
import com.wondertek.dto.image.ImageVideoReq;
import com.wondertek.dto.image.OutPut;
import com.wondertek.entity.BackupConfig;
import com.wondertek.entity.BackupMaterial;
import com.wondertek.entity.StreamTask;
import com.wondertek.enums.MaterialSourceEnum;
import com.wondertek.enums.PlayTypeEnum;
import com.wondertek.exception.ServiceException;
import com.wondertek.mapper.BackupConfigMapper;
... ... @@ -52,6 +55,8 @@ public class BackupMaterialServiceImpl extends ServiceImpl<BackupMaterialMapper,
private String switchStreamUrl;
@Value("${transcode.swapBackupUrl}")
private String swapBackupUrl;
@Value("${rec.getImageUrl}")
private String recGetImageUrl;
@Override
... ... @@ -103,7 +108,7 @@ public class BackupMaterialServiceImpl extends ServiceImpl<BackupMaterialMapper,
String fileName = backupUploadVo.getBackupName() + "." + backupUploadVo.getFileType();
///home/wondertek/material_file_assets/dianpian/2025/07/24/roomid/
String filedir = FileUtils.generateDianPianDir(backupUploadVo.getRoomId().toString(), realPath);
String destFilePath = filedir + fileName;//文件上传目录,绝对路径
String destFilePath = filedir + realName;//文件上传目录,绝对路径
try {
fileService.upload(backupFile, destFilePath);
} catch (Exception e) {
... ... @@ -276,6 +281,9 @@ public class BackupMaterialServiceImpl extends ServiceImpl<BackupMaterialMapper,
} catch (Exception e) {
return ResultBean.error("上传文件异常");
}
//
//保存垫片素材表
BackupMaterial backupMaterial = new BackupMaterial();
backupMaterial.setFileId(fileId);
... ... @@ -285,6 +293,41 @@ public class BackupMaterialServiceImpl extends ServiceImpl<BackupMaterialMapper,
backupMaterial.setFileType(materialUploadVo.getFileType());
backupMaterial.setCreatedTime(LocalDateTime.now());
backupMaterial.setCreatedBy("admin");
backupMaterial.setDel("0");
backupMaterial.setSource(MaterialSourceEnum.UPLOAD.getCode());
//抽封面图,调用定帧抽图接口
ImageVideoReq imageVideoReq = new ImageVideoReq();
imageVideoReq.setInput(destFilePath);
imageVideoReq.setOffset(0L);
OutPut outPut = new OutPut();
outPut.setIndex(0);
String coverPath = filedir + realName.substring(0, realName.lastIndexOf(".")) + ".jpg";
outPut.setPath(coverPath);
imageVideoReq.setOutput(Arrays.asList(outPut));
try {
HttpResponse execute = HttpRequest.post(recGetImageUrl)
.header("Content-Type", "application/json")
.body(JSONUtils.obj2json(imageVideoReq)).timeout(30000).execute();
if (execute.isOk()) {
log.info("-->请求能力平台定帧抽图接口,url:{},paramsMap:{}",recGetImageUrl,imageVideoReq);
String body = execute.body();
AbilityResp response = JSONUtils.jsonToObject(body, new TypeReference<AbilityResp>() {
});
if (response.getRet() == 0) {
backupMaterial.setCoverPath(coverPath.replace(realPath, ""));
log.info("请求能力平台定帧抽图接口成功");
}else {
log.info("请求能力平台定帧抽图接口响应失败,response:{}",response);
throw new ServiceException("请求能力平台定帧抽图接口响应失败");
}
} else {
log.error("请求能力平台定帧抽图接口失败,url:{},body:{}", switchStreamUrl, execute.body());
}
} catch (Exception e) {
log.error("请求能力平台定帧抽图接口失败,url:{}", switchStreamUrl, e);
}
backupMaterialMapper.insert(backupMaterial);
return ResultBean.ok("新增素材成功");
... ...
package com.wondertek.util;
import com.wondertek.enums.GlobalCodeEnum;
import lombok.Data;
@Data
public class AbilityResp {
private String msg;
private String taskId;
private Integer ret;
public Boolean isSuccess() {
return GlobalCodeEnum.SUCCESS.getCode().equals(this.ret.toString());
}
}
... ...
... ... @@ -66,6 +66,9 @@ transcode:
swapBackupUrl: http://192.168.1.237:9002/api/v1/swapBackup # 切垫片
getTaskDetail: http://192.168.1.237:9002/api/v1/getTaskDetail
rec:
getImageUrl: http://192.168.1.97:12000/api/v3/picture/getImage #定帧抽图接口
file:
realPath: /home/wondertek/material_file_assets/dianpian/
... ...
... ... @@ -66,6 +66,9 @@ transcode:
swapBackupUrl: http://192.168.1.237:9002/api/v1/swapBackup # 切垫片
getTaskDetail: http://192.168.1.237:9002/api/v1/getTaskDetail
rec:
getImageUrl: http://192.168.1.97:12000/api/v3/picture/getImage #定帧抽图接口
file:
realPath: /home/wondertek/material_file_assets/dianpian/
... ...