7. Otimização de Desempenho: O Que Importa sob Carga Real
Exemplo complexo de animação VAP
A medida que os efeitos ficam mais elaborados, o tamanho do arquivo aumenta e a otimização de desempenho se torna ainda mais crucial.
VAPs são grandes e intensivas em decodificação. Problemas de desempenho tendem a surgir em dispositivos de baixo custo e sob alta concorrência (combos de presentes, transmissões em tela cheia). Essas técnicas mostram resultados práticos.
7.1 Otimização ao Nível do Ativo (Maior Retorno sobre o Investimento)
Coberto na seção de exportação — vale a pena repetir: controle da resolução, taxa de quadros, duração e mantenha os arquivos abaixo de 2MB. Cada KB economizado durante a exportação é um ganho real em sobrecarga de decodificação e economia de memória em tempo de execução. Se você acertar isso, muitos problemas de código nunca aparecerão.
7.2 Pré-carregamento & Cache
Os presentes em uma transmissão ao vivo são previsíveis (o painel de presentes lista algumas dezenas de opções), então não espere até que o usuário toque para baixar. Padrão comum:
Quando entrar em um ambiente, pré-carregue os presentes de alta frequência para cache local. No momento da reprodução, verifique primeiro no cache e recorra à rede se necessário. O Android pode usar o caching do OkHttp ou um cache de arquivos personalizado; iOS faz o mesmo. Isso elimina o atraso de "presente demora um segundo antes de aparecer".
Nota: os arquivos VAP são maiores que os SVGA — pré-carregar tudo não é realista. Classifique por popularidade: sempre pré-carregue presentes de alta frequência, obtenha aqueles menos frequentes sob demanda.
7.3 Decodificação em Hardware É a Chave do Desempenho
A vantagem de desempenho do VAP vem da decodificação em hardware GPU. Mas se o formato de codificação estiver errado (por exemplo, H.265 ou um perfil não mainstream), alguns dispositivos de baixo custo recuam para a decodificação em software e o desempenho colapsa.
Definições seguras: — Use H.264 Baseline Profile (melhor compatibilidade) — Não exceda os limites de capacidade do dispositivo (1080p 60fps estressa a decodificação em hardware mesmo em telefones decentes)
7.4 Filas de Reprodução & Aquecimento
Uma transmissão ao vivo pode receber vários presentes simultaneamente (combos, múltiplos remetentes). Tocar todos eles ao mesmo tempo cria caos visual e prejudica o desempenho. Estratégias comuns:
- Mecanismo de fila: Presentes entram na fila e são reproduzidos em sequência.
- Combinar combos: O mesmo usuário envia várias cópias do mesmo presente em rápida sucessão → reproduz uma vez, exibe «×N».
- Prioridade: Presentes de alto valor pulam a fila, presentes de baixo valor podem ser adiados ou ignorados.
Pseudocódigo:
val giftQueue = LinkedList<GiftItem>()fun onGiftReceived(gift: GiftItem) {
giftQueue.add(gift)
if (!isPlaying) {
playNext()
}
}fun playNext() {
if (giftQueue.isEmpty()) {
isPlaying = false
return
}
val gift = giftQueue.poll()
vapView.startPlay(gift.file)
vapView.setAnimListener(object : IAnimListener {
override fun onVideoComplete() {
playNext()
}
})
isPlaying = true
}
7.5 Gerenciamento de Memória: Libere Imediatamente Após a Reprodução
O VAP decodifica quadros de vídeo em memória. Se você não liberar após a reprodução, a memória explode depois de alguns presentes grandes.
Android:
vapView.stopPlay()iOS:
vapView.stopPlay()
vapView.removeFromSuperview()Pontos de gatilho: Presente termina, usuário sai da sala, aplicativo entra em segundo plano — todos devem disparar a limpeza dos recursos do VAP.

