Este tópico descreve como usar o Push SDK para Windows, suas classes e métodos. Também apresenta exemplos práticos dos recursos do SDK. Leia este conteúdo para compreender melhor como utilizar o SDK em transmissões ao vivo.
Recursos
Usa H.264 para codificação de vídeo e Opus e Advanced Audio Coding (AAC) para áudio.
Usa H.265 para codificação de vídeo, além de Opus e AAC para áudio.
Permite configurações personalizadas para controle de taxa de bits, resolução e modo de exibição.
Oferece suporte a diversas operações de câmera.
Permite transmitir gravações de tela.
Aceita entradas externas de áudio e vídeo em formatos como YUV e pulse-code modulation (PCM).
É compatível com a mixagem de múltiplos fluxos.
Suporta ingestão de fluxos apenas de áudio ou apenas de vídeo, bem como ingestão em segundo plano.
Inclui suporte a música de fundo e ferramentas de gerenciamento.
-
Conta com reconexão automática e tratamento de erros.
Implementa o algoritmo de áudio 3A.
Permite alternar entre os modos de codificação por software e hardware para arquivos de vídeo, o que aumenta a estabilidade do módulo de codificação.
Procedimento
Siga as etapas abaixo:
Uso dos recursos
Configurar parâmetros de ingestão de fluxo
Use a classe AlivcLivePushConfig para definir os parâmetros de ingestão de fluxo. Cada parâmetro possui um valor padrão. Para uma ingestão básica, mantenha os valores originais.
AlivcLivePushConfig config;
Ingerir um fluxo (da câmera)
A classe AlivcLivePusher é o componente central do Push SDK para Windows. Ela fornece parâmetros para inicialização, callbacks de ingestão, pré-visualização da câmera e gerenciamento do fluxo. Use esta classe também para modificar parâmetros durante a ingestão.
-
Inicialize a classe AlivcLivePusher.
Após configurar os parâmetros de ingestão, chame o método init para inicializar a classe. Código de exemplo:
AlivcLivePushConfig config; pusher->init(config); -
Registre os callbacks de ingestão.
O SDK suporta os seguintes callbacks de ingestão:
Info: callbacks para notificações e detecção de status.
Error: callbacks acionados quando ocorrem erros.
Network: callbacks relacionados à rede.
Quando um evento ocorre, o sistema dispara o callback correspondente para notificá-lo. Código de exemplo:
pusher->setLivePushErrorListener(errorListener); pusher->setLivePushInfoListener(errorListener); pusher->setLivePushNetworkListener(errorListener); -
Inicie a pré-visualização.
Inicie a pré-visualização após inicializar o objeto livePusher e configurar os callbacks. Código de exemplo:
pusher->startPreview(view, width, height); -
Inicie a ingestão do fluxo.
pusher->startPush(url);
Operações comuns de controle de ingestão
O Push SDK para Windows permite controlar a ingestão de fluxo. Inicie, pare, reinicie, pause e retome a ingestão, além de interromper a pré-visualização e destruir instâncias de ingestão. Adicione botões na interface para executar essas operações.
pusher->stopPush();
Ingerir um fluxo (de uma tela compartilhada)
Transmita a gravação de uma tela, originada de uma shared screen. Para isso, obtenha a lista de fontes de compartilhamento e especifique a fonte desejada para a ingestão. Etapas específicas:
-
Obtenha a lista de fontes de compartilhamento.
pusher->getScreenShareSourceInfo(); -
Inicie a ingestão de uma fonte compartilhada.
pusher->startScreenShareByDesktopId(desktopId);NotadesktopId representa o ID da área de trabalho. Consulte esse ID chamando o método GetScreenShareSourceInfo.
Configurar o controle de taxa de bits
Use o método abaixo para configurar o controle de taxa de bits:
-
Defina o parâmetro de inicialização enableBitrateControl para ativar o controle de taxa de bits.
config.enableBitrateControl = true;NotaAo ativar este recurso, o sistema ajusta automaticamente a taxa de bits entre a taxa alvo e a taxa mínima especificadas. Se você desativar essa opção, a taxa permanecerá fixa no valor inicial, o que pode causar travamentos em redes instáveis. Tenha cautela antes de desabilitar essa funcionalidade. Recomendamos mantê-la ativa.
-
Especifique parâmetros personalizados de taxa de bits.
Os parâmetros incluem mInitialVideoBitrate, mMinVideoBitrate e mTargetVideoBitrate, que correspondem, respectivamente, à taxa de bits inicial, mínima e alvo.
config.mTargetVideoBitrate = 1400; // Set the target bitrate to 1,400 Kbit/s. config.mMinVideoBitrate = 600; // Set the minimum bitrate to 600 Kbit/s. config.mInitialVideoBitrate = 1000; // Set the initial bitrate to 1,000 Kbit/s.A tabela a seguir apresenta os valores recomendados para esses parâmetros:
Resolução
mInitialVideoBitrate
mMinVideoBitrate
mTargetVideoBitrate
360p
600
300
1000
480p
800
300
1200
540p
1000
600
1400
720p
1500
600
2000
1080p
1800
1200
2500
Resolução
mInitialVideoBitrate
mMinVideoBitrate
mTargetVideoBitrate
360p
400
200
600
480p
600
300
800
540p
800
300
1000
720p
1000
300
1200
1080p
1500
1200
2200
NotaSe você não configurar os parâmetros mInitialVideoBitrate, mMinVideoBitrate e mTargetVideoBitrate, o Push SDK definirá automaticamente uma taxa de bits adequada para a câmera com base na resolução.
Ingerir uma imagem
O Push SDK para Windows permite ingerir imagens quando o aplicativo passa para segundo plano ou quando a taxa de bits está baixa, o que melhora a experiência do usuário.
Quando o aplicativo passa para segundo plano, a ingestão de fluxo de vídeo pausa e apenas o áudio continua sendo ingerido. Nesse cenário, especifique uma imagem para ingestão. Por exemplo, exiba uma mensagem como The streamer will be back soon. para avisar os espectadores.
config.mPausePushImagePath = "The path of the specified image in the PNG format for stream ingest";// Specify the image for stream ingest when your app is switched to the background.
Escutar callbacks
O Push SDK possibilita o recebimento de callbacks para exceções e erros de ingestão, o que permite tratar adequadamente essas situações. O Push SDK para Windows oferece os seguintes tipos de callbacks.
|
Tipo de callback |
Classe |
|
AlivcLivePushInfoListener |
|
|
AlivcLivePushNetworkListener |
|
|
AlivcLivePushErrorListener |
Callbacks de ingestão
Esses callbacks notificam o aplicativo sobre o status do SDK, incluindo início da pré-visualização, renderização do primeiro quadro, envio do primeiro quadro de áudio ou vídeo, início e parada da ingestão.
onPushStarted e onFirstFramePushed: indicam que a ingestão foi bem-sucedida.
onPushStarted: sinaliza que a conexão com o servidor foi estabelecida.
onFirstFramePushed: confirma o envio do primeiro quadro do fluxo de áudio ou vídeo.
Callbacks de rede
Callbacks de rede informam o aplicativo sobre o status da conexão e do link em relação ao SDK.
onConnectFail: indica falha na ingestão. Verifique se a URL de ingestão é válida (por exemplo, ausência de caracteres inválidos), se há problemas de autenticação, se o limite de fluxos simultâneos foi excedido ou se o fluxo está na lista de bloqueios. Certifique-se de que a URL esteja correta e disponível antes de tentar ingerir novamente. Os códigos de erro relevantes incluem 0x30020901 a 0x30020905 e 0x30010900 a 0x30010901.
onConnectionLost: sinaliza desconexão da rede. Após a perda de conexão, o SDK tenta reconectar automaticamente e dispara o callback onReconnectStart. Se o número máximo de tentativas (config.connectRetryCount) for atingido sem sucesso, o sistema acionará o callback onReconnectError.
onNetworkPoor: alerta sobre lentidão na rede. Ao receber este callback, considere que a rede atual pode não suportar totalmente o fluxo ingerido, mesmo que a transmissão continue sem interrupções. Nesse caso, execute sua lógica de negócios, como notificar o usuário na interface (UI) do aplicativo.
onNetworkRecovery: confirma que a conexão de rede foi restabelecida.
-
onReconnectError: indica falha na reconexão de rede. Verifique a conexão atual e tente ingerir o fluxo novamente assim que a rede normalizar. Geralmente, o SDK tenta reconectar em casos de desconexão ou troca de rede. Use a classe AlivcLivePushConfig para definir o tempo limite e o número máximo de tentativas de reconexão. Após a reconexão, a ingestão é retomada. Se a solicitação expirar ou o limite de tentativas for ultrapassado, a reconexão falhará e o sistema disparará o callback onReconnectError. Quando recuperar a conexão, chame reconnectAsyn para reconectar. Reconecte também o SDK ao player. Se utilizar o ApsaraVideo Player, realize a reconexão 5 segundos após receber a notificação de tempo limite.
NotaMonitore externamente a conexão de rede.
Use o servidor para gerenciar falhas de comunicação entre o lado do streamer e o player. Por exemplo, quando o streamer se desconecta, o servidor recebe um callback de interrupção de ingestão e envia essa mensagem ao player, que então trata a interrupção. O procedimento de callback para retomada da ingestão segue a mesma lógica.
Interrompa a reprodução e reinicie o ApsaraVideo Player para reconectá-lo ao servidor. Para isso, chame stop e depois prepareToPlay. Para mais detalhes sobre o ApsaraVideo Player, consulte Visão geral do SDK.
onSendDataTimeout: aponta para um tempo limite esgotado durante o envio de dados. Verifique a rede atual e reinicie a ingestão após a recuperação da conexão.
onPushURLAuthenticationOverdue: avisa que a URL de ingestão assinada está prestes a expirar. Se a assinatura de URL estiver ativada, a URL contém o campo auth_key, verificado periodicamente pela Alibaba Cloud. Este callback é disparado 1 minuto antes da expiração. Após recebê-lo, especifique uma nova URL de ingestão para evitar interrupções quando a URL original expirar.
Callbacks de erro
onSystemError: indica uma exceção no dispositivo do sistema. Destrua o mecanismo e tente novamente.
-
onSDKError: sinaliza um erro no SDK. Execute ações conforme o código de erro:
Se o código for 805438211, o desempenho do dispositivo está baixo e a taxa de quadros para codificação e renderização é reduzida. Notifique o streamer e interrompa lógicas de negócios que consomem muitos recursos, como retoques avançados e animações, na camada do aplicativo.
Preste atenção especial aos callbacks relacionados às permissões de microfone e câmera. O código 268455940 indica que o aplicativo precisa de permissão para o microfone. O código 268455939 indica necessidade de permissão para a câmera.
Para outros códigos de erro, nenhuma ação adicional é necessária. Todos os códigos ficam registrados nos logs.
Lista de classes comuns
|
Classe |
Descrição |
|
AlivcLivePushConfig |
Classe destinada às configurações de ingestão de fluxo. |
|
AlivcLivePusher |
Classe responsável pelos recursos de ingestão. |
|
AlivcLivePusherErrorListener |
Classe para callbacks de erro. |
|
AlivcLivePusherNetworkListener |
Classe para callbacks de rede. |
|
AlivcLivePusherInfoListener |
Classe para callbacks de ingestão. |