La correction d'erreur, la clé d'une transmission vidéo réussie

Primary tabs

Notre équipe R&D effectue actuellement des recherches et développe des prototypes autour de l'utilisation du mécanisme de "Forward Error Correction" pour les transmissions vidéo.

Forward Error Correction (FEC) [1] est une technique bien connue de contrôle des erreurs dans la transmission des données. Dans les réseaux IP, les erreurs se traduisent en fait par la perte complète d'un datagramme UDP ou TCP entier, c'est pourquoi la FEC est également appelée Forward Erasure Correction. L'objectif est alors de pouvoir recréer un paquet perdu, sur la base des autres paquets transmis et des informations redondantes incluses dans des paquets FEC spécifiques.

Pourquoi y a-t-il des pertes de paquets ?

Les pertes de paquets [2] sont courantes dans les télécommunications, en raison de la nature des transmissions : par exemple, un réseau sans fil peut être soumis à des interférences de radiofréquence. D'autres causes de pertes de paquets sont les encombrements temporaires qui se produisent dans les routeurs.

Dans le monde réel, il est courant et généralement acceptable d'observer un taux de perte d'environ 1 à 2% pour de nombreux types de connectivité internet (xDSL, LTE, 5G, Wifi ...).

 

Pourquoi les pertes de paquets sont-elles un problème ?

Dans la plupart des cas d'usage d'Internet, les pertes de paquets sont gérées par le protocole TCP : le récepteur accuse réception des paquets reçus, et s'arrête jusqu'à ce que l'émetteur retransmette les paquets perdus.

Toutefois, cette technique n'est pas utilisable dans le domaine des communications en temps réel, car il n'est pas acceptable d'arrêter le flux jusqu'à ce que les paquets retransmis arrivent. 

C'est la raison pour laquelle les flux audio et vidéo en temps réel sont de préférence transmis par le protocole UDP. Bien que des retransmissions au niveau applicatif puissent être mises en œuvre efficacement sur UDP, elles ne sont souvent pas adaptées en raison des délais d'aller-retour entre l'émetteur et le récepteur.

Les pertes de paquets sont bien gérées pour les flux audio grâce au Packet Loss Concealment (PLC), qui les rend presque imperceptibles pour les utilisateurs finaux tant que le taux de perte reste inférieur à 5 %.

En revanche, elles sont bien plus difficiles à gérer pour les données vidéo. En effet, la nature du codage vidéo implique qu'une seule perte dans une trame vidéo rende la trame entière indécodable, ainsi que les séquences suivantes, jusqu'à ce qu'une séquence spéciale appelée "Key-frame" soit reçue. C'est la conséquence du codage différentiel utilisé pour la compression vidéo.

 

Comment les pertes de paquets sont-elles gérées dans les transmissions vidéo en temps réel ?

Lorsqu'un récepteur vidéo observe une perte de paquets, il peut notifier à l'émetteur distant la perte d'informations grâce à des paquets RTCP spéciaux (PLI - packet loss indication [3]), de sorte que l'émetteur puisse immédiatement générer une key-frame pour permettre au récepteur de poursuivre le rendu de la séquence vidéo.

Cette technique, qui est mise en œuvre dans Linphone depuis de nombreuses années, présente l'inconvénient de geler l'affichage vidéo jusqu'à la réception de ladite « Key-frame » (image-clé).

Pour un flux vidéo de qualité moyenne et avec un taux de perte de 1%, la vidéo ne sera pas fréquemment gelée.

Cependant, pour un flux vidéo de haute qualité (HD), la quantité de données est si élevée que même un taux de perte de 0,5 % entraînera un gel de la vidéo presque toutes les secondes, ce qui donnera à l'utilisateur final un effet saccadé et irrégulier.

 

Pourquoi la FEC peut-elle aider ?

La FEC offre une solution pour compenser les taux de perte généralement observés sur Internet. En contrepartie d'une consommation supplémentaire de données et d'une latence qui restent relativement faibles, les informations de redondance transmises par l'émetteur permettent au récepteur de recréer les paquets manquants, tant que le taux de perte reste compatible avec la quantité de redondance envoyée par l'encodeur.

En conséquence, la vidéo peut être lue de manière fluide, sans aucun effet observable pour l'utilisateur final.

 

Comment cela sera-t-il implémenté dans Linphone ?

Il existe actuellement plusieurs techniques de FEC et approches standardisées à l'IETF.

Notre équipe a choisi le schéma Flexible Forward Error Correction (flexfec) documenté dans le RFC8627 [4], car il combine un codage de redondance à faible complexité (basé sur XOR), avec un haut niveau de flexibilité pour les paramètres FEC, ce qui est essentiel pour ajuster la surcharge de redondance en fonction du taux de perte observé et de la bande passante du réseau.

Les résultats sont très prometteurs !

Nous serons bientôt très heureux d'annoncer une future version de Linphone et Linphone-sdk incluant un algorithme FEC pour la transmission vidéo !

Annexe :

[1] https://en.wikipedia.org/wiki/Error_correction_code#Forward_error_correc...

[2] https://en.wikipedia.org/wiki/Packet_loss

[3] https://en.wikipedia.org/wiki/Packet_loss_concealment

[4] https://datatracker.ietf.org/doc/html/rfc8627