12.5. Video Telephony or Streaming with FUs and Forward Error Correction (Vidéophonie ou streaming avec FU et correction d'erreur directe (FEC))
12.5. Video Telephony or Streaming with FUs and Forward Error Correction (Vidéophonie ou streaming avec FU et correction d'erreur directe (FEC))
Ce schéma a été implémenté et s'est révélé offrir de bonnes performances, en particulier à des taux de perte de paquets plus élevés [19].
Le moyen le plus efficace de lutter contre les pertes de paquets dans les scénarios où les retransmissions ne sont pas applicables est la correction d'erreur directe (forward error correction, FEC). Bien que l'utilisation de bout en bout de la FEC au niveau application soit souvent moins efficace qu'une protection basée sur la FEC de liens individuels (en particulier lorsque des liens aux caractéristiques différentes se trouvent sur le chemin de transmission), la FEC de bout en bout au niveau application est inévitable dans certains scénarios. La RFC 5109 [18] fournit des moyens d'utiliser une FEC générique de bout en bout au niveau application dans des environnements de perte de paquets. Un code correcteur d'erreur binaire est généré en appliquant l'opération XOR aux bits à la même position bit dans différents paquets. Le code binaire peut être spécifié par les paramètres (n,k), où k est le nombre de paquets d'information utilisés dans la connexion et n est le nombre total de paquets générés pour k paquets d'information ; c'est-à-dire que n-k paquets de parité sont générés pour k paquets d'information.
Lorsqu'un code est utilisé avec les paramètres (n,k) dans le cadre de la RFC 5109, les propriétés suivantes sont bien connues :
a) Si appliqué sur un seul paquet RTP, la RFC 5109 ne fournit que la répétition de paquets.
b) La RFC 5109 est la plus efficace en débit binaire si les paquets connectés par XOR ont la même longueur.
c) À la même probabilité de perte de paquets p et pour un k fixe, plus n est grand, plus la probabilité d'erreur résiduelle devient petite. Par exemple, pour une probabilité de perte de paquets de 10 %, k=1 et n=2, la probabilité d'erreur résiduelle est d'environ 1 %, alors que pour n=3, elle est d'environ 0,1 %.
d) À la même probabilité de perte de paquets p et pour un débit de code fixe k/n, plus n est grand, plus la probabilité d'erreur résiduelle devient petite. Par exemple, à une probabilité de perte de paquets de p=10 %, k=1 et n=2, le taux d'erreur résiduel est d'environ 1 %, alors que pour un code de Golay étendu avec k=12 et n=24, le taux d'erreur résiduel est d'environ 0,01 %.
Pour appliquer la RFC 5109 en combinaison avec de la vidéo codée en ligne de base H.264 sans utiliser les FU (Fragmentation Units), plusieurs options peuvent être envisagées :
-
L'encodeur vidéo produit des unités NAL pour lesquelles chaque image vidéo est codée dans un seul slice. En appliquant la FEC, on pourrait utiliser un code simple, par ex. (n=2, k=1). C'est-à-dire que chaque unité NAL serait essentiellement simplement répétée. L'inconvénient est évidemment la mauvaise performance du code selon d) ci-dessus, et la faible flexibilité, car seuls les codes (n, k=1) peuvent être utilisés.
-
L'encodeur vidéo produit des unités NAL pour lesquelles chaque image vidéo est encodée dans un ou plusieurs slices consécutifs. En appliquant la FEC, on pourrait utiliser un meilleur code, par ex. (n=24, k=12), sur une séquence d'unités NAL. Selon le nombre de paquets RTP par image, une perte peut introduire un délai significatif, réduit lorsque davantage de paquets RTP sont utilisés par image. Des paquets de longueurs complètement différentes peuvent aussi être connectés, ce qui diminue l'efficacité en débit binaire selon b) ci-dessus. Cependant, avec un peu d'attention et pour des slices d'au moins 1 ko, une longueur similaire (différence de 100 à 200 octets) peut être produite, ce qui ne réduit pas l'efficacité binaire de manière catastrophique.
-
L'encodeur vidéo produit des unités NAL pour lesquelles une certaine image contient k slices de longueur presque égale. Alors, en appliquant la FEC, un meilleur code, par ex. (n=24, k=12), peut être utilisé sur la séquence d'unités NAL pour chaque image. Le délai par rapport à 2) ci-dessus peut être réduit, mais plusieurs inconvénients sont évidents. Premièrement, l'efficacité de codage de la vidéo encodée est fortement réduite, car le codage structuré en slices réduit la prédiction intra-image et une surcharge de slice supplémentaire est nécessaire. Deuxièmement, le contenu pré-encodé ou, en fonctionnement via une passerelle, la vidéo n'est généralement pas codée de manière appropriée avec k slices pour que la FEC puisse être appliquée. Enfin, l'encodage de vidéo produisant k slices de longueur égale n'est pas simple et peut nécessiter plus d'une passe d'encodage.
Beaucoup des inconvénients mentionnés peuvent être évités en appliquant les FU en combinaison avec la FEC. Chaque unité NAL peut être divisée en un nombre quelconque de FU de longueur à peu près égale ; par conséquent, la FEC, avec des k et n raisonnables, peut être appliquée même si l'encodeur n'a pas cherché à produire des slices de longueur égale. Par exemple, une unité NAL de slice codé contenant une image entière peut être divisée en k FU, et un code de contrôle de parité (n=k+1, k) peut être appliqué. Cependant, cela a l'inconvénient que, sauf si tous les fragments créés peuvent être récupérés, le slice entier sera perdu. Ainsi, une section plus grande est perdue que si l'image avait été divisée en plusieurs slices.
La technique présentée permet d'atteindre une bonne tolérance aux erreurs de transmission, même si aucune redondance supplémentaire au niveau du codage source (telles que des images intra périodiques) n'est présente. Par conséquent, la même séquence vidéo codée peut être utilisée pour atteindre l'efficacité de compression et la qualité maximales sur une transmission sans erreur et pour la transmission sur des réseaux sujets aux erreurs. De plus, la technique permet l'application de la FEC aux séquences pré-encodées sans ajouter de délai. Dans ce cas, les séquences pré-encodées qui ne sont pas encodées pour des réseaux sujets aux erreurs peuvent encore être transmises de manière presque fiable sans ajouter de délais importants. De plus, des FU de longueur égale permettent une utilisation efficace en débit binaire de la RFC 5109.
Si la probabilité d'erreur dépend de la longueur du paquet transmis (par ex. en cas de transmission mobile [15]), les avantages d'appliquer les FU avec la FEC sont encore plus évidents. En substance, la flexibilité de la taille des FU permet d'appliquer une FEC appropriée pour chaque unité NAL et une protection d'erreur inégale des unités NAL.
Lorsque les FU et la FEC sont utilisés, la surcharge engendrée est substantielle mais du même ordre de grandeur que le nombre de bits qui doivent être consacrés aux macroblocs codés en intra si aucune FEC n'est appliquée. Dans [19], il a été montré que les performances globales de l'approche basée sur la FEC amélioraient la qualité pour le même taux d'erreur et le même débit binaire global, y compris la surcharge.