Réduisez la latence avec FFplay pour les codeurs HDMI | Exvist Support

FAQ: Réduire la latence avec FFplay pour Encodeur

Guide étape par étape pour réduire la latence avec FFplay

1. Installer FFmpeg et FFplay

Assurez-vous que FFmpeg (qui inclut FFplay) est installé sur votre système. Vous pouvez vérifier s'il est installé en exécutant :
  1. ffplay -version
S'il n'est pas installé, vous pouvez télécharger et installer FFmpeg depuis lesite officielou utiliser un gestionnaire de paquets commeapt or brewselon votre système d'exploitation.

2. Ouvrir FFplay avec un flux RTSP

Commencez par exécuter FFplay avec l'URL de votre flux RTSP :
  1. ffplay rtsp://192.168.1.120:554/live/1_0
Remplacezrtsp://192.168.1.120:554/live/1_0par l'URL RTSP réelle de votre encodeur vidéo.

3. Ajuster la taille du tampon

Réduisez la taille du tampon par défaut pour minimiser le délai. Utilisez l'option -rtsp_transport pour sélectionner le protocole de transport (TCP ou UDP). UDP entraîne généralement une latence plus faible.
Exemple de commande:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 rtsp://192.168.1.120:554/live/1_0
Explication:
  1. -rtsp_transport udp: Force le transport UDP, qui offre généralement une latence plus faible que TCP.
  2. -fflags nobuffer: Désactive la mise en tampon pour réduire la latence.
  3. -analyzeduration 0: Limite le temps que FFplay passe à analyser le flux, ce qui aide à démarrer la lecture plus rapidement.
  4. -probesize 32: Limite la quantité de données utilisées pour sonder le flux, ce qui réduit également la latence.

4. Ajuster le délai de sortie vidéo

Utilisez l'option -sync pour ajuster la synchronisation vidéo. La définir sur video force FFplay à se synchroniser avec le flux vidéo, ce qui peut aider à réduire la latence.
Exemple de commande:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

5. Réduire la mise en mémoire tampon vidéo et audio

Désactivez ou minimisez la lecture audio avec -vn (pas de vidéo) ou ajustez les tailles de tampon audio à l'aide de -an (pas d'audio) si l'audio n'est pas nécessaire pour le test.
Exemple:
  1. ffplay -rtsp_transport udp -fflags nobuffer -analyzeduration 0 -probesize 32 -sync video -an rtsp://192.168.1.120:554/live/1_0

6. Affiner les options de décodage

Ajoutez des options pour optimiser les performances de décodage et minimiser la latence. Par exemple :
  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. Optimisations supplémentaires (facultatif)

Vous pouvez affiner davantage FFplay en utilisant les indicateurs -x et -y pour spécifier la taille de la fenêtre vidéo, et -framedrop pour abandonner des images si elles ne peuvent pas être traitées assez rapidement :
  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
Explication:
  1. -framedrop: Abandonne des images lorsque le système ne parvient pas à suivre le décodage, ce qui réduit la mise en mémoire tampon.
  2. -x 640 -y 360: Spécifie la résolution de lecture de la vidéo, ce qui réduit la charge de décodage.

Exemple de commande finale

  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. Surveiller la latence

Après la configuration, surveillez la lecture pour observer la réduction de la latence. Vous pouvez utiliser des outils comme FFprobe pour mesurer la latence en temps réel en inspectant les détails du flux.
Exemple de commande FFprobe pour vérifier les statistiques du flux:
  1. ffprobe -v quiet -print_format json -show_streams rtsp://192.168.1.120:554/live/1_0
En utilisant les commandes ci-dessus et en ajustant les différents indicateurs, vous pouvez réduire efficacement la latence lors du test du flux RTSP depuis votre encodeur vidéo.

Guide étape par étape pour réduire davantage la latence avec FFplay

Si vous constatez une latence accrue après avoir suivi les instructions fournies, plusieurs raisons peuvent expliquer ce phénomène. Voici quelques causes potentielles et des moyens d'y remédier :

1. Paramètres de mise en mémoire tampon (ajustement incorrect du tampon)

L'indicateur-fflags nobufferest destiné à minimiser la mise en mémoire tampon, mais dans certains cas, cela peut entraîner une instabilité ou une latence accrue, surtout si les conditions réseau ne sont pas idéales. FFplay peut avoir du mal à traiter les images en douceur sans un tampon suffisant, ce qui provoque des délais supplémentaires lors de la lecture.

Solution: Essayez d'ajuster la stratégie de mise en mémoire tampon. Au lieu de désactiver complètement la mise en mémoire tampon, vous pouvez utiliser un paramètre de tampon plus conservateur ou supprimer le-fflags nobufferflag :

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

2. Protocole de transport RTSP (UDP vs TCP)

Passer àUDPest généralement plus rapide que TCP pour la diffusion RTSP, mais cela peut entraîner une perte de paquets ou une gigue dans certaines conditions réseau, ce qui amène le décodeur à retarder le traitement. Si le réseau n'est pas stable, l'utilisation deUDPpeut augmenter involontairement la latence car FFplay tente de compenser les paquets perdus ou corrompus.

Solution: Testez avec le transportTCPet voyez si la latence s'améliore. Utilisez l'indicateur-rtsp_transport tcppour forcer TCP :
ffplay -rtsp_transport tcp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

3. Abandon d'images

L'indicateur-framedropdemande à FFplay de rejeter les images s'il n'est pas en mesure de les décoder à temps, ce qui devrait réduire la latence. Cependant, si trop d'images sont abandonnées, cela peut entraîner des retards accrus car FFplay peut prendre plus de temps pour se rétablir et se resynchroniser.

Solution: Si l'abandon d'images est excessif, essayez de supprimer l'indicateur-framedropou de réduire son impact :
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0
Alternativement, vous pouvez essayer d'ajuster le comportement de -framedrop pour voir s'il aide à réduire le décalage :
  1. ffplay -framedrop 0 -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video rtsp://192.168.1.120:554/live/1_0

4. Conditions réseau et gigue

LeUDPtransport peut ne pas être idéal dans un réseau à latence élevée ou instable. UDP ne garantit pas la livraison des paquets, ce qui peut entraîner une gigue et des délais de mise en mémoire tampon côté client. Bien qu'UDP puisse réduire la latence dans des conditions réseau parfaites, il cause souvent plus de problèmes en cas d'instabilités réseau ou de congestion.

Solution: Testez avec un réseau stable et moins congestionné, ou revenez àTCPsi votre réseau présente une gigue élevée ou des pertes de paquets.

5. Surcharge du décodeur

Si le-flags low_delayflag est utilisé avec de grands flux vidéo ou des résolutions plus élevées, cela peut entraîner une surcharge du décodeur où FFplay tente de décoder les images trop rapidement, ce qui peut introduire davantage de délais de traitement.

Solution: Réduisez la résolution de la vidéo pour alléger la charge sur le décodeur ou désactivez les flags de faible latence si cela cause des problèmes :
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync video -an rtsp://192.168.1.120:554/live/1_0

6. Analyse et sondage excessifs

Les flags-analyzeduration 0et-probesize 32sont destinés à limiter le temps que FFplay passe à analyser le flux et la taille du sondage initial des paquets, ce qui devrait accélérer le démarrage. Cependant, si ces valeurs sont trop restrictives, cela peut forcer FFplay à fonctionner avec des informations incomplètes, entraînant des délais de synchronisation ou une latence globale accrue lorsqu'il tente de récupérer les données manquantes.

Solution: Augmentez légèrement les valeurs de-analyzedurationet-probesizepour permettre à FFplay de collecter plus de données au démarrage sans augmenter significativement la latence :
  1. ffplay -rtsp_transport udp -analyzeduration 5000000 -probesize 5000000 -sync video rtsp://192.168.1.120:554/live/1_0

7. Mode de synchronisation vidéo

Le-sync videoflag indique à FFplay de synchroniser précisément les images vidéo, ce qui peut entraîner des retards lorsqu'il doit attendre l'image suivante. Si la fréquence d'images de sortie de l'encodeur ne s'aligne pas bien avec les attentes de synchronisation de FFplay, cela peut entraîner des retards inutiles.

Solution: Vous pouvez expérimenter la synchronisation suraudio or horodatageplutôt que sur la vidéo :
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 -sync audio rtsp://192.168.1.120:554/live/1_0
Alternativement, supprimer entièrement le flag -sync pourrait aider :
  1. ffplay -rtsp_transport udp -analyzeduration 0 -probesize 32 rtsp://192.168.1.120:554/live/1_0

Conclusion :

Pour réduire la latence, expérimentez en équilibrant la stratégie de mise en mémoire tampon, le protocole de transport et les paramètres de décodage. UDP offre généralement une latence plus faible mais nécessite un réseau stable, tandis que TCP peut être plus fiable si la qualité du réseau est irrégulière. L'ajustement de la taille des tampons, du comportement de sondage et des paramètres de suppression d'images peut également aider à atténuer une latence excessive. Continuez à tester différentes configurations pour trouver la configuration optimale pour votre cas d'utilisation spécifique.