Como reduzir a latência no streaming de vídeo do FFmpeg?

3

Em um aplicativo de streaming de vídeo entre o servidor Linux (FFmpeg) e o cliente Windows (VLC player) , há uma latência perceptível de cerca de 10 segundos.

Comando FFmpeg:

ffmpeg -re -f v4l2 -i /dev/video0 http://192.168.1.101:8090/feed1.ffm

VLC player:

http://192.168.1.101:8090/test.swf

Apesar do fato de que, tanto o servidor quanto o cliente iniciam juntos, o player do VLC atrasa cerca de 10 segundos para reproduzir o fluxo, reproduzindo-o a partir do primeiro quadro capturado pelo servidor. Por este motivo, há constantemente um atraso de 10 segundos.

Estou tentando descobrir o que causa essa latência:

  1. Meu primeiro pensamento é que o codec atrasa a codificação. Neste caso, qual codec devo incluir no meu arquivo de configuração do ffserver? Eu experimentei muitos codecs de vídeo (rawvideo, flv, mjpeg) mas o mesmo resultado.

  2. Em segundo lugar, existe um parâmetro que eu poderia incluir no meu comando ffmpeg para controlar a latência?

  3. Por outro lado, essa latência pode ocorrer devido ao player VLC?

Eu compreendo que essa questão é meio geral. No entanto, qualquer ajuda, no caso de você enfrentar um problema semelhante, seria muito apreciada.

arquivo de configuração do FFserver:

Port 8090
BindAddress 0.0.0.0
MaxClients 10
MaxBandwidth 40000  

<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 500M
ACL allow localhost
ACL allow 127.0.0.1
ACL allow 192.168.0.0 192.168.255.255
</Feed>

<Stream test.swf>
Feed feed1.ffm
Format swf
VideoCodec flv
VideoSize 640x480
VideoFrameRate 30
VideoBitRate 400 

AVOptionVideo flags +global_header
AVOptionVideo cpu-used 0
AVOptionVideo qmin 10
AVOptionVideo qmax 42

PreRoll 5
StartSendOnKey
NoAudio
</Stream>
    
por dempap 08.03.2014 / 17:50

1 resposta

0

Adicione a opção ffmpeg com -tune zerolatency e a melhor opção usando o codec x265, reduza o tamanho de VideoSize 640x480 para VideoSize 320x240.

Por fim, altere seu player de vlc para ffplay

    
por 30.03.2016 / 07:16