WebRTC latence la plus faible possible

J'ai un protocole de streaming UDP simple qui prend des images vidéo RAW H264 et les envoie instantanément du côté serveur au côté client.

En utilisant ce protocole, je peux me rapprocher de la latence RTT du réseau (pas de renvoi de paquets et je me fiche de la perte de paquets), donc si j'ai une latence de 20 ms du serveur au client, je peux créer une image vidéo pour être prêt de la sortie de l'encodeur à le côté client (prêt à être décodé) en... disons 30 ms.

Ma question est:

WebRTC (sur UDP) est-il capable de descendre à ce genre de latences ? Sans tenir compte des temps d'encodage et de décodage, quelle est la latence la plus faible possible que je peux obtenir avec WebRTC pour la couche protocole ?

Je ne sais pas si ce type de latence nécessitera que mon propre protocole soit développé plus en profondeur ou si je peux passer à quelque chose de plus générique comme WebRTC pour le développement de mon serveur vidéo afin d'être instantanément pris en charge par tous les navigateurs Web.


Solution du problème

WebRTC peut avoir la même faible latence que les piles SIP/RTP classiques. Les fournisseurs de piles WebRTC font de leur mieux pour réduire les délais.

Pour l'enregistrement et l'envoi, il n'y a aucun délai. La pile enverra les paquets immédiatement une fois reçus de l'enregistreur et compressés avec le codec sélectionné. Certains codecs (et certains paramètres de codec) peuvent introduire un certain délai ici pour activer certaines fonctionnalités telles que FEC.

En ce qui concerne le côté récepteur : dans des circonstances optimales, la pile ne doit pas retarder la lecture des paquets, afin qu'ils puissent être affichés dès qu'ils arrivent. Cependant, dans des circonstances sous-optimales (avec des retards de réseau ou des pertes de paquets), la pile introduira un tampon de gigue. Plus la qualité du réseau est faible, plus la longueur du tampon de gigue sera élevée.

Ainsi, pour obtenir le délai le plus faible, vous devrez peut-être procéder comme suit :


  • choisir un codec avec le plus petit temps de traitement

  • supprimer FEC et désactiver tous les autres paramètres qui pourraient entraîner des retards supplémentaires

  • supprimez le tampon de gigue (la plupart des piles WebRTC n'ont pas de paramètre pour cela, vous devrez donc peut-être modifier le code vous-même, mais c'est une modification facile, car il vous suffit de désactiver une partie du code)

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"