MPEG-ES H.264-Video von RTP in MPEG-TS

8

Ich implementiere die ATSC-153-Spezifikation, die im Grunde ein H.264-Videoprofil in IP / UDP / RTP nach RFC 3984 ausstrahlt. Die Fragmente der Frames werden neu zusammengesetzt und größtenteils abgespielt auf dem eingebetteten Prozessor, mit dem ich arbeite, wenn auch mit etwas Korruption, die aus irgendeinem Grund auftritt, den ich versuche aufzuspüren. Ich versuche, dies in ein MPEG-TS zu kapseln, um es für einige Vergleiche auf Windows (VLC) zu rendern, und ich habe aus irgendeinem Grund Schwierigkeiten. VLC, TSReader und MPEG2Repair können das Video aus irgendeinem Grund nicht finden. Die Schritte, die ich mache, sind wie folgt, die für die SPS- oder PPS-H.264-Frames, die ich empfange, gleich sind.

  1. Erstellen Sie eine PAT / PMT, PMT PID 0x11, Videotyp ist 0x1b, Video PID ist 0x280 und PCR pid ist 0x1fff (kein PCR). Eigentlich habe ich das alle 15 Frames oder so.

  2. Ich füge dem Rahmen den Zugriffseinheits-Begrenzer, NAL-Nummer 9, bei. Ich denke, dass dies an alle H.264-Rahmen in einem Transport angehängt werden soll. Der primäre Bildtyp ist 1 (0x30 Byte), was dem I, P des Baseline-Profils entsprechen würde.

  3. Ich füge einen PES-Header-Rahmen an, der den PTS aus dem RTP-Header enthält.

  4. Ich füge den 4-Byte-TS-Header an. Zu Beginn des Frames habe ich das PUS-Bit gesetzt. Ich halte einen 4-Bit-Zähler für die Sequenz.

  5. Beliebige übriggebliebene Bytes, die nicht durch 184 teilbar sind, lege ich in ein TS-Paket mit einem Anpassungsfeld (Länge gesetzt, Flag-Byte auf 0 gesetzt) ​​aufgefüllt (oder gefüllt) mit den restlichen Bytes.

Ich stelle sicher, dass der Stream mit einem SPS-Frame beginnt. Nach meinem Verständnis (das vielleicht nicht zu groß ist) sollte dies ein aktuelles Bild enthalten. Die SPS-Rahmen sind 15 K Bytes oder so in dem Strom. Hier ist ein Dump des ersten TS-Pakets:

%Vor%

In dem obigen Paket beginnt der tatsächliche Videoframe, den ich erhalten habe, bei Offset 0x18. Alles davor habe ich hinzugefügt. Die 00 00 00 01 67 sollte SPS anzeigen.

Für den PPS-Rahmen, der typischerweise 3 KB bis 4 KByte ausführt, ist der folgende Dump:

%Vor%

Ich kann nur erwarten, dass ich an dieser Stelle etwas vermisse, das benötigt wird, etwas falsch gemacht habe, oder etwas mit der RF-3984-Neuanordnung ist so schrecklich schief gelaufen, dass die Decoder das nicht als Video erkennen.

Also fang ich an, die ersten zwei Fragen zu stellen. Gibt es etwas von den Spezifikationen, die ich vermisse? Habe ich das korrekt implementiert, wie von den Dumps aus gesehen?

Vielen Dank.

    
davroslyrad 15.12.2010, 23:39
quelle

1 Antwort

5

Nun, im Allgemeinen habe ich das herausgefunden. Das Problem war mit der PMT, von der ich keine Dump ablieferte. Die obigen Kapselungen sind korrekt. Sobald ich die PMT repariert habe, wird der Stream auf der Zieltafel abgespielt.

    
davroslyrad 28.12.2010 17:27
quelle

Tags und Links