petgun hat geschrieben:
...
danke! Ich hoffe das wird keine Jagd auf ein Phantom und ist nicht nur mein eigenes hausgemachtes Problem mit ich Euch hier verrueckt mache
... scheint aber leider doch so zu sein.
Hier also mal zu Analyse auszugsweise zwei TS Pakte aus deinem Test-File (nur Video, das reicht schon)
Code: Alles auswählen
PACKET #243, sync_byte = 47
stream_id = E0 Video Stream 0, packet #213
100 - picture_start_code
109 - extension_start_code
PACKET #472, sync_byte = 47
stream_id = E0 Video Stream 0, packet #430 PTS = 373.333333 ms
in #243 starten mittendrin die Daten für ein neues Bild (100 - picture_start_code), aber das Paket enthält keinen PES-Startcode und 'pusi' (wohlgemerkt nur mit einem 's') ist nicht gesetzt, wie hier bei genauerer Betrachtungs des Inhaltes sichtbar wird:
Code: Alles auswählen
PACKET #243, sync_byte = 47
transport_error_indicator = 0
payload_unit_start_indicator = 0 <----- das ist pusi
transport_priority = 0
PID = 00E0
transport_error_indicator = 0
adaptation_field_control = 1
continuity_counter = 13
stream_id = E0 Video Stream 0, packet #213
read 184 PES packet data bytes
in #472 finden wird ein PES-Header, eindeutig Indiz dafür ist "PTS = 373.333333", aber es gibt kein neues Bild (auch wenn's eins gäbe würde das nichts an "bad" Packet #243 ändern.
Schauen wir auch hier geneauer hin:
Code: Alles auswählen
PACKET #472, sync_byte = 47
transport_error_indicator = 0
payload_unit_start_indicator = 1 <--- pusi
transport_priority = 0
PID = 00E0
transport_error_indicator = 0
adaptation_field_control = 1
continuity_counter = 6
stream_id = E0 Video Stream 0, packet #430
packet_length = 7906 <--- !!!!
10 = 2
PES_scrambling_control = 0
PES_priority = 0
data_alignment_indicator = 0
copyright = 0
original_or_copy = 1
PTS_DTS_flags = 2
ESCR_flag = 0
ES_rate_flag = 0
DSM_trick_mode_flag = 0
additional_copy_info_flag = 0
PES_CRC_flag = 0
PES_extension_flag = 0
PES_header_data_length = 5
PTS fields
0010 = 2
PTS[32..30] = 0
marker_bit = 1
PTS[29..15] = 1
marker_bit = 1
PTS[14..0] = 832
marker_bit = 1
read 170 PES packet data bytes
ja "pusi" könnte ok sein, wenn ein neues Bild (also ne neue payload starten würde).
Aber entscheidend problematisch ist 'packet_length = 7906' !
Bei der DBox und evtl. bei dem ein oder anderen Receiver können solche Paktete zu Rucklern führen, denn die TS-Stream sollten u.a. folgenden
Regeln entsprechen.
Die Daten zu jedem
einzelnen "picture" müssen in genau
einem PES-Paket eingepackt sein. Das kann dazu führen, daß die 'PES packet_length' größer ist als mit den dafür vorgesehen 16Bit darzustellen. Deshalb sollte sie auf 0 gesetzt werden !
Wenn nun ein solches PES-Paket wiederum in 188 Byte große TS-Pakte verpackt wird, muß das 1. betreffende TS-Paket 'pusi' auf 1 setzen und sein 'payload' mit dem PES-Startcode beginnen. Alle weiteren TS-Pakete enthalten dann den Rest der Bilddaten (bzw. die des PES-Paketes).
Kann dann das letzte TS-paket nicht mehr vollständig mit Daten gefüllt werden, muß es mit 'stuffing' aufgefüllt werden.
Die Analyse ergibt nun aber, daß einfach die Daten aller Bilder (auch elementary stream ES geannt) insgesamt gesehen in PES-Pakete bestimmter Größe z.B. 'packet_length = 7906' verpackt wurden, so daß durchaus
ein PES-Paket Daten von
zwei Bildern enthält (wie bei #243, wo halt mittendrin, und ohne PES-startcode, ohne 'pusi', ...)
Oder ein neues PES-Paket beginnt, aber es enthält nicht unbeding gleich am Anfang ein picture-startcode ...
Ich glaub kaum, daß jetzt noch alle mitkommen und ich will mir auch nicht noch mehr einen abbrechen, es zu beschreiben. Deshalb hier nur nochmal ein
Original Paket von der DBox zum Vergleich:
Code: Alles auswählen
PACKET #62, sync_byte = 47
transport_error_indicator = 0
payload_unit_start_indicator = 1 <--- gut
transport_priority = 0
PID = 06FF
transport_error_indicator = 0
adaptation_field_control = 3
continuity_counter = 8
adaptation_field_length = 7
discontinuity_indicator = 0
random_access_indicator = 0
elementary_stream_priority_indicator = 0
PCR_flag = 1
OPCR_flag = 0
splicing_point_flag = 0
transport_private_data_flag = 0
adaptation_field_extension_flag = 0
PCR fields:
PCR[32..30] = 3
PCR[29..15] = 11741
PCR[14..0] = 24414
0x3F = 3F
PCR_extension = 264
stream_id = E0 Video Stream 0, packet #53
packet_length = 0 <--- prima
10 = 2
PES_scrambling_control = 0
PES_priority = 0
data_alignment_indicator = 1
copyright = 0
original_or_copy = 0
PTS_DTS_flags = 2
ESCR_flag = 0
ES_rate_flag = 0
DSM_trick_mode_flag = 0
additional_copy_info_flag = 0
PES_CRC_flag = 0
PES_extension_flag = 0
PES_header_data_length = 19
PTS fields
0010 = 2
PTS[32..30] = 3
marker_bit = 1
PTS[29..15] = 11742
marker_bit = 1
PTS[14..0] = 16476
marker_bit = 1
read 14 stuffing bytes (<--- das hat nix mit TS-stuffing zu tun)
read 148 PES packet data bytes
Ich hoffe jetzt wird Einigen die Komplexität etwas klarer vor allem, daß nicht jeder Ruckler durch zu kleine Puffer o.ä. verursacht werden.
Und andere Player stören sich halt nicht an solchen "Lapalien" und spielen es klaglos ab. Deshalb muß ich immer
, wenn es heißt:
"auf meinem PC wird der Film aber einwandfrei abgespielt" !
- GMo -