advtaco hat geschrieben: ↑Mo 12. Jul 2021, 00:10
Dann ist hier trotzdem mal das Beispiel, in C.
Beisteuern muss man die Funktionen getAacFrame() und processAncDataFrame().
getAacFrame() soll hierbei genau 1 AAC-Frame in den Buffer kopieren (Die Funktion loasReadFrameLength kann einem helfen, die Laenge eines solchen Frames herauszufinden)
processAncDataFrame() wird aufgerufen, wenn es Daten gibt, deren Inhalte muessen dann vom Nutzer in einen anderen Buffer kopiert werden
Danke für das Beispiel. Ich habe mir mal die Library übersetzt, an meinen Code angeflanscht und festgestellt daß die Library ganz schön zickig ist
.
Als Test-Radioprogramm nehme ich aktuell NDR2. Man muß immer den Inhalt von 2 PES Frames aneinanderhängen (habe ich durch probieren rausgefunden), damit die Dekoder-Library nicht jedes Frame mit AAC_DEC_NOT_ENOUGH_BITS beantwortet. Mit zwei Frames aneinander werden bei mir viele((!) bei weitem nicht alle) Frames erfolgreich dekodiert und auch RDS Daten herausgezogen. Hier wurden RDS - Radiotextnachrichten schon richtig von meinem Code verarbeitet und zusammengezogen:
Code: Alles auswählen
[...]
--- ANCILLARY DATA ---
FE 00 00 6B 19 0A 00 00 15 00 4E 44 52 20 32 20 | ...k......NDR 2
2D 20 6E 64 72 2E 64 65 2F 6E 64 72 32 0D A8 20 | - ndr.de/ndr2..
FF | .
[Sun Aug 01 12:26:47.995696 2021] [ts2shout:info] [pid 22917] RDS: RDS data found, using RDS instead of EIT.
[Sun Aug 01 12:26:47.995713 2021] [ts2shout:info] [pid 22917] RDS (26 s): NDR 2 - ndr.de/ndr2
[...]
--- ANCILLARY DATA ---
BC C0 00 | ...
--- ANCILLARY DATA ---
FE 00 00 88 14 0A 00 00 10 01 53 6F 6D 65 20 73 | ..........Some s
61 79 20 2D 20 4E 65 61 0D 20 CC FF | ay - Nea. ..
[Sun Aug 01 12:26:50.166348 2021] [ts2shout:info] [pid 22917] RDS (40 s): NDR 2 - ndr.de/ndr2 Some say - Nea
Das ist noch nicht rund, ich verstehe die vielen Fehler beim Dekodieren noch nicht, und insbesondere möchte ich das ganze natürlich gegen die LGPL libavcodec laufen haben. Die RDS-Nutzdaten sind offensichtlich komprimiert im AAC Frame eingebaut.
Das gleiche Bild im wesentlichen bei Bayern 3. Teilweise sind mehrere RDS Frames in einem AAC Audioframe aneinandergehängt enthalten.
Interessanterweise kann der exakt identische Code kein einziges ts-Frame von SWR1 Audiodekodieren.
Grüße,
Carsten