web-dev-qa-db-fra.com

Comment minimiser le retard dans une diffusion en direct avec ffmpeg

j'ai un problème .. Je voudrais faire un streaming en direct avec ffmpeg depuis ma webcam. 

  1. Je lance le ffserver et ça marche.
  2. Depuis un autre terminal, je lance ffmpeg pour diffuser avec cette commande .__ et cela fonctionne:

    Sudo ffmpeg -re -f video4linux2 -i /dev/video0 -fflags nobuffer -an http://localhost:8090/feed1.ffm
    
  3. Dans mon fichier de configuration, j'ai ce flux:

    <Stream test.webm>
    Feed feed1.ffm
    Format webm
     NoAudio
     VideoCodec libvpx
     VideoSize 720x576
     VideoFrameRate 25
     # Video settings
        VideoCodec libvpx
        VideoSize 720x576           # Video resolution
        VideoFrameRate 25           # Video FPS
        AVOptionVideo flags +global_header  # Parameters passed to encoder 
                                        # (same as ffmpeg command-line parameters)
        AVOptionVideo cpu-used 0
        AVOptionVideo qmin 10
        AVOptionVideo qmax 42
        #AVOptionVideo quality good
        PreRoll 5
         StartSendOnKey
        VideoBitRate 400            # Video bitrate
     </Stream>
    
  4. Je lance le flux avec

    ffplay http: //192.168.1.2: 8090/test.webm Cela fonctionne mais j'ai un délai de 4 secondes et je voudrais minimiser ce délai car il est essentiel pour mon application . Merci

19
Pasquale C.

Le guide de diffusion en continu de FFMpeg contient une section spécifique sur la réduction de la latence. Je n'ai pas encore essayé toutes leurs suggestions. http://ffmpeg.org/trac/ffmpeg/wiki/StreamingGuide#Latency

Ils font une remarque particulière sur la latence. Ffplay présente:

Par défaut, ffplay introduit une petite latence qui lui est propre. Également utile est mplayer avec son -nocache pour tester la latence (ou -benchmark). L'utilisation de la sortie SDL permet également d'afficher les images avec une latence minimale: ffmpeg ... -f sdl -

14
Glen Blanchard

Vous pouvez essayer cette commande

ffplay -fflags nobuffer -rtsp_transport tcp rtsp://<Host>:<port>

ou un plus savoureux mais expérimental:

ffplay -fflags nobuffer -flags low_delay -framedrop \
 -strict experimental -rtsp_transport tcp rtsp://<Host>:<port>

ou le hacky:

ffplay  -probesize 32 -sync ext -rtsp_transport tcp rtsp://<Host>:<port>

Le -rtsp_transport peut être configuré comme udp ou tcp en fonction de votre diffusion. Pour cet exemple, j'utilise tcp.

0
Teocci