Cria uma tarefa de mixagem e transcodificação de streams.
Descrição da operação
Por padrão, cada ID de aplicativo suporta no máximo 200 tarefas de ingestão de stream único e 40 tarefas de mixagem e transcodificação de streams. Para aumentar a cota, abra um ticket.
Ciclo de vida da tarefa de mixagem de streams
Início
-
Quando um streamer começa a transmitir pela primeira vez, você pode chamar StartLiveMPUTask para iniciar uma tarefa de bypass.
-
Se não houver usuários no canal, um erro de "canal inexistente" será retornado.
-
O stream de bypass é gerado apenas quando um usuário inicia a ingestão de stream. Se o usuário em uma tarefa de stream único não ingerir um stream, o stream de bypass não poderá ser reproduzido.
-
Para uma tarefa de mixagem de streams, pelo menos um usuário deve estar ingerindo um stream para que o stream de bypass seja reproduzível. A área de layout para usuários que não estão ingerindo streams exibe uma tela preta.
-
-
Você pode registrar o status da tarefa de bypass, o tipo de tarefa e os parâmetros da tarefa em seu servidor de negócios.
-
Status da tarefa: Iniciada, Parada.
-
Tipo de tarefa: Stream único, Mixagem de streams.
-
Parâmetros da tarefa: Os parâmetros de entrada mais recentes. Por exemplo, após uma chamada bem-sucedida para UpdateLiveMPUTask, registre os parâmetros mais recentes da tarefa.
-
-
Em cenários de co-streaming ou PK, se uma tarefa foi atualizada para uma tarefa de mixagem de streams e o streamer sai inesperadamente e depois entra novamente no canal, seu servidor de negócios pode chamar StartLiveMPUTask para reiniciar a tarefa de mixagem de streams com base no tipo e nos parâmetros salvos da tarefa.
-
Se o sistema não tiver limpado automaticamente a tarefa antes de você iniciá-la, a tarefa será iniciada com sucesso.
-
Se o sistema ainda não tiver limpado a tarefa, um código de erro Tarefa já existe será retornado.
-
Fim
-
Quando um streamer sai do canal, chame StopLiveMPUTask para parar a tarefa de bypass.
-
Se todos os usuários na tarefa saírem do canal e StopLiveMPUTask não for chamado, o sistema para automaticamente a tarefa de bypass após 2 minutos.
Limites de QPS
O limite de consultas por segundo (QPS) para um único usuário para esta API é de 500 chamadas/segundo. Se você exceder esse limite, as chamadas de API serão limitadas. Isso pode afetar seus negócios. Recomendamos que você chame esta API de forma razoável.
Experimente agora
Testar
Autorização RAM
|
Ação |
Nível de acesso |
Tipo de recurso |
Chave de condição |
Ação dependente |
|
live:StartLiveMPUTask |
create |
*All Resource
|
Nenhuma | Nenhuma |
Parâmetros da solicitação
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
Exemplo |
| AppId |
string |
Sim |
O ID do aplicativo. Apenas um ID é suportado. Pode conter letras maiúsculas, letras minúsculas, dígitos, sublinhados (_) e hifens (-). O comprimento máximo é de 64 caracteres. |
yourAppId |
| ChannelId |
string |
Sim |
O ID do canal. Apenas um ID é suportado. Pode conter letras maiúsculas, letras minúsculas, dígitos, sublinhados (_) e hifens (-). O comprimento máximo é de 64 caracteres. |
yourChannelId |
| TaskId |
string |
Sim |
O ID da tarefa. Apenas um ID é suportado. Pode conter letras maiúsculas, letras minúsculas, dígitos, sublinhados (_) e hifens (-). O comprimento máximo é de 55 caracteres. Este ID é o identificador exclusivo para a tarefa de ingestão de bypass. Se uma tarefa com o mesmo ID ainda existir e não tiver sido limpa quando você iniciar uma nova tarefa, InvalidParam será retornado. |
yourTaskId |
| MixMode |
string |
Sim |
O modo de mixagem de streams. Valores válidos:
|
0 |
| StreamURL |
string |
Não |
A URL de ingestão ao vivo. Apenas o protocolo RTMP é suportado. Apenas uma URL é suportada. O comprimento máximo é de 2048 caracteres. Para obter informações sobre como gerar a URL, consulte URLs de ingestão e URLs de reprodução. Nota
|
rtmp://example.com/live/stream |
| MultiStreamURL |
array<object> |
Não |
Os parâmetros para ingestão em múltiplas URLs. Você pode especificar várias URLs de ingestão ao vivo. Nota
Ao definir a URL de ingestão para uma tarefa, você deve configurar o parâmetro StreamURL ou o parâmetro MultiStreamURL, mas não ambos. |
|
|
object |
Não |
|||
| URL |
string |
Não |
A URL de ingestão ao vivo. Apenas o protocolo RTMP é suportado. O comprimento máximo é de 2048 caracteres. Para obter informações sobre como gerar a URL, consulte URLs de ingestão e URLs de reprodução. |
rtmp://example.com/live/stream**** |
| IsAliCdn |
boolean |
Não |
Especifica se o stream deve ser ingerido para o Alibaba Cloud CDN.
Nota
O valor padrão é false. |
false |
| Region |
string |
Não |
A região onde o serviço de mixagem de streams está localizado. Valores válidos:
|
CN-Shanghai |
| MaxIdleTime |
string |
Não |
O período de tempo limite de ociosidade. Unidade: segundos. O valor deve estar no intervalo de [10, 86400]. Nota
Se você definir este parâmetro, a tarefa será parada automaticamente quando ficar ociosa por um período maior que MaxIdleTime. Se você não definir este parâmetro, a tarefa será parada imediatamente após o fechamento do canal. |
10 |
| SingleSubParams |
object |
Não |
Os parâmetros para ingestão de stream único. Este parâmetro é obrigatório quando MixMode é definido como 0. Não defina este parâmetro para mixagem e transcodificação de streams. |
|
| SourceType |
string |
Não |
O tipo de stream de entrada de vídeo no modo de ingestão de stream único. Este parâmetro é válido apenas para streams de vídeo (StreamType=2). Valores válidos:
|
camera |
| StreamType |
string |
Não |
O tipo de stream a ser ingerido no modo de ingestão de stream único. Valores válidos:
|
0 |
| UserId |
string |
Sim |
O ID do usuário cujo stream é ingerido. Apenas um stream pode ser ingerido por vez. |
yourSubUserId |
| TranscodeParams |
object |
Não |
Os parâmetros para mixagem e transcodificação de streams. Este parâmetro é obrigatório quando MixMode é definido como 1. Não defina este parâmetro para ingestão de stream único. |
|
| Background |
object |
Não |
A imagem de fundo global para o stream mixado. |
|
| RenderMode |
string |
Não |
O modo de exibição do vídeo de saída. Valores válidos:
|
1 |
| URL |
string |
Não |
A URL da imagem de fundo global. O comprimento máximo é de 2048 caracteres. |
yourImageUrl |
| EncodeParams |
object |
Não |
Os parâmetros de codificação para o stream de saída. |
|
| AudioOnly |
string |
Não |
Especifica se o stream é apenas de áudio. Valores válidos:
|
false |
| AudioBitrate |
string |
Não |
A taxa de bits de áudio. Unidade: kbps. O valor deve estar no intervalo de [8, 500]. |
128 |
| AudioChannels |
string |
Não |
O número de canais de áudio. Valores válidos: 1, 2. |
2 |
| AudioSampleRate |
string |
Não |
A taxa de amostragem de áudio. Unidade: Hz. Valores válidos: 8000, 16000, 32000, 44100, 48000. |
44100 |
| VideoCodec |
string |
Não |
O formato de codificação de vídeo. Valores válidos:
|
H.264 |
| VideoBitrate |
string |
Não |
A taxa de bits de vídeo. Unidade: kbps. O valor deve estar no intervalo de [1, 10000]. |
3500 |
| VideoFramerate |
string |
Não |
A taxa de quadros de vídeo. Unidade: fps. O valor deve estar no intervalo de [1, 60]. |
25 |
| VideoGop |
string |
Não |
O tamanho do GOP de vídeo. O valor deve estar no intervalo de [1, 60]. |
20 |
| VideoHeight |
string |
Não |
A altura do vídeo. Unidade: pixels. O valor deve estar no intervalo de [0, 1920]. |
1000 |
| VideoWidth |
string |
Não |
A largura do vídeo. Unidade: pixels. O valor deve estar no intervalo de [0, 1920]. |
1920 |
| EnhancedParam |
string |
Não |
Os parâmetros de codificação aprimorada. Esta é uma string JSON. As configurações opcionais suportadas incluem profile e preset.
Nota
Por exemplo, "superfast" é usado principalmente para comunicação em tempo real. Se você não for um especialista em codificadores, não defina esta opção. |
{"profile": "high", "preset": "veryfast"} |
| Layout |
object |
Não |
As informações de layout de vídeo. Nota
Para transcodificação de vídeo, você deve especificar as informações de layout de vídeo, incluindo coordenadas (X, Y), dimensões do painel (Width, Height) e ordem de empilhamento (ZOrder). Para transcodificação apenas de áudio, não especifique informações de layout de vídeo. |
|
| UserPanes |
array<object> |
Não |
As informações sobre os painéis de usuário no stream mixado. |
|
|
array<object> |
Não |
As informações sobre os painéis de usuário no stream mixado. |
||
| UserInfo |
object |
Não |
The information about the user corresponding to this pane. If you do not set this parameter, the system automatically fills it based on the order in which streamers join the channel. Nota
|
|
| SourceType |
string |
Não |
The type of video input stream in stream mixing and transcoding mode. This parameter is valid only for video streams (StreamType=2). Valid values:
|
camera |
| ChannelId |
string |
Não |
The ID of the channel where the user is located. You do not need to set this parameter for users in the same channel. For cross-channel stream mixing, set this parameter. |
yourChannelId |
| UserId |
string |
Não |
The user ID. |
yourSubUserId |
| Height |
string |
Não |
The height of the pane, as a normalized percentage. |
0.2632 |
| Width |
string |
Não |
The width of the pane, as a normalized percentage. |
0.3564 |
| X |
string |
Não |
The X-coordinate, as a normalized percentage. |
0.2456 |
| Y |
string |
Não |
The Y-coordinate, as a normalized percentage. |
0.3789 |
| ZOrder |
string |
Não |
The stacking order. 0 is the bottom layer. Layer 1 is on top of layer 0, and so on. |
0 |
| BackgroundImageUrl |
string |
Não |
The URL of the background image for the video pane. The maximum length is 2048 characters. When a user turns off their camera or has not joined the channel, this image is displayed in their layout position. |
yourImageUrl |
| RenderMode |
string |
Não |
The display mode of the output video pane. Valid values:
|
1 |
| UserInfos |
array<object> |
Não |
As informações sobre os usuários a serem assinados para mixagem de streams. Se você não especificar usuários, todos os usuários serão incluídos no stream mixado. |
|
|
object |
Não |
As informações do usuário para mixagem de streams. |
||
| SourceType |
string |
Não |
O tipo de stream de entrada de vídeo a ser assinado para mixagem de streams. Este parâmetro é válido apenas para streams de vídeo (StreamType=2). Valores válidos:
|
camera |
| StreamType |
string |
Não |
O tipo de stream a ser assinado para mixagem de streams. Valores válidos:
|
0 |
| ChannelId |
string |
Não |
O ID do canal onde o usuário assinado está localizado. Você não precisa definir este parâmetro para usuários no mesmo canal. Para mixagem de streams entre canais, defina este parâmetro. |
yourChannelId |
| UserId |
string |
Sim |
O ID do usuário a ser assinado para mixagem de streams. |
yourSubUserId |
| SeiParams |
object |
Não |
Os parâmetros de configuração de SEI. |
|
| LayoutVolume |
object |
Não |
O SEI de layout e volume. O conteúdo deste parâmetro pode estar vazio, o que significa que o SEI de layout e volume padrão é transportado. |
|
| FollowIdr |
string |
Não |
Especifica se deve garantir que o SEI seja transportado ao enviar um quadro-chave IDR. Valores válidos:
|
0 |
| Interval |
string |
Não |
O intervalo de envio de SEI. Unidade: milissegundos. O valor deve estar no intervalo de [1000, 5000]. |
1000 |
| PassThrough |
object |
Não |
O SEI pass-through. |
|
| FollowIdr |
string |
Não |
Especifica se deve garantir que o SEI seja transportado ao enviar um quadro-chave IDR. Valores válidos:
|
0 |
| Interval |
string |
Não |
O intervalo de envio de SEI. Unidade: milissegundos. O valor deve estar no intervalo de [1000, 5000]. |
1000 |
| PayloadContent |
string |
Não |
O conteúdo do payload do SEI pass-through. |
yourPayloadContent |
| PayloadContentKey |
string |
Não |
A chave correspondente ao conteúdo do payload do SEI pass-through. Se não for definida, a chave padrão é udd. |
yourPayloadContentKey |
| PayloadType |
string |
Não |
O payload_type personalizado da mensagem SEI. O valor deve estar no intervalo de 100-254. Se não for definido, o payload_type padrão é 5. |
100 |
SEI de layout e volume
| Parâmetro | Descrição |
| canvas | Informações da tela. Parâmetros: - w: Largura da tela em pixels. - h: Altura da tela em pixels. - bgnd: Cor de fundo da tela, como um número inteiro hexadecimal no formato RGB. |
| stream | Informações do stream de vídeo. Parâmetros: - uid: ID de usuário do streamer. - paneid: ID do painel da região, no intervalo de [0, 8]. - zorder: Ordem de empilhamento da região, no intervalo de [0, 99]. - x: Coordenada X da região na tela, como uma porcentagem normalizada. - y: Coordenada Y da região na tela, como uma porcentagem normalizada. - w: Largura da região, como uma porcentagem normalizada. - h: Altura da região, como uma porcentagem normalizada. - type: Tipo de stream de vídeo na região. 0: Câmera. 1: Compartilhamento de tela. - status: Status do stream de vídeo na região. 0: Ainda não puxado. 1: Puxado. - muted: Status de mudo do streamer. 0: Não mutado. 1: Mutado. Em um cenário de PK, se o streamer A mutar o streamer B, o campo muted para o streamer B mostra o status de mutado.- vol: Volume do streamer em decibéis, no intervalo de [0, 255]. - vad: Detecção de atividade de voz. O valor está no intervalo de [0, 150]. 150 indica que a voz foi detectada. Um valor diferente de 150 indica o tempo de decaimento da voz para o silêncio. |
| ts | O carimbo de data/hora do sistema operacional quando essas informações foram geradas, em milissegundos. |
| ver | A versão do formato SEI, como 1.0.0.20220915. |
| udd | Um evento personalizado baseado em cenário enviado através do parâmetro PassThrough. O conteúdo é especificado pelo parâmetro PayloadContent. |
Quando um usuário puxa um stream ingerido, os dados de mídia de streaming contêm informações SEI. Você pode usar esse recurso para passar informações personalizadas. As informações SEI podem ser recuperadas dos dados do quadro de vídeo durante a decodificação do stream de vídeo. Para o formato específico, consulte o parâmetro `PassThrough`.
Exemplo para um cenário de co-streaming:
Se houver apenas um streamer, a coleção `stream` nas informações SEI que o visualizador recebe contém informações para apenas um membro. Se o streamer estiver em uma sessão de co-streaming ou PK, a coleção `stream` contém informações para vários membros.
Por exemplo, quando o streamer `streamer111` está transmitindo sozinho, o formato do quadro SEI que o visualizador recebe é o seguinte:{"canvas":{"w":1920,"h":1080,"bgnd":0},"stream":[{"uid":"streamer111","paneid":-1,"zorder":0,"x":0,"y":0,"w":0,"h":0,"type":0,"status":1,"muted":0,"vol":0,"vad":0}],"ver":"1.0.0.20220915","ts":1697696105170}
Quando o streamer `streamer111` está em co-streaming com o visualizador `viewer222`, o formato do quadro SEI que o visualizador recebe é o seguinte:{"canvas":{"w":1920,"h":1080,"bgnd":0},"stream":[{"uid":"streamer111","paneid":0,"zorder":1,"x":0,"y":0.25,"w":0.5,"h":0.5,"type":0,"status":1,"muted":0,"vol":1,"vad":119},{"uid":"viewer222","paneid":1,"zorder":1,"x":0.5018382,"y":0.25,"w":0.5,"h":0.5,"type":0,"status":1,"muted":0,"vol":60,"vad":123}],"ver":"1.0.0.20220915","ts":1697696106230}
Ao verificar o número de elementos na matriz `stream`, você pode determinar se o layout ao vivo foi alterado. Se a matriz `stream` tiver um elemento, um único streamer está ingerindo um stream. Se a matriz `stream` tiver mais de um elemento, o streamer está em uma sessão de co-streaming ou PK. As informações de layout para cada membro indicam sua posição específica no layout do stream mixado.
SEI pass-through
-
Para usar SEI personalizado, você pode chamar o comando StartLiveMPUTask para iniciar uma tarefa de mixagem e ingestão de streams e especificar `PayloadContent` no parâmetro `PassThrough`. Você também pode chamar o comando UpdateLiveMPUTask para atualizar a tarefa e especificar `PayloadContent` no parâmetro `PassThrough`.
-
O SEI personalizado pode ser enviado periodicamente. Você pode definir o período usando o parâmetro `Interval` em `PassThrough`. A unidade é milissegundos.
-
O SEI personalizado também pode ser enviado com quadros-chave. Você pode definir isso usando o parâmetro `FollowIdr` em `PassThrough`.
-
Você pode enviar SEI tanto periodicamente quanto com quadros-chave. Por exemplo, `Interval:1000` e `FollowIdr: 1` significa que o SEI personalizado é enviado a cada 1000 ms e também com cada quadro-chave.
-
Se você não definir `Interval` ou `FollowIdr`, o SEI personalizado será enviado apenas uma vez quando a API for chamada.
-
Por exemplo, quando o streamer `streamer111` está transmitindo sozinho, você pode chamar o comando UpdateLiveMPUTask para enviar SEI periódico. No parâmetro `PassThrough`, defina `Interval` como 1000, `FollowIdr` como 0 e `PayloadContent` como "hello world". Uma mensagem SEI personalizada é então enviada a cada 1000 ms. O formato do quadro SEI que o visualizador recebe é o seguinte:{"canvas":{"w":1920,"h":1080,"bgnd":0},"stream":[{"uid":"streamer111","paneid":-1,"zorder":0,"x":0,"y":0,"w":0,"h":0,"type":0,"status":1,"muted":0,"vol":0,"vad":0}],"ver":"1.0.0.20220915","ts":1697696109876,"udd":"hello world"}
Mixagem de streams de múltiplos usuários entre canais
Para mixar streams de múltiplos streamers em vários canais e ingerir o stream mixado no serviço de transmissão ao vivo, você deve fornecer o UserID e o ChannelID do streamer que inicia a chamada entre canais, juntamente com os UserIDs dos outros participantes, como parâmetros de entrada ao criar a tarefa de mixagem de streams. Veja o seguinte exemplo: Em um cenário de PK ao vivo, o streamer `userA` no canal `channelA` inicia um PK entre canais com o streamer `userB` no canal `channelB` usando uma API de cliente. O stream mixado de ambos os streamers é enviado para os visualizadores no canal `channelA`. Neste caso, os parâmetros de canal e usuário para criar a tarefa de mixagem de streams são especificados da seguinte forma:
-
ChannelID: Especifique `channelA`.
-
UserInfos->UserId: Especifique `userA` e `userB` respectivamente.
Antes de criar uma tarefa de mixagem de streams de múltiplos usuários entre canais, uma chamada entre canais deve ser iniciada através de um kit de desenvolvimento de software (SDK) de cliente. Se os usuários em canais diferentes não estiverem em uma chamada, você não poderá criar uma tarefa de mixagem de streams entre canais. Para obter mais informações sobre como iniciar uma chamada entre canais, consulte Assinatura entre canais.
Elementos de resposta
|
Elemento |
Tipo |
Descrição |
Exemplo |
|
object |
O ID da solicitação. |
||
| RequestId |
string |
O ID da solicitação. |
0F72851F-5DC1-1979-9B2C-450040316C3E |
Exemplos
Resposta de sucesso
JSON formato
{
"RequestId": "0F72851F-5DC1-1979-9B2C-450040316C3E"
}
Códigos de erro
|
Código de status HTTP |
Código de erro |
Mensagem de erro |
Descrição |
|---|---|---|---|
| 400 | InvalidParam | %s. | Parameter verification failed |
| 400 | InvalidAppId | %s, please check and try again later. | AppId is invalid, please check and try again. |
| 400 | MissingParam | %s, please check and try again later. | Parameter is missing, please check and try again. |
| 500 | InternalError | InternalError | |
| 403 | OperationDenied | Your account has not enabled the Live service | |
| 403 | Forbidden | %s, please check and try again later. | No permission, please check and try again. |
Consulte Códigos de Erro para uma lista completa.
Notas de versão
Consulte Notas de Versão para uma lista completa.