Ao utilizar o recurso de edição online do Intelligent Media Services (IMS), configure eventos de callback para receber atualizações sobre o progresso e o status dos trabalhos. Isso permite executar outras operações de negócios de maneira oportuna.
Métodos de callback
Utilize requisições HTTP e filas SMQ para receber notificações de eventos. Para mais informações, consulte Métodos de callback.
Implementação
É possível configurar URLs de callback personalizadas para trabalhos individuais ou definir uma URL de callback global.
-
URL de callback personalizada para um único trabalho: trata-se da URL especificada no momento do envio de um trabalho de edição e produção. Chame a operação SubmitMediaProducingJob para definir a URL de callback HTTP ou HTTPS, ou uma URL de callback do Simple Message Queue (SMQ).
Para callbacks HTTP ou HTTPS, implante um serviço HTTP capaz de receber as mensagens de callback e especifique a URL ao enviar o trabalho de edição e produção. Após a conclusão do trabalho, o IMS envia uma requisição HTTP POST contendo o progresso no corpo da requisição.
Caso selecione callbacks MNS, configure uma fila de mensagens com prefixo
ice-callbackna região onde o trabalho será concluído. O servidor IMS enviará as mensagens para essa fila.
-
URL de callback global: aplica-se a todos os trabalhos de processamento de mídia. Nas Global Settings do IMS, defina um endpoint de fila de mensagens como a URL de callback global. Quando um trabalho for concluído, o IMS enviará uma notificação para esse endereço.
NotaApenas filas de mensagens do SMQ são suportadas.
Estrutura da mensagem
Para detalhes sobre a estrutura das mensagens de trabalhos de edição e produção concluídos, consulte Lista de eventos.
Pré-requisitos
Se optar pelo método de SMQ queue, garanta que o IMS tenha autorização para acessar o SMQ. Para mais informações, consulte Simple Message Queue (antigo MNS): Ativação e permissões.
Configurar uma URL de callback personalizada para um único trabalho
Ao chamar a operação SubmitMediaProducingJob para enviar um trabalho, especifique a URL de callback HTTP, HTTPS ou SMQ no parâmetro UserData. Exemplo de código:
-
URL de callback HTTP ou HTTPS
{"NotifyAddress":"http(s)://**.**.***"} -
URL de callback SMQ (deve ser o endpoint de uma fila de mensagens com prefixo
ice-callback){"NotifyAddress":"ice-callback-****"}
Configurar uma URL de callback global
Crie uma fila de mensagens no console do SMQ. O nome da fila deve começar com
ice-callback. Para mais informações, consulte Criar uma fila.Chame a operação SetEventCallback para configurar os callbacks de eventos. No parâmetro
CallbackQueueName, especifique o nome da fila criada na Etapa 1.-
Monitore a fila de mensagens da Etapa 1 e processe as mensagens recebidas. O código abaixo serve como exemplo.
NotaA versão do SDK do servidor no exemplo a seguir é apenas para referência. Para obter a versão mais recente, consulte SDK do Servidor.
<dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.9</version> </dependency> <dependency> <groupId>com.aliyun.mns</groupId> <artifactId>aliyun-sdk-mns</artifactId> <version>1.1.9</version> </dependency> </dependencies>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) { // Read the SMQ configuration from the ~/.aliyun-mns.properties file: // mns.accesskeyid, mns.accesskeysecret, mns.queue.endpoint // The RAM user to which the AccessKey pair belongs has full read and write permissions on SMQ. 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()); // Process only messages of the ProduceMediaComplete type: 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"); } /* */ se.printStackTrace(); } catch (Exception e) { System.out.println("Unknown exception happened!"); e.printStackTrace(); } client.close(); } }