[Frage] ILBC für Asterisk auf dem Raspberry Pi

PsychoMantis

Aktives Mitglied
Mitglied seit
18 Dez 2005
Beiträge
2,538
Punkte für Reaktionen
9
Punkte
38
Vor einiger Zeit habe ich auf einem raspbian durch einfaches "apt-get install asterisk" Asterisk installiert. Nach der Konfiguration läut es seit dem auch stabil und ich bin zufrieden. Heute wollte ich ilbc-Codec benutzen. Nur finde ich nirgends die benötigte Datei "codec_ilbc.so". Normalerweise kann man weitere Module durch einfaches "apt-get install weiteres-asterisk-modul" installieren, aber dieser wird nicht angeboten.
Frage: wo finde ich die benötigte Datei? Bzw. Jemand hat ja mal asterisk kompiliert und irgendwo hochgeladen - nur deshalb kann ich es ja mit "apt-get" installieren. Wäre dieser Jemand vielleicht so freundlich und das Modul dort auch noch hochladen?
 
also ich hab gerade mal auf meinem Raspi nachgesehen. Das gibt es:
Code:
-rw-r--r-- 1 root root 9924 Aug 20  2019 /usr/lib/asterisk/modules/format_ilbc.so
-rw-r--r-- 1 root root 5516 Aug 20  2019 /usr/lib/asterisk/modules/res_format_attr_ilbc.so

ist aber vermutlich was anderes?
 
Moin


Nee, in der Asterisk Konsole: module show like codec_[TABTASTE]
Ergibt...
Code:
osmc*CLI> module show like codec_
codec_a_mu.so      codec_adpcm.so     codec_alaw.so      codec_amr.so       codec_g722.so      codec_g726.so      codec_gsm.so       codec_lpc10.so
codec_speex.so     codec_ulaw.so      codec_resample.so
osmc*CLI> module show like codec_
...denn nur die können auch hin und her konvertiert werden mit: file convert
Code:
osmc*CLI> file convert /tmp/weckruf.pcm /tmp/weckruf.g722
Converted /tmp/weckruf.pcm to /tmp/weckruf.g722 in 43ms

Hier gibts anscheinend noch den Sourcecode zum selberkompilieren...
 
Jenes Projekt auf GitHub ist (eigentlich) nur eine Änderung (Englisch: Patch) für das bereits bestehende iLBC-Modul. Um das anzuwenden – was auch nur für Asterisk 13 nötig ist, in Asterisk 16 ist iLBC 20 bereits enthalten – muss man Asterisk selbst neu bauen können.
Wo finde ich die Datei codec_ilbc.so?
Obwohl das eine Shared-Library ist, hängt sie stark von Deiner Plattform/Architektur/Version ab. Daher solltest Du die selbst bauen oder in einem Raspbian zentrierten Diskussionsforum fragen, ob die jemand für Dich baut. Bereits in Debian (worauf Raspbian ja beruht) wird dieses Modul nicht gebaut. Asterisk selbst bauen ist nicht so schwierig … wenn Du selbst baust, aktivierst dieses Modul über menuselect; wobei es von Haus aus an ist; Debian hat das absichtlich deaktiviert. Wenn Du Hilfe zum Selbstbauen brauchst, einfach fragen!

Du kannst Asterisk auch in einem eigenen Verzeichnis bauen und dann nur diese Datei einzeln rüber kopieren. Aber in dem Fall empfehle ich Dir, als Ausgangspunkt den selben Quellcode wie Debian bzw. Raspbian zu nehmen: asterisk (oben rechts wählst Du Deine Version buster, bullseye, … und unten wählst Du dann die Datei orig.tar.xz.

Aus reiner Neugier: Warum möchtest Du unbedingt iLBC 30?
 
Ich habe früher Asterisk nie über "apt-get" installiert, sondern immer selbst gebaut. Das war aber auf einem V-Server.
Wenn ich Asterisk auf dem Raspberry-Zero baue (auf dem es schon läuft) wird es ewig dauern, aber ich habe dennoch gerade angefangen.
ILBC30 will ich verwenden weil ich damit früher gute Erfahrungen gemacht habe falls es bei der Internetverbindung Paketverlust gibt.
Ich telefoniere hier über eine schwache LTE-Verbindung.

Nachtrag: Habe die .tar.xz-Datei runtergeladen, entpackt, "./configure" ausgeführt und mit "make menuconfig" nachgeschaut, dass ilbc ausgewählt ist.
Make bricht aber mit folgender Fehlermeldung ab:
Code:
   [AR] f2clib.o analys.o bsynz.o chanwr.o dcbias.o decode.o deemp.o difmag.o dyptrk.o encode.o energy.o ham84.o hp100.o invert.o irc2pc.o ivfilt.o lpcdec.o lpcenc.o lpcini.o lpfilt.o median.o mload.o onset.o pitsyn.o placea.o placev.o preemp.o prepro.o random.o rcchk.o synths.o tbdm.o voicin.o vparms.o -> liblpc10.a
make[2]: *** ilbc: No such file or directory.  Stop.
make[1]: *** [Makefile:79: ilbc] Error 2
make: *** [Makefile:383: codecs] Error 2
root@raspberrypi:/usr/src/asterisk-16.2.1#
 
Zuletzt bearbeitet:
Jepp, das dauert auf einem Raspberry … gerade noch mal nachgeschaut: Der original Quellcode bei Debian enthält bereits nicht den Ordner codecs/ilbc. Daher musst Du dessen Inhalt von der original Version rüber kopieren.

Wenn Du mit iLBC 30 gute Erfahrungen hast, würde ich Dir empfehlen, auch mal AMR auszuprobieren.
 
Ja, lässt sich kompilieren. Nun hatte ich die geniale Idee, ich kopiere einfach die neu gebaute codec_ilbc.so nach /usr/lib/asterisk/modules/ und lade es. Geht nicht:
Code:
Unable to load module codec_ilbc.so
Command 'module load codec_ilbc.so ' failed.
[Mar 17 19:00:08] ERROR[16035]: loader.c:170 module_load_error: Module 'codec_ilbc.so' was not compiled with the same compile-time options as this version of Asterisk.
[Mar 17 19:00:08] ERROR[16035]: loader.c:170 module_load_error: Module 'codec_ilbc.so' will not be initialized as it may cause instability.
[Mar 17 19:00:08] ERROR[16035]: loader.c:170 module_load_error: Module 'codec_ilbc.so' could not be loaded.
raspberrypi*CLI>
Nachtrag: Mit dem hier beschriebenen Trick geht es dann aber.
Bzgl. AMR - noch nie gehört. Können das die Fritzboxen?
 
  • Like
Reaktionen: sonyKatze
Moinsen


Letzteres steht in den erweiterten Supportdaten unter...
Code:
Codec list: G722/8000/1, PCMA/8000/1, PCMU/8000/1, G726-32/8000/1, G726-40/8000/1, G726-24/8000/1, iLBC/8000/1, PCMA/16000/1, PCMU/16000/1, CLEARMODE/8000/1

Danke für den Trick Tipp ;)
Habs mttels der 2. Methode hingekriegt.
Nach einen "make codecs" und anschliessenden kopieren der codec_ilbc.so ins modules Verzeichnis...
Code:
osmc*CLI> module load codec_ilbc.so
Loaded codec_ilbc.so
[Mar 17 20:40:37]   == Registered translator 'ilbctolin' from codec ilbc to slin, table cost, 900000, computational cost 12436
[Mar 17 20:40:37]   == Registered translator 'lintoilbc' from codec slin to ilbc, table cost, 600000, computational cost 86074
[Mar 17 20:40:37]  Loaded codec_ilbc.so => (iLBC Coder/Decoder)
osmc*CLI> file convert /tmp/weckruf.pcm /tmp/weckruf.ilbc
Converted /tmp/weckruf.pcm to /tmp/weckruf.ilbc in 606ms
 
Zuletzt bearbeitet:
Danke an alle beteiligten. Hier die fertige codec_ilbc.so - die müsste ja eigentlich nicht nur bei mir funktionieren.
Nachtrag: habe armbian auf einem Orange Pi Zero LTS installiert. Da geht "cgrep -Eao ..." nicht.
Habe dann einfach diese Datei ins /usr/lib/asterisk/modules/ reinkopiert. Habe das nicht erwartet, aber die geht.
 

Anhänge

  • codec_ilbc.so.zip
    178.8 KB · Aufrufe: 4
Zuletzt bearbeitet:
Moin


Habs mal versucht, war aber vorher schon sehr skeptisch.
Also, mit dieser codec_ilbc.so stürzt die Asteriskkonsole sofort bei mir ab und Asterisk wird neu gestartet bis es versucht den Codec zu laden, was zum Absturz führt.
Also eine endlose Start > Absturz Schleife.
Hast du die HEX ( 1. ) Methode gemacht?
Probier mal diese...
1. Aus einem installierten Modul die SUM abgreifen
Code:
cgrep -Eao "[0-9abcdef]{32}" /usr/lib/asterisk/modules/codec_g722.so                                                                   
fa819827cbff2ea35341af5458859233
8977d90d73471fd36ecc2270d205b8c9
( Es ist die Erste )
2. Ab damit in die: /usr/src/asterisk-13.32.0/include/asterisk/buildopts.h
Code:
/* Die vorhandene kommentieren...
#define AST_BUILDOPT_SUM "da6642af068ee5e6490c5b1d2cc1d238"
*/
#define AST_BUILDOPT_SUM "fa819827cbff2ea35341af5458859233"
( Hält bis zum nächsten "make menuselect" )
3. Und nuh: make codecs clean && make codecs
 
Zuletzt bearbeitet:
Exakt genauso wie du es beschrieben hast habe ich es auch gemacht.
 
Na, dann können, meiner bescheidenen Logik nach, mit dieser SUM erstellten Module nur auf dieser SUM zugrundeliegenden Installation lauffähig sein.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.