Cria uma assinatura de evento para mixagem e retransmissão de streams.
Descrição da operação
Cria uma assinatura de evento para mixagem e retransmissão de streams. Ao criar uma assinatura, você pode configurar parâmetros como a URL de callback, o aplicativo a ser assinado e as informações do canal.
Limite de QPS
O limite de QPS por usuário único para esta operação é de 50 chamadas por segundo. Se o limite for excedido, as chamadas de API serão limitadas, o que pode afetar seus negócios. Chame esta operação adequadamente.
Experimente agora
Testar
Autorização RAM
|
Ação |
Nível de acesso |
Tipo de recurso |
Chave de condição |
Ação dependente |
|
live:CreateRtcMPUEventSub |
create |
*Todos os recursos.
|
Nenhuma | Nenhuma |
Parâmetros da solicitação
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
Exemplo |
| AppId |
string |
Sim |
O ID do aplicativo a ser assinado. Você pode visualizar os IDs dos seus aplicativos navegando até ApsaraVideo Live > Live+ > ApsaraVideo Real-time Communication > Application Management. Se nenhum aplicativo existir, crie um clicando em Create Application. Nota
O ID do aplicativo consiste em letras maiúsculas e minúsculas, dígitos, sublinhados e hifens (-), com no máximo 64 caracteres. |
yourAppId |
| ChannelIds |
string |
Não |
Os IDs de canal das tarefas de mixagem de streams para as quais você deseja receber callbacks. Você pode especificar vários IDs de canal separados por vírgulas (,). Nota
|
yourChannelIds |
| CallbackUrl |
string |
Sim |
A URL de callback. Para o formato da URL, consulte as especificações de conteúdo de callback abaixo. Nota
O protocolo da URL de callback deve ser HTTP ou HTTPS. A URL pode conter apenas os seguintes caracteres: a-z, A-Z, 0-9, -, _, ?, %, =, #, ., / e +. A URL não pode exceder 2083 caracteres. |
http://****.com/callback |
Exemplo de conteúdo de callback
O conteúdo do callback é enviado ao seu servidor de negócios como uma solicitação HTTP/HTTPS POST. A codificação de caracteres é UTF-8 e o corpo da solicitação é uma estrutura JSON. Quando seu servidor de negócios responde com um código de status HTTP 200, o callback é considerado bem-sucedido. A seguir, um exemplo do conteúdo do callback:
Para determinar se a mixagem e retransmissão de streams estão funcionando corretamente, use tanto as notificações de callback quanto o status do stream online fornecido pelo fornecedor de CDN correspondente.
{
"EventType": 1,
"MsgId": "42bba8b5-94ab-468c-9dae-9b501dd****",
"AppId": "rtcdev",
"SubId": "Sub-9799B2C45009799B2*****",
"TaskId": "mpucallbacktest",
"CallbackTs": 1712656430476,
"Payload": {
"DstUrl": "rtmp://domain/app/stream?auth",
"EventTs": 1712656430384,
"EventCode": 1,
"ErrorCode": 0,
"ErrorMessage": ""
}
}
Informações de callback
O cabeçalho do callback contém os seguintes campos:
| Campo | Descrição |
| Content-Type | O tipo de dados. Valor fixo: application/json |
| Ali-Rtc-Timestamp | O timestamp. |
| Ali-Rtc-Signature | O valor da assinatura. |
O corpo do callback contém os seguintes campos:
| Campo | Tipo | Descrição | Exemplo |
| EventType | Integer | O tipo de evento de callback. Para callbacks de mixagem e retransmissão de streams, o valor é fixo em 1. | 1 |
| MsgId | String | O ID do callback que identifica exclusivamente este callback. | *****973C-4529-A334***** |
| AppId | String | O ID do aplicativo assinado. | yourAppId |
| SubId | String | O ID da assinatura. | Sub-******9799B2C4500****** |
| TaskId | String | O ID da tarefa de retransmissão. | yourTaskId |
| CallbackTs | Integer | O timestamp em milissegundos quando a solicitação de callback é iniciada. | 1712656430476 |
| Payload | JSON Object | As informações do evento de callback. | - |
Informações do evento de callback (Payload)
| Campo | Tipo | Descrição | Exemplo |
| DstUrl | String | A URL de destino para retransmissão. | rtmp://domain/app/stream?auth |
| EventTs | Integer | O timestamp em milissegundos quando o evento de callback ocorre. | 1712656430384 |
| EventCode | Integer | O código do evento de callback. | 1 |
| ErrorCode | Integer | O código de erro do evento de callback. | 10001 |
| ErrorMessage | String | A mensagem de erro do evento de callback. | rtmp server init failed |
Códigos de evento de callback
| Campo | Valor | Descrição | Frequência de callback |
| MPU_STATE_PREPARING | 0 | A tarefa de retransmissão foi criada e acionada. | Retornado apenas uma vez. |
| MPU_STATE_ESTABLISHING | 1 | A tarefa de retransmissão está estabelecendo uma conexão. | Retornado a cada 5 segundos. |
| MPU_STATE_RUNNING | 2 | A tarefa de retransmissão está em execução. | Retornado apenas uma vez. |
| MPU_STATE_RECOVERING | 3 | A tarefa de retransmissão foi interrompida e está se recuperando. | Retornado a cada 5 segundos. |
| MPU_STATE_TERMINATED | 4 | A tarefa de retransmissão terminou, incluindo parada normal, falha na inicialização ou saída anormal. O motivo específico é indicado por ErrorCode e ErrorMessage. | Retornado apenas uma vez. |
A figura a seguir mostra um exemplo de transições de estado para eventos de callback:
Nota:
As mensagens de callback podem chegar ao seu servidor de negócios fora de ordem. Você pode classificar os eventos com base no EventTs no Payload. Se você precisar apenas do estado mais recente de um evento de callback, ignore eventos expirados que chegarem posteriormente.
Para tarefas de mixagem e retransmissão de streams criadas chamando CreateMixStreamRelayTask (new), a tarefa para automaticamente depois que todos os usuários saem da sala por um período de tempo, e um callback MPU_STATE_TERMINATED é enviado.
As configurações de callback afetam apenas novas tarefas e não afetam tarefas existentes:
a. Tarefas iniciadas antes da configuração de callback ser ativada não enviam callbacks.
b. Tarefas iniciadas após a configuração de callback ser ativada enviam callbacks.
c. Tarefas iniciadas antes da configuração de callback ser excluída continuam a enviar callbacks até que a tarefa termine.
d. Tarefas iniciadas após a configuração de callback ser excluída não enviam callbacks.
Códigos de erro de callback
Quando uma tarefa de retransmissão termina, o ErrorCode e o ErrorMessage indicam o motivo do término.
| Código de erro | Mensagem de erro | Descrição |
| 0 | A tarefa parou normalmente. | |
| 10001 | rtmp server init failed | Falha no estabelecimento da conexão. A tarefa terminou anormalmente. |
| 10002 | rtmp server internal error | Ocorreu um erro interno do servidor. A tarefa terminou anormalmente. |
| 10003 | task idle timeout | A tarefa terminou porque ficou ociosa por muito tempo. |
Autenticação de callback
A autenticação de eventos de callback é ativada por padrão. A lógica de autenticação é a seguinte:
Quando o ApsaraVideo Live inicia uma solicitação de callback, o cabeçalho da solicitação HTTP(S) contém os campos Ali-Rtc-Timestamp e Ali-Rtc-Signature para verificação de assinatura pelo servidor receptor de mensagens de callback. O valor Ali-Rtc-Signature é calculado da seguinte forma: Ali-Rtc-Signature=MD5SUM(MD5CONTENT), onde MD5CONTENT=URL de callback|valor Ali-Rtc-Timestamp|Chave de Autenticação. A URL de callback é a URL completa de callback que você configurou. A chave de autenticação é a AppKey gerada quando você criou o AppId.
Quando o servidor receptor de mensagens de callback recebe uma mensagem de callback, ele concatena a URL de callback, o valor Ali-Rtc-Timestamp e a chave de autenticação, calcula o valor MD5 para obter uma string criptografada e, em seguida, compara a string criptografada calculada com o valor do campo Ali-Rtc-Signature no cabeçalho da solicitação HTTP(S) enviado pelo ApsaraVideo Real-time Communication. Se os valores não coincidirem, a solicitação é inválida.
Nova tentativa de callback em caso de falha
Quando o Alibaba Cloud inicia uma solicitação de callback, o callback é considerado bem-sucedido apenas quando seu servidor de negócios responde com um código de status HTTP 200. Se o callback falhar, o Alibaba Cloud tentará novamente 7 vezes em intervalos de 1 segundo, 2 segundos, 5 segundos, 10 segundos, 1 minuto, 2 minutos e 5 minutos. Cada nova tentativa gera um registro de callback correspondente.
Elementos de resposta
|
Elemento |
Tipo |
Descrição |
Exemplo |
|
object |
|||
| RequestId |
string |
O ID da solicitação. |
******3B-0E1A-586A-AC29-742247****** |
| SubId |
string |
O ID da assinatura. |
Sub-******9799B2C4500****** |
Exemplos
Resposta de sucesso
JSON formato
{
"RequestId": "******3B-0E1A-586A-AC29-742247******",
"SubId": "Sub-******9799B2C4500******"
}
Códigos de erro
|
Código de status HTTP |
Código de erro |
Mensagem de erro |
Descrição |
|---|---|---|---|
| 400 | InvalidParam | %s. | Falha na validação do parâmetro. |
| 400 | MissingParam | %s, please check and try again later. | Parâmetros obrigatórios estão ausentes. Verifique e tente novamente. |
| 400 | InvalidAppId | %s, please check and try again later. | O AppId é inválido. Verifique e tente novamente. |
| 500 | InternalError | InternalError | |
| 403 | OperationDenied | Your account has not enabled the Live service | |
| 403 | Forbidden | %s, please check and try again later. | Você não tem as permissões necessárias. Verifique e tente novamente. |
Consulte Códigos de Erro para uma lista completa.
Notas de versão
Consulte Notas de Versão para uma lista completa.