Hallo...
hab mich in meiner verzweifelten Suche hier registriert... bei mir werden ebenfalls keine mixed WAV Files erzeugt (d.h. g711_decoder.py schreibt zwar zwei separate .WAV, aber eben kein zusammengemischtes aus WAV-File 0 und WAV-File 1.
Weiss
IRGEND JEMAND hier eine Lösung, oder kann mir was raten? Ich hab keine Ahnung von Python, geschweige denn, wie man sowas debugged...
Sofern ich die g711_decoder.py modifiziere mit einem zusätzlichen Eintrag:
{'len': 246, 'chunk': 160, 'offs': 86, 'encap' : 'DSLPPPoE' }, # DSL (PPPoE)
werden zumindest mal die wav-Dateien erzeugt.
Sehr leider nicht die mix_...wav, aber zumindest mal einzelne Files mit Inhalt.
Bez. dieser Convertierung hab ich selbst schon tagelang rumgesucht und bin vor allem immer am 'Fach-Chinesisch' gescheitert, daher erklär ich meine abschließende Herangehensweise so simpel wie möglich (für Noobs wie mich halt):
Wenn ein .CAP File erzeugt wird, aber KEINE .WAV Files, dann liegt das vermutlich daran, dass die RTP-Pakete / Daten eine Länge haben, die in der g711_decoder.py unbekannt sind. Die simpelste Lösung für mich war wie folgt:
Ladet euch WireShark Portable herunter und installiert es ('richtiger' Install ist nicht nötig, das Ding ist eh nur was für echte Profis). Hinweis: die Portable Version lässt sich nicht unter 'Programme' installieren, da halt 'Portable'.
Startet WireShark und öffnet euer .CAP File (Datei - Öffnen - .CAP File auswählen).
Im oberen Bereich seht ihr dann einen Haufen hellblau unterlegter Zeilen. Scrollt so weit runter, bis ihr in der Spalte 'Protocol' nur noch 'RTP' seht. Das sind die Pakete, die der Decoder erkennen können muss. Dazu braucht er drei Werte: PacketLength, AudioChunkLength und Offset of Audio Data.
Gleich rechts neben der 'Protocol'-Spalte ist die Spalte 'Length'. Das ist die PacketLength.
Wählt eine der RTP-Zeilen aus, indem ihr mit der Maus draufklickt. Öffnet dann im mittleren Fenster 'Real-Time Transport Protocol' und wählt dort 'Payload'. Das, was jetzt unten blau hinterlegt wird, sollten die Audio-Daten sein (oder geht einfach mit der Maus im unteren Fenster über die Byte-Werte, bis ein großer Block blau hinterlegt wird, der bis zum Ende des Datensatzes reicht).
Die Anzahl Bytes im markierten Teil ist die AudioChunkLength, die Anzahl Bytes im nicht-markierten Teil ist der 'Offset'.
Bei mir war es z.B. eine Packet-Length von 256, ein Offset von 96 (5 Zeilen a 16 Byte), und ein Audio-Chunk von 160 Byte (256 minus 96).
Dann öffnet man die g711_decoder.py (ACHTUNG: Unix-kompatiblen Editor nutzen, z.B. Notepad++) und fügt wo die 'lenmap'-Definitionen sind (aktuell ab Zeile 45) eine zusätzliche Zeile mit den ermittelten Werten ein, bei mir war das
{'len': 256, 'chunk': 160, 'offs': 96, 'encap' : 'WHATEVER' },
Was man bei 'Descriptive Text' schreibt ist egal (ich hab da WHATEVER geschrieben, da ich keine Ahnung habe, was das jetzt speziell für Pakete sind)...
Danach sollten (hoffentlich) korrekte .WAV Files erzeugt werden.
Wer seine .CAP Files mit WireShark testen / mal reinhören möchte:
Telephonie - RTP - Stream auswählen, auf 'Analysieren' klicken, auf 'Streams abspielen' klicken, dann unten links auf den 'Play'-Button, und man sollte hoffentlich was hören.
Ja... klingt alles so simpel, aber ich hab dafür ECHT lang rumgesucht. Daher hab ich's hier noch mal zusammengefasst, für all die, die ne Sache einfach nur nutzen wollen, ohne vorher groß Kurse über Python, WireShark und Netzwerkprotokolle zu absolvieren.