PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Transportstrompakete anhand des sync_byte erkennen


FaceDisaster
29.01.2004, 10:23
Hallo zusammen,

ich versuche bestimmte Pakete aus einem DVB-Transportstrom zu fischen um diese dann weiterzuverarbeiten. Nun beginnt jedes TS-Paket mit dem sync_byte (Bitmuster: 0100 0111), damit einem Decoder beispielsweise der Beginn des TS-Pakets signalisiert wird. Aus diesem Grund soll sich dieses Muster nicht an anderer Stelle im TS-Paket wiederholen - wenn möglich.

So steht im Standard ISO/IEC 13818-1geschrieben:
sync_byte -- The sync_byte is a fixed 8 bit field whose value is '0100 0111' (0x47). Sync_byte emulation in the
choice of values for other regularly occuring fields, such as PID, should be avoided.

Ich habe nun folgendes Problem: bei meinen Versuchen die einzelnen TS-Pakete im Transportstrom zu erkennen, ist mir aufgefallen, dass das Muster 0x47 sehr wohl an anderer Stelle auftritt. Das kann in der Payload logischerweise auch nicht vermieden werden. Wie ist es dem Decoder aber möglich das sync_byte von dem Bitmuster 0x47 in der Payload zu unterscheiden? Vor allem, wenn er die Codierung zu dem Zeitpunkt beginnt, zu dem gerade die letzten Bytes eines TS-Paketes übertragen werden.

Ich habe auch schon an die Möglichkeit gedacht, nach dem ersten Auftreten von 0x47 zu schauen ob sich 188 Byte weiter im Transportstrom das Muster wiederholt (eine TS-Paketlänge). Aber wer sagt mir dann, ob ich wirklich synchron zu den Anfängen der Pakete abtaste oder nur ein byte der Payload mit dem Muster 0x47 erkenne, welches sich dummerweise im nächsten Paket an gleicher Stelle wiederholt?

Ich hoffe auf :idea: und freue mich sehr über Anregungen

Grüße

FaceDisaster

Derrick
29.01.2004, 16:28
Im receiver wird vieles hardwaremässig erledigt. Vom tuner führt ein 8bit breiter mpegbus zu den weiteren einheiten wie dem demuxer. Ausserdem sind noch steuersignale für das timing vorhanden. Damit wird z.b. auch das 1. byte eines ts-packets angezeigt.

In einer reinen softwarelösung ohne diese signale musst du eben auf dieses byte synchronisieren und solange verschieben, bis es stimmt. 0x47 kann sicher überall auftreten, nur darf das nicht regelmässig immer an derselben stelle sein.

FaceDisaster
30.01.2004, 13:04
Hallo Derrick,

vielen Dank für Deine Antwort. Habe ich Dich richtig verstanden, dass es bei einem Empfang eines DVB-S-Signal neben dem eigentlichen Transportstrom noch weitere Signale vom Satelliten aus ausgestrahlt werden? Wenn dem so ist und diese Signale unter anderen den Beginn eines neuen TS-Paketes signalisieren, bräuchte man denn dann noch ein sync_byte?

Vielleicht habe ich Dich da auch missverstanden, aber ich dachte, dass das die alleinige Aufgabe des sync_byte wäre.

Ich habe mir einen Transportstrom mit einem Hex-Viewer angesehen und anhand bekannter Daten (PID, table_id etc) die einzelnen TS-Pakete untereinander unterscheiden können. Dabei ist mir aufgefallen, dass ein sync_byte mit der Kennung 0x47 immer zu Beginn eines QWORD (vier Byte) steht. Bytes, die durch Zufall ebenfalls die Kennung 0x47 tragen, jedoch niemals. Das erste QWORD besteht dabei aus den ersten vier Bytes in TS-Datei, das nächste QWORD wiederum aus den nächsten vier Bytes usw. Ist das die Beobachtung eines Zufalls oder sogar die Regel, das sich die eingelesenen Bytes als QWORD betrachten lassen und sich das gesuchte sync_byte stets an erster Stelle befindet?

Gruß

FaceDisaster

Derrick
30.01.2004, 18:56
Zum letzten punkt.. lies die ISO13818-1. Ein TS-packet umfasst 188bytes wovon die ersten 4 der header sind (steht alles in der iso).

Nein, es werden keine zusätzlichen signale gesendet. Der tuner/demodulator gewinnt aus dem kanalkodierten datenstrom den transport stream (für dvb-s siehe EN 300 421 von ETSI)

FaceDisaster
02.02.2004, 14:41
Zum letzten punkt.. lies die ISO13818-1. Ein TS-packet umfasst 188bytes wovon die ersten 4 der header sind (steht alles in der iso).

Ich glaube hier liegt ein Missverständnis vor, denn die Länge eines TS-Paketes und die eines Headers ist mir soweit bekannt. Das liegt wahrscheinlich an meiner undeutlich formulierten Frage, die auf einer reinen Vermutung basiert. Deswegen belasse ich das mal dabei.

Nein, es werden keine zusätzlichen signale gesendet. Der tuner/demodulator gewinnt aus dem kanalkodierten datenstrom den transport stream (für dvb-s siehe EN 300 421 von ETSI)

Das hätte mich auch gewundert.