MessageHandler:
private static final String video_upload_event_type = "FileUploadComplete";
private static final String url_upload_event_type = "UploadByURLComplete";
private static final String transcode_event_type = "TranscodeComplete";
private static final String snapshot_event_type = "SnapshotComplete";
private static final String AI_audit_event_type = "AIMediaAuditComplete";
private static final String manual_audit_event_type = "CreateAuditComplete";
private static final String image_upload_event_type = "ImageUploadComplete";
private static final String material_upload_event_type = "AttachedMediaUploadComplete";
String body = message.getMessageBody();
Map msg = null;
try {
msg = JSONObject.parseObject(body, Map.class);
} catch (Exception e) {
log.error("Message Transcode Error: {}, message: {}", e.getMessage(), body);
}
if (msg != null && msg.get("EventType") != null) {
System.out.println("Handle one Message: " + body);
String eventType = msg.get("EventType").toString();
if (video_upload_event_type.equals(eventType)) {
flag = videoUploadMH.handle(body);
} else if (url_upload_event_type.equals(eventType)) {
flag = urlUploadMH.handle(body);
} else if (transcode_event_type.equals(eventType)) {
flag = transcodeMH.handle(body);
} else if (snapshot_event_type.equals(eventType)) {
flag = snapshotMH.handle(body);
} else if (AI_audit_event_type.equals(eventType)) {
flag = AIAuditMH.handle(body);
} else if (manual_audit_event_type.equals(eventType)) {
flag = manualAuditMH.handle(body);
} else if (image_upload_event_type.equals(eventType)) {
flag = imageMH.handle(body);
} else {
flag = true;
}
} else {
flag = true;
}
videoUploadHandler: 存储视频上传记录
public boolean handle(String message) {
try {
UploadEventMessage uploadMsg = JSONObject.parseObject(message, UploadEventMessage.class);
MediaExtend extend = MediaExtendUtil.extendStr2MediaExtend(uploadMsg.getExtend());
if (extend == null) {
log.error("UploadEventMessage need MediaExtend! Message: {}", message);
return true;
}
UploadMapping mapping = MediaExtendUtil.extend2UploadMapping(extend, uploadMsg.getVideoId());
boolean i1 = uploadEventMessageService.insertOrUpdate(uploadMsg);
boolean i2 = uploadMappingService.insertOrUpdate(mapping);
return i1 && i2;
} catch (Exception e) {
log.error("UploadEventMessage error: {} Message: {}", e.getMessage(), message);
return false;
}
}
transcodeMessageHandle: 下载转码后的视频到本地, 使用中台或App预先生成的地址.
public boolean handle(String message) {
try {
log.info("Handle TranscodeEventMessage: {}", message);
TranscodeEventMessage transMsg = JSONObject.parseObject(message, TranscodeEventMessage.class);
if (transMsg == null || "fail".equalsIgnoreCase(transMsg.getStatus())) {
log.error("Transcode Failed! Message: {}", message);
return true;
}
MediaExtend extend = MediaExtendUtil.extendStr2MediaExtend(transMsg.getExtend());
if (extend == null) {
log.error("TranscodeEventMessage need MediaExtend! Message: {}", message);
return true;
}
transMsg.setExtend(JSONObject.toJSONString(extend));
try {
TranscodeEventMessage msg = transcodeEventMessageMapper.selectById(transMsg.getVideoId());
if (msg == null || msg.getLocalFileUrl() == null) {
// 获取下载地址 异步下载
log.info("FileDownloadService::downloadFile2Local video excute once: {} : {}",
transMsg.getVideoId(), extend.getLocalVideoPath());
String url = fileDownloadService.downloadFile2Local(
transMsg.getStreamInfos().get(0).getFileUrl(),
extend.getLocalVideoPath(),
"video");
transMsg.setLocalFileUrl(url);
// 保存到素材库
try {
saveToMaterialVideoLib(transMsg, url, extend);
} catch (Exception e) {
e.printStackTrace();
log.error("TranscodeMessageHandler::saveToMaterialVideoLib Error");
}
}
} catch (IOException e) {
log.error("DownloadFile2Local error: {}", e.getMessage());
}
int i1 = transcodeEventDao.save(transMsg);
UploadMapping um = new UploadMapping();
um.setVideoId(transMsg.getVideoId());
um.setTranscodeId(transMsg.getStreamInfos().get(0).getJobId());
um.setUpdateTime(new Date());
int i2 = uploadMappingMapper.updateById(um);
return i1 == i2 && i1 == 1;
} catch (Exception e) {
e.printStackTrace();
log.error("TranscodeEventMessage error: {} Message: {}", e.getMessage(), message);
return false;
}
}
SnapshotEventMessageHandler: 截图, 功能类似
public boolean handle(String message) {
try {
List<String> snapshotList = new ArrayList<>();
SnapshotEventMessage snapMsg = JSONObject.parseObject(message, SnapshotEventMessage.class);
MediaExtend extend = MediaExtendUtil.extendStr2MediaExtend(snapMsg.getExtend());
if (extend == null) {
log.error("SnapshotEventMessage need MediaExtend! Message: {}", message);
return true;
}
snapMsg.setExtend(JSONObject.toJSONString(extend));
String cover = snapMsg.getCoverUrl();
if (cover != null) {
cover = cover.substring(0, cover.indexOf("?"));
snapMsg.setCoverUrl(cover);
}
......
}
最后创建定时任务, 扫描已完成所有媒体处理任务的视频, 根据videoId通知视频内容已转码完成, 可以对外展示.