2010-12-15 143 views
8

Je suis en train d'implémenter la spécification ATSC-153, qui diffuse essentiellement un profil vidéo de base H.264 en IP/UDP/RTP selon RFC 3984. Les fragments de Les images sont en train d'être réassemblées, et la plupart du temps, elles jouent sur le processeur embarqué avec lequel je travaille, mais avec une certaine corruption qui se produit pour une raison que j'essaie de retracer. J'essaye de l'encapsuler dans un MPEG-TS afin de le rendre sur Windows (VLC) pour une comparaison, et j'ai des difficultés pour une raison quelconque. VLC, TSReader et MPEG2Repair ne peuvent pas trouver la vidéo pour une raison quelconque. Les étapes que je suis en train de faire sont les suivantes, qui sont les mêmes pour les trames SPS ou PPS H.264 que je reçois.Vidéo MPEG-ES H.264 de RTP vers MPEG-TS

  1. Créer une PAT/PMT, PMT PID 0x11, type de vidéo est 0x1b, PID vidéo est le port 0x280, et pid PCR est 0x1FFF (pas d'pcr). En fait, je passe par là dans toutes les 15 images ou plus. Je joins à la trame le délimiteur d'unité d'accès, NAL numéro 9. Je pense que ceci est censé être ajouté à toutes les trames H.264 dans un transport. Le type de pic principal est 1 (0x30 octet), ce qui correspondrait à l'I, P du profil de base.

  2. Je joins à cela une trame d'en-tête PES, qui a le PTS de l'en-tête RTP.

  3. J'ajoute l'en-tête TS de 4 octets. Au début de la trame, je règle le bit PUS. Je garde un compteur de 4 bits pour la séquence.

  4. Tout octet laissé non divisible par 184, je mets dans un paquet TS avec un champ d'adaptation (ensemble de longueur, drapeau mis à 0) rembourré (ou bourré) pour les octets restants.

Je m'assure que le flux commence par une trame SPS. Pour ma compréhension (qui peut ne pas être génial), cela devrait contenir une image réelle. Les trames SPS sont 15K octets ou plus dans le flux. Voici une décharge du premier paquet TS:

000 47 42 80 15 00 00 01 E0 00 00 81 80 05 21 AA BB 
010 9A 91 00 00 00 01 09 30 00 00 00 01 67 42 C0 14 
020 9A 44 0D 0F 9F F8 00 08 00 08 04 00 00 00 01 68 
030 DE 24 88 00 00 00 01 E6 87 26 D6 AC FA 58 78 24 
040 0E EB B5 5B 02 AF 6C EB E1 E4 9F 35 BD 61 56 F8 
050 4A 4E 58 00 00 01 65 88 80 20 20 9E 1D 60 20 61 
060 15 D8 02 70 F9 29 C0 00 40 C6 23 3A 76 CA 78 9A 
070 4D 7D 79 C1 6E 94 3E A8 76 50 4B F7 B5 B0 40 2B 
080 52 48 93 B1 A2 4A 4F 3D 14 F1 B8 7E FA 98 91 FE 
090 DC EB 0F 11 BF EB D1 B8 E0 3F 5A C2 91 2D FA 83 
0A0 03 EF 51 10 18 D6 D4 77 90 78 97 D5 BF 94 61 6D 
0B0 69 53 AF 5B 42 FE D7 A3 9D 21 81 FC 

Dans le paquet ci-dessus, l'image vidéo réelle que j'ai reçu commence à l'offset 0x18. Tout avant cela j'ai ajouté. Le 00 00 00 01 67 doit indiquer SPS.

Pour le cadre PPS, qui généralement exécuté 3Kbytes à 4 Ko, ce qui suit est la décharge de celui-ci:

000 47 42 80 19 00 00 01 E0 00 00 81 80 05 21 AA BB 
010 F8 51 00 00 00 01 09 30 00 00 00 01 41 9A 01 05 
020 0F FF F4 3D FE 9B 0F 5E BE 18 15 20 00 50 0D 51 
030 58 32 47 F5 E7 86 1B 43 A6 FC F5 CA 64 A6 7F CF 
040 CB 94 C8 1F F2 FF 51 F7 7D DD DF 51 97 C7 C2 97 
050 77 77 77 BB B4 8B E9 B8 F9 70 D7 75 7A FF D8 64 
060 E8 C1 CE 06 83 58 20 24 00 06 66 70 BC DB C3 8D 
070 8E 6D FC 8C 5D EE 0D CC 63 61 13 BB F3 0F 0D 9F 
080 28 82 54 E4 A2 1C 21 55 BF F3 C1 86 7D 90 47 52 
090 5F C2 C6 E2 A7 3B 5E E0 A1 5B A2 C3 24 05 97 17 
0A0 A1 B2 04 22 78 F0 6F 0C DA 85 DC 7C E3 69 85 2B 
0B0 AC 02 02 01 9C 5B 11 DC B5 85 44 CE 

Je ne peux attendre à ce moment je manque quelque chose qui est nécessaire, je l'ai fait quelque chose incorrectement, ou quelque chose avec le réassemblage RFC 3984 se passe horriblement mal tellement que les décodeurs ne reconnaissent pas cela comme une vidéo. Donc, je vais commencer par poser les deux premières questions. Y a-t-il quelque chose des spécifications qui me manque? Ai-je mis en œuvre correctement comme vu des décharges?

Merci beaucoup.

+0

Beaucoup d'excuses pour les décharges, ils ne sont pas allés dedans comme je pensais qu'ils devraient. – davroslyrad

+0

Merci beaucoup osgx pour reformater ça pour moi. Je suis toujours très novice. – davroslyrad

Répondre

5

Eh bien, en général, j'ai compris cela. Le problème était avec le PMT, dont je n'ai pas fourni une décharge. Les encapsulations ci-dessus sont correctes. Une fois que j'ai réparé le PMT, le flux joue sur le plateau cible.