阿里云首页 智能媒体生产 相关技术圈

配置剪辑完成回调

本文向您介绍如何配置事件通知,获取合成作业完成的回调。

单个任务的自定义回调地址配置

剪辑合成任务接口SubmitMediaProducingJob目前支持用户自定义配置回调地址,可以支持用户自定义配置HTTP地址或者mns回调地址。

HTTP(S) 回调需要部署一个HTTP服务来接收回调消息,并在剪辑合成请求中配置回调URL;当剪辑合成任务完成时,ICE服务端会对该URL发起HTTP POST请求,任务完成情况内容将通过HTTP Body送达。

MNS回调则需要用户在任务完成的region配置以ice-callback开头的消息队列,ICE服务器会将消息内容发送至您的MNS消息队列中。

剪辑合成数据消息结构见回调通知内容

步骤

1、在发起一个剪辑合成任务时对UserData进行配置,UserData配置位置请见提交剪辑合成作业

2、选择配置自定义http回调地址或者mns回调地址,UserData配置示例如下。

http回调地址
{"NotifyAddress":"http://xx.xx.xxx"}

https回调地址
{"NotifyAddress":"https://xx.xx.xxx"}

mns回调地址自定义(必须以ice-callback开头才可以进行回调)
{"NotifyAddress":"ice-callback-*"}

全局回调地址配置

目前全局回调地址配置方式仅支持MNS消息的配置。

步骤

  1. mns 控制台创建相应区域的回调消息队列。队列的名称必须是 ice-callback- 开头的。

  2. 调用 设置事件通知配置 API,设置当前区域的回调消息队列名称(步骤1配置的队列名)。

  3. 写代码监听 mns 消息,收取步骤1配置的队列名称的消息,对消息进行处理。

代码示例:

import java.util.List;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import com.aliyun.mns.client.CloudAccount;
import com.aliyun.mns.client.CloudQueue;
import com.aliyun.mns.client.MNSClient;
import com.aliyun.mns.common.ClientException;
import com.aliyun.mns.common.ServiceException;
import com.aliyun.mns.common.utils.ServiceSettings;
import com.aliyun.mns.model.Message;

public class IceProduceMessageConsumerDemo {

    public static void main(String[] args) {

        // 读取 ~/.aliyun-mns.properties  文件中的mns 配置:
        // mns.accesskeyid, mns.accesskeysecret, mns.queue.endpoint
        // ak/sk 所属子用户拥有 MNS 的完全读写权限
        CloudAccount account = new CloudAccount(
            ServiceSettings.getMNSAccessKeyId(),
            ServiceSettings.getMNSAccessKeySecret(),
            ServiceSettings.getMNSAccountEndpoint());
        MNSClient client = account.getMNSClient(); //this client need only initialize once

        // Demo for receive message code
        try{
            CloudQueue queue = client.getQueueRef("ice-callback-test");// replace with your queue name
            List<Message> messages = queue.batchPopMessage(10, 30);
            for(Message popMsg : messages)
            {
                if (popMsg != null){
                    System.out.println("message handle: " + popMsg.getReceiptHandle());
                    System.out.println("message body: " + popMsg.getMessageBodyAsString());
                    System.out.println("message id: " + popMsg.getMessageId());
                    System.out.println("message dequeue count:" + popMsg.getDequeueCount());

                    JSONObject jsonObject = JSON.parseObject(popMsg.getMessageBodyAsString());

                    // 只处理 ProduceMediaComplete 类型消息:
                    if("ProduceMediaComplete".equals(jsonObject.getString("EventType"))){
                        JSONObject messageBody = jsonObject.getJSONObject("MessageBody");

                        System.out.println("ProjectId:" + messageBody.getString("ProjectId"));
                        System.out.println("JobId:" + messageBody.getString("JobId"));
                        System.out.println("Status:" + messageBody.getString("Status"));
                        System.out.println("MediaId:" + messageBody.getString("MediaId"));
                        System.out.println("MediaURL:" + messageBody.getString("MediaURL"));

                        //<<to add your special logic.>>

                        //remember to  delete message when consume message successfully.
                        //queue.deleteMessage(popMsg.getReceiptHandle());
                        System.out.println("delete message successfully.\n");
                    }


                }
            }
        } catch (ClientException ce)
        {
            System.out.println("Something wrong with the network connection between client and MNS service."
                + "Please check your network and DNS availability.");
            ce.printStackTrace();
        } catch (ServiceException se)
        {
            if (se.getErrorCode().equals("QueueNotExist"))
            {
                System.out.println("Queue is not exist.Please create queue before use");
            } else if (se.getErrorCode().equals("TimeExpired"))
            {
                System.out.println("The request is time expired. Please check your local machine timeclock");
            }
            /*
            you can get more MNS service error code in following link.
            https://help.aliyun.com/document_detail/mns/api_reference/error_code/error_code.html?spm=5176.docmns/api_reference/error_code/error_response
            */
            se.printStackTrace();
        } catch (Exception e)
        {
            System.out.println("Unknown exception happened!");
            e.printStackTrace();
        }

        client.close();
    }
}

首页 智能媒体生产 最佳实践 配置剪辑完成回调