Reduza a latência com FFplay para codificadores HDMI | Exvist Support

Perguntas frequentes: Reduzir a latência com FFplay para codificador

Guia passo a passo para reduzir a latência com o FFplay

1. Instale o FFmpeg e o FFplay

Certifique-se de que o FFmpeg (que inclui o FFplay) está instalado no seu sistema. Pode verificar se está instalado executando:
  1. ffplay -version
Se não estiver instalado, pode baixar e instalar o FFmpeg a partir dosite oficialou usar um gerenciador de pacotes comoapt or brewcom base no seu sistema operacional.

2. Abra o FFplay com o fluxo RTSP

Comece executando o FFplay com o URL do seu fluxo RTSP:
  1. ffplay rtsp://192.168.1.120:554/live/1_0
Substituartsp://192.168.1.120:554/live/1_0pelo URL RTSP real do seu codificador de vídeo.

3. Ajuste o tamanho do buffer

Reduza o tamanho padrão do buffer para minimizar o atraso. Use o sinalizador -rtsp_transport para selecionar o protocolo de transporte (TCP ou UDP). O UDP normalmente resulta em menor latência.
Comando de exemplo:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 rtsp://192.168.1.120:554/live/1_0
Explicação:
  1. -rtsp_transport udp: Força o transporte UDP, que geralmente tem menor latência que o TCP.
  2. -fflags nobuffer: Desativa o buffering para reduzir a latência.
  3. -analyzeduration 0: Limita o tempo que o FFplay passa analisando o fluxo, ajudando a iniciar a reprodução mais rapidamente.
  4. -probesize 32: Limita a quantidade de dados usada para sondar o fluxo, o que também reduz a latência.

4. Ajuste o atraso da saída de vídeo

Use o sinalizador -sync para ajustar a sincronização de vídeo. Defini-lo como video força o FFplay a sincronizar com o fluxo de vídeo, o que pode ajudar a reduzir a latência.
Comando de exemplo:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

5. Reduzir o buffering de vídeo e áudio

Desative ou minimize a reprodução de áudio com -vn (sem vídeo) ou ajuste os tamanhos do buffer de áudio usando -an (sem áudio) se o áudio não for necessário para o teste.
Exemplo:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video -an rtsp://192.168.1.120:554/live/1_0

6. Ajustar finamente as opções de descodificação

Adicione opções para otimizar o desempenho de descodificação e minimizar a latência. Por exemplo:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video -an -flags low_delay rtsp://192.168.1.120:554/live/1_0

7. Otimizações adicionais (opcional)

Pode ajustar ainda mais o FFplay usando os sinalizadores -x e -y para especificar o tamanho da janela de vídeo, e -framedrop para descartar fotogramas se não puderem ser processados com rapidez suficiente:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video -an -framedrop -flags low_delay -x 640 -y 360 rtsp://192.168.1.120:554/live/1_0
Explicação:
  1. -framedrop: Descarta fotogramas quando o sistema não consegue acompanhar a descodificação, reduzindo o buffering.
  2. -x 640 -y 360: Especifica a resolução para reproduzir o vídeo, reduzindo a carga de descodificação.

Exemplo de comando final

  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video -an -framedrop -flags low_delay -x 640 -y 360 rtsp://192.168.1.120:554/live/1_0

8. Monitorizar a latência

Após a configuração, monitorize a reprodução para observar a redução da latência. Pode usar ferramentas como o FFprobe para medir a latência em tempo real inspecionando os detalhes do stream.
Exemplo de comando FFprobe para verificar as estatísticas do stream:
  1. ffprobe -v quiet -print_format json -show_streams rtsp://192.168.1.120:554/live/1_0
Ao usar os comandos acima e ajustar os vários sinalizadores, pode reduzir eficazmente a latência ao testar o stream RTSP do seu codificador de vídeo.

Guia passo a passo para reduzir ainda mais a latência com o FFplay

Se estiver a experienciar um aumento da latência após seguir as instruções fornecidas, pode haver várias razões para isso acontecer. Aqui estão algumas causas potenciais e formas de as resolver:

1. Definições de buffering (ajuste incorreto do buffer)

O sinalizador-fflags nobufferdestina-se a minimizar o buffering, mas em alguns casos, isto pode levar a instabilidade ou aumento da latência, especialmente se as condições da rede não forem ideais. O FFplay pode ter dificuldade em processar fotogramas suavemente sem buffer suficiente, causando atrasos adicionais na reprodução.

Solução: Tente ajustar a estratégia de buffering. Em vez de desativar completamente o buffering, pode usar uma configuração de buffer mais conservadora ou remover a flag-fflags nobuffer:

  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

2. Protocolo de transporte RTSP (UDP vs TCP)

Mudar paraUDPé normalmente mais rápido do que TCP para streaming RTSP, mas pode resultar em perda de pacotes ou jitter em determinadas condições de rede, fazendo com que o descodificador atrase o processamento. Se a rede não for estável, usarUDPpode aumentar inadvertidamente a latência à medida que o FFplay tenta compensar pacotes perdidos ou corrompidos.

Solução: Teste com transporteTCPe veja se a latência melhora. Use a flag-rtsp_transport tcppara forçar TCP:
ffplay -rtsp_transport tcp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

3. Descarte de quadros

A flag-framedropindica ao FFplay para descartar quadros se não conseguir descodificá-los a tempo, o que deverá diminuir a latência. No entanto, se demasiados quadros forem descartados, isso pode levar a atrasos maiores, pois o FFplay pode demorar mais tempo a recuperar e a ressincronizar.

Solução: Se o descarte de quadros for excessivo, tente remover a flag-framedropou reduzir o seu impacto:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0
Em alternativa, pode tentar ajustar o comportamento de -framedrop para ver se ajuda a reduzir o atraso:
  1. ffplay -framedrop 0 -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

4. Condições de rede e jitter

OUDPtransporte pode não ser ideal em uma rede de alta latência ou instável. O UDP não garante a entrega de pacotes, o que pode levar a jitter e atrasos de buffering no lado do cliente. Embora o UDP possa reduzir a latência em condições de rede perfeitas, muitas vezes causa mais problemas quando há instabilidades ou congestionamento na rede.

Solução: Teste com uma rede estável e menos congestionada, ou reverta paraTCPse sua rede tiver alto jitter ou perda de pacotes.

5. Sobrecarga do decodificador

Se a-flags low_delayflag for usada junto com grandes fluxos de vídeo ou resoluções mais altas, isso pode levar a uma sobrecarga do decodificador, onde o FFplay tenta decodificar quadros muito rapidamente, o que pode introduzir mais atrasos de processamento.

Solução: Reduza a resolução do vídeo para aliviar a carga no decodificador ou desative as flags de baixa latência se estiver causando problemas:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video -an rtsp://192.168.1.120:554/live/1_0

6. Análise e sondagem excessivas

As flags-analyzeduration 0e-probesize 32destinam-se a limitar a quantidade de tempo que o FFplay gasta analisando o fluxo e o tamanho da sondagem inicial de pacotes, o que deve acelerar a inicialização. No entanto, se esses valores forem muito restritivos, isso pode forçar o FFplay a operar com informações incompletas, levando a atrasos de sincronização ou a um aumento da latência geral à medida que tenta se recuperar de dados ausentes.

Solução: Aumente os valores de-analyzeduratione-probesizeligeiramente para permitir que o FFplay colete mais dados durante a inicialização sem aumentar significativamente a latência:
  1. ffplay -rtsp_transport udp -analyzeduration 5000000 -probesize 5000000 -sync video rtsp://192.168.1.120:554/live/1_0

7. Modo de sincronização de vídeo

O-sync videoa flag instrui o FFplay a sincronizar os quadros de vídeo com precisão, o que pode causar atrasos quando é necessário aguardar o próximo quadro. Se a taxa de quadros de saída do codificador não estiver bem alinhada com as expectativas de sincronização do FFplay, isso pode levar a atrasos desnecessários.

Solução: Você pode experimentar sincronizar comáudio or timestampem vez de vídeo:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync audio rtsp://192.168.1.120:554/live/1_0
Alternativamente, remover completamente a flag -sync pode ajudar:
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 rtsp://192.168.1.120:554/live/1_0

Conclusão:

Para reduzir a latência, experimente equilibrar a estratégia de buffering, o protocolo de transporte e as configurações de descodificação. O UDP geralmente oferece menor latência, mas requer uma rede estável, enquanto o TCP pode ser mais fiável se a qualidade da rede for inconsistente. Ajustar os tamanhos de buffer, o comportamento de sondagem e as configurações de descarte de quadros também pode ajudar a mitigar a latência excessiva. Continue a testar diferentes configurações para encontrar a configuração ideal para o seu caso de uso específico.