Weil es thematisch nicht zu dem bisherigen Thread dazupasst hier in einem extra Thema. Ich dekodiere Radio schon seit längerem mit Open-Source-Software und u.a. selbergeschriebenem Code um das EPG bzw. Radiotext wohnzimmertauglich darzustellen ( http://www.siski.de/~carsten/squeezebox.html )
Ich hatte bis jetzt immer noch Probleme mit dem Audio (Unterbrechungen) auf dem neuen ARD Transponder , welches ich aber z.B. anhand von Radio-Tehran nicht nachvollziehen kann. Mein Test-Radio-Programm ist SWR2 und 3 auf der 11053 MHz.
Ich habe mal tiefer ins MPEG Signal reingeschaut und habe die Vermutung das es evtl. einen Bug in der Signalerzeugung gibt:
Ganz grob zusammengefasst: Bei MPEG-Transport werden die einzelnen Datenströme in 188 Byte große Pakete gepackt, diese Pakete bekommen einen "Kenner" ("0x47"), jeweils eine eindeutige "PID" (programm-id) und werden einfach gemultiplext, d.h. (scheinbar) wild durcheinandergewürfelt werden EPG, die Audiodaten und verschiedene Verwaltungsinformationen nacheinander gesendet, so das alles mal dran ist. Die Audiodaten selbst sind wiederrum selbst größere Pakete (z.B. mp1/2 2888 Byte, aac-latm wechselnd, so ca. 1000 Byte) die auf mehrere MPEG-TS-Frames verteilt sind. Das jeweils letzte MPEG-TS Frame eines Audiopaketes bildet quasi ein Abschlußframe und wird mit einem sog Adaptation-Field mit "0xff" aufgefüllt. so daß ein Audiopaket immer vollständig in mehrere MPEG Frames hereinpasst.
Bei der neuen ARD Übertragung kommt es vor, das nach so einem Abschlußframe noch ein *weiteres* hinterherkommt, welches im wesentlichen aus einem Adaption-Field besteht welches das Frame fast ausfüllt, u.a. ein "Presentation-Timestamp" enthält und noch scheinbar ein paar Byte Nutzdaten enthält. Diese gehören aber nicht zur Übertragung dazu, sondern sind ... IMHO quatsch. Diese Bytes sind auch nicht Bestandteil der Audiodaten sondern MÜSSEN weggeworfen werden.
Sowas tritt ca. alle 5000 ~ 10000 MPEG Frames auf, d.h. alle ca. 1 ~ 2 MB Transportstrom. Ich schreibe das aktuell ins Logfile weg (hier mal SWR2).
Code: Alles auswählen
[Tue Jul 06 23:18:22.530057 2021] [ts2shout:info] [pid 14362] init_structures(): Subscribing to MPEG-TS PID 0, 17, 18 (CHANNEL_TYPE_PAT, CHANNEL_TYPE_SDT, CHANNEL_TYPE_EIT)
[Tue Jul 06 23:18:22.530198 2021] [ts2shout:info] [pid 14362] ts2shout version v0.93-4-g32c2b25 compiled 06.07.2021 22:36 started
[Tue Jul 06 23:18:22.530222 2021] [ts2shout:info] [pid 14362] MPEG streaming with shoutcast StreamTitles in CGI mode with RDS support.
[Tue Jul 06 23:18:22.534314 2021] [ts2shout:info] [pid 14362] fetch_cached_parameters(): found parameters for programme neu_SWR2
[Tue Jul 06 23:18:22.689113 2021] [ts2shout:info] [pid 14359] SDT: Stream is station SWR2 from network ARD SWR.
[Tue Jul 06 23:18:22.789504 2021] [ts2shout:info] [pid 14362] add_channel(): Subscribing to MPEG-TS PID 520 (Type CHANNEL_TYPE_PMT)
[Tue Jul 06 23:18:22.789546 2021] [ts2shout:info] [pid 14362] extract_pat_payload(): Added 1 possible PMT id(s) with transport_stream_id: 1039.
[Tue Jul 06 23:18:22.789793 2021] [ts2shout:info] [pid 14359] curl_download: Terminated after fetching 0.07 MB and writing 0.02 MB. Exiting.
[Tue Jul 06 23:18:22.969763 2021] [ts2shout:info] [pid 14362] add_payload_from_pmt(): Audio `AAC profile, Level 4'
[Tue Jul 06 23:18:22.969804 2021] [ts2shout:info] [pid 14362] add_payload_from_pmt(): stream language `deu'
[Tue Jul 06 23:18:22.969812 2021] [ts2shout:info] [pid 14362] add_payload_from_pmt(): Found HE-AAC audio stream in PID 521 (service_id 10442)
[Tue Jul 06 23:18:22.969820 2021] [ts2shout:info] [pid 14362] add_channel(): Subscribing to MPEG-TS PID 521 (Type CHANNEL_TYPE_PAYLOAD)
[Tue Jul 06 23:18:23.069068 2021] [ts2shout:info] [pid 14362] Synced to HE-AAC, Guessed Samplerate 48000 Hz, Bitrate 256 kBit/s
[Tue Jul 06 23:18:23.410780 2021] [ts2shout:info] [pid 14362] EIT: Current transmission `Probebetrieb bis 20.07.2021'
[Tue Jul 06 23:18:24.330151 2021] [ts2shout:info] [pid 14362] SDT: Stream is station SWR2 from network ARD SWR.
[Tue Jul 06 23:18:31.548921 2021] [ts2shout:info] [pid 14362] extract_pes_payload: Frame#3927 chan->pes_remaining (0) < es_len (9)!
[Tue Jul 06 23:18:52.429047 2021] [ts2shout:info] [pid 14362] extract_pes_payload: Frame#13115 chan->pes_remaining (0) < es_len (9)!
[Tue Jul 06 23:19:04.570026 2021] [ts2shout:info] [pid 14362] extract_pes_payload: Frame#18467 chan->pes_remaining (0) < es_len (9)!
[Tue Jul 06 23:19:14.629037 2021] [ts2shout:info] [pid 14362] extract_pes_payload: Frame#22859 chan->pes_remaining (0) < es_len (9)!
[Tue Jul 06 23:19:40.649285 2021] [ts2shout:info] [pid 14362] extract_pes_payload: Frame#34275 chan->pes_remaining (0) < es_len (9)!
[Tue Jul 06 23:19:41.709383 2021] [ts2shout:info] [pid 14362] extract_pes_payload: Frame#34714 chan->pes_remaining (0) < es_len (9)!
Formal kann man die Daten sauber wegrechnen. Schön ist aber anders.
Grüße,
Carsten