阿里云视频点播(VOD)服务的视频上传JAVA代码开发(转码处理)

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通知视频内容已转码完成, 可以对外展示.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值