O ApsaraVideo Live gerencia as configurações de gravação por meio de modelos. O sistema associa uma URL de ingestão ao modelo correspondente com base no domínio de ingestão, no nome do aplicativo e no nome do stream presentes na URL. Os modelos de gravação oferecem dois métodos para gravação sob demanda: Controle por parâmetros de ingestão e Controle por callback HTTP. Use esses métodos para decidir dinamicamente se deve gravar um stream ao vivo específico conforme suas regras de negócio.
Controle por parâmetros de ingestão
Se o método de acionamento de um modelo de gravação estiver definido como "Ingest parameter settings", controle diretamente a gravação do stream atual usando o parâmetro record_config na URL de ingestão.
Formato do parâmetro:
record_config={"NeedRecord": <true/false>}Descrição do parâmetro:
trueativa a gravação efalsedesativa a gravação.Observação: Ao construir a URL de ingestão, codifique obrigatoriamente o parâmetro para URL.
Por exemplo, suponha que a URL de ingestão seja: rtmp://push.example.com/live/stream1
Para ativar a gravação com esse parâmetro, construa a URL da seguinte forma: rtmp://push.example.com/live/stream1?record_config=%7B%22NeedRecord%22%3Atrue%7D&auth_key=xxx
Limitações:
Este método de acionamento suporta apenas a gravação do stream source, não dos streams transcodificados. Caso sua gravação inclua streams transcodificados, selecione outro método de acionamento.
Controle por callback HTTP
Como funciona
Quando um stream ao vivo é ingerido e o método de acionamento do modelo correspondente está definido como Callback confirmation, o ApsaraVideo Live envia uma solicitação HTTP para a URL de callback pré-configurada para verificar se o stream atual deve ser gravado.
Seu servidor de aplicativos recebe a solicitação e retorna uma instrução de gravação (permitir ou negar) com base na lógica de negócio vigente.
Em seguida, o ApsaraVideo Live inicia ou ignora a gravação conforme a resposta recebida.
Configure previamente a URL de callback nas definições de callback de eventos do domínio. Para mais informações, consulte Callbacks de gravação ao vivo e Callbacks de gravação sob demanda.
Parâmetros da solicitação
Parâmetro | Tipo | Descrição |
domain | String | Domínio de ingestão. |
app | String | Nome do aplicativo. |
stream | String | Nome do stream. |
codec | String | Formato de codificação. Valores válidos:
|
vbitrate | String | Taxa de bits do vídeo. Unidade: kbps. |
Exemplo de solicitação
GET /?app=seq_all&domain=demo.aliyundoc.com&stream=ondemand8&vbitrate=2000&codec=h264 HTTP/1.1
Host: pull.aliyundoc.com
User-Agent: Go-http-client/1.1
Accept-Encoding: gzip
Parâmetros da resposta
Após receber a solicitação de callback, seu servidor deve retornar um código de status HTTP 200 e um corpo JSON contendo os seguintes parâmetros:
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
ApiVersion |
String |
Não |
Versão da API. Valor padrão: 1,0. |
|
NeedRecord |
Bool |
Sim |
Defina se o stream deve ser gravado. |
|
Interval |
JSONObject |
Não |
Especifica o intervalo de gravação para cada formato. Faixa válida: 5 a 21600. Unidade: segundos. |
|
Format |
JSONArray |
Não |
Formato de gravação. Os formatos suportados incluem MP4, FLV e M3U8. |
Exemplo de resposta
{
"ApiVersion": "1.0",
"NeedRecord": true,
"Interval": {
"Mp4": 300,
"Flv": 120,
"M3U8": 180
},
"Format": ["mp4","flv"]
}
Tratamento dos parâmetros de resposta
Ao receber a resposta do seu servidor, o service de gravação compara os parâmetros retornados com a configuração original e aplica as seguintes substituições:
Substituição de intervalo: Se a resposta incluir o parâmetro
Interval, seu valor substituirá o intervalo definido na configuração original de gravação.Interseção de formatos: O sistema intersecta o parâmetro
Formatda resposta com os formatos especificados na configuração original. Por exemplo, se o modelo original estiver configurado para MP4 e FLV, e a resposta do callback for["mp4", "m3u8"], apenas o formato MP4 será gravado. Caso a interseção esteja vazia, o stream não será gravado.
Seu endpoint de callback deve retornar um código de status HTTP 200. Qualquer outro código é tratado como falha de callback e a gravação é desativada por padrão.
O tamanho máximo do corpo de resposta do callback é de 2.048 bytes. Respostas que excedem esse limite são truncadas para evitar ataques maliciosos.
Observações de uso
Caso seu service utilize o recurso de pull de stream sob demanda, em que o ApsaraVideo Live puxa o stream do servidor de origem somente quando um usuário inicia a reprodução e interrompe o pull quando não há espectadores, aplicam-se as seguintes condições:
Pré-requisito de gravação: Em cenários de pull sob demanda, a gravação (seja automática, sob demanda ou manual) começa apenas após um usuário iniciar a reprodução.
Ausência de gravação sem reprodução: Se nenhum cliente estiver reproduzindo o stream, o ApsaraVideo Live não puxará o conteúdo do servidor de origem e, consequentemente, nenhum arquivo de gravação será gerado.