Projet encodage H264 : Data Partitionning et Flexible macroblock ordering

De Wiki de Romain RUDIGER
Aller à : navigation, rechercher

Projet Multimédia Error resiliency – H264

Introduction

Notre projet multimédia a consisté à paramétrer, à l'aide du codeur de référence H.264/AVC du Joint Video Team (JVT), l'encodage H264 de manière à ce qu'il soit résistant à la perte de paquet. Nous avons donc mis en place deux stratégies de résistance : le Data Partitionning et le Flexible macroblock ordering. Notre projet multimédia a été réalisé en collaboration entre deux binômes. Le premier binôme a réalisé l’encodage des vidéos en suivant les deux stratégies citées ci-dessus et le deuxième binôme a réalisé la modification du simulateur de perte de paquets pour qu’il prenne en compte le format RTP des paquets.

Encodage des vidéos

Data partitionning

Le partitionnement des données (DP : Data partitioning) donne la possibilité de séparer les éléments de syntaxe d'importance plus ou moins élevée dans différents paquets de données. Ceci permet d'appliquer un niveau de protection inégal (UEP : Unequal error protection) aux erreurs en fonction de l'importance des données et d'améliorer ainsi la fiabilité du flux. Normalement, tous les symboles d'un macrobloc sont codés ensemble dans un seul « bit string » qui forme une slice. Le Data Partitioning, cependant, crée plus d’un « bit strings » (appelé des partitions) par slice et répartit tous les symboles d'une slice dans une partition individuelle qui a une relation sémantique particulière. Dans H.264, trois types de partitions différentes sont utilisés.

Les informations d'En-tête, y compris le MB types, les paramètres de quantification et les vecteurs de mouvement. Ces informations sont les plus importantes, parce que sans elles, les symboles des autres partitions ne peuvent pas être utilisés. Ce type de partition est appelé partition de type A dans H.264.

La Partition Intra, appelée partition de type B. Elle comporte les CBP (coded block pattern) Intra et les coefficients Intra. La partition de type B exige la disponibilité d’une partition de type A d'une slice donnée pour être utile.

La partition Inter, appelée partition de type C. Elle contient seulement les CBP Inter et les coefficients Inter mais est, dans des nombreux cas, la plus grande partition d'une slice codée. Les partitions Inter sont les moins importantes parce que leurs informations ne re-synchronisent pas l'encodeur et le décodeur. Pour être utilisé, elles exigent la disponibilité d’une partition de type A mais pas d’une partition de type B.

Tableau 1: Recommended actions when partition loss is detected.

Flexible Macroblock Ordering

L'encodeur H.264 groupe intelligemment des macroblocs dans une slice dont la taille est moins que (ou égale à ) la taille du MTU. Ici, le MTU représente la plus grande taille d'un paquet qui peut être transporté par des réseaux sans fragmentation. La prédiction au-delà des limites d’une slice est interdite pour empêcher la propagation d'erreur de prédictions des prédictions d’images Intra. La stratégie de structuration des slices vise ainsi à éviter la propagation d'erreur d'un paquet corrompu aux paquets suivants. Le FMO permet d’assigner les macroblocs aux slices dans un ordre différent du parcourt classique. Dans notre cas, nous avons choisi le mode échiquier en spécifiant deux groupes de slices comme le montre la figure 1.

Figure 1: A picture with a size of 6x4 MBs and two slice groups. The shaded MBs belong to slice group 0, the white MBs to slice group 1. Obviously, when losing one of the two slice groups, each lost (inner) MB has four neighboring MBs which can be used to conceal the lost information.

Simulateur de perte de paquet

Le système actuel

Nous avons un premier simulateur développé par Guo Yi qui permet de simuler des pertes non pas de paquet mais de NAL à partir de vidéo AVC/SVC. Le premier inconvénient de ce simulateur est bien sûr qu’il n’est pas capable de lire de vidéos au format RTP, mais également que les pertes se font à partir d’un fichier indiquant les moments de suppression.

Le second simulateur fournit avec le codeur de référence, prend lui des vidéos qui sont encapsulées dans un format RTP. C’est donc à partir de celui-ci que nous développons une méthode simulation de perte.

Le format RTP

Chaque NALU est encapsulée dans un paquet RTP. D’après la documentation officielle, il n’est possible d’avoir qu’une seule NALU par paquet, mais également d’avoir une NAL qui soit coupée, elle se retrouverait alors dans plusieurs paquet RTP.

Figure 2 : Répartition des NAL par paquet RTP.

Dans un premier temps nous voulions analyser la NALU pour savoir son type, à savoir DPA, DPB et DPC. Cela afin de ne supprimer que les B et C qui affectent moins le décodage. Il s’est avéré beaucoup trop compliqué de d’analyser dans un premier temps l’en-tête du paquet RTP pour localiser l’en-tête de la NALU pour savoir de quel type elle est.

Finalement, nous nous intéressons pas aux types des NALU. Nous nous contenterons de supprimer au hasard des paquets une fois un certain nombre de paquets essentiels passés.

Les modifications

Le simulateur doit prendre comme paramètre :

- Fichier d’entrée

- Fichier de sortie

- Nombre de NAL que l’on sans perte au début de la vidéo

- Nombre de NAL à supprimer

- Nombre de NAL par paquet

Pour connaitre le nombre de NAL et leur taille, nous pouvons utiliser le premier simulateur de Guo Yi. Pour connaitre la taille d’un paquet RTP, il est possible d’utiliser RTPDump du codeur de référence. Nous obtenons ainsi le nombre de NAL par paquet.

Principe de fonctionnement

Dans un premier temps, nous laissons passer un certain nombre de paquets (les paquets vitaux pour le décodage). Dans un second temps, pour les paquets suivants, si nous n’avons pas atteint le nombre de suppressions autorisées, grâce à un tirage aléatoire, nous choisissons ou non de garder le paquet RTP.

Conclusion

Pour pouvoir réaliser les tests de simulation, il est important d’assurer la compatibilité des systèmes d’encodage et de compression en gardant le même environnement. La collaboration a permis de séparer deux tâches qui se complètent, et ainsi de bien découper le projet. Le projet dans sa globalité comprenait une phase de tests subjectifs pour se rendre compte de la dégradation. Mais dans le cadre d’un mini projet, cette dernière phase n’était pas envisageable en tenant compte du temps d’encodage des vidéos.