Und schon wieder muß ich mich selbst quotieren...
carsten hat geschrieben: ↑So 1. Aug 2021, 13:09
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:
Ich habe in libavcodec (Teil von ffmpeg) den Codeteil gefunden der die Datenelemente "überspringt". Mit einem Quick-Hack mit wenigen Zeilen habe ich jetzt vollen, fehlerfreien Zugriff auf den Ancillary Datenteil (aktuell macht mein Code nur "HexDump"
![Zwinkern ;-)](./images/smilies/icon_e_wink.gif)
).
Dieser Datenteil hat im AAC u.a. die Bezeichnung "Data Stream Element" ("DSE") und mit diesem Begriff findet man die entsprechenden Teile in der libavcodec die man anpassen muß. Der aufwendigste Teil der jetzt bevorsteht ist es die Zusatzdaten auf dem üblichen Weg der Library-Schnittstelle von libavcodec an eine Applikation bereitzustellen.
Sehr, sehr viele Frames enthalten nur 3 Byte Zusatzdaten, nämlich 0xbc 0xc0 0x00. Ansonsten finde ich nun fehlerfrei alle RDS Nachrichten z.B. bei NDR2 (hier mal nur Radiotext aus einem mp4 File das ich extrahiert habe).
Code: Alles auswählen
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 | .
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. ..
FE 00 00 0D 14 0A 00 00 10 00 53 6F 6D 65 20 73 | ..........Some s
61 79 20 2D 20 4E 65 61 0D F8 E4 FF | ay - Nea....
FE 00 00 8E 14 0A 00 00 10 00 53 6F 6D 65 20 73 | ..........Some s
61 79 20 2D 20 4E 65 61 0D F4 19 FF | ay - Nea....
Der Open-Source Weg ist also prinzipiell möglich. libavcodec muß aber angepasst und auch zum extrahieren der RDS Daten genutzt werden.
Der Wunsch einiger Leser des Forums ist auch gewahrt: Die Daten sind im Audiosignal "embedded" also "unverlierbar" (genau wie vorher im MPEG I/II).
Grüße,
Carsten