Springe zum Inhalt

FreeSwitch auf Raspberry Pi 2: Incompatible Destination

Nach der Installation von FusionPBX auf einem Raspberry Pi 2 entsprechend der Anleitung und dem Einrichten einer Extension über die Weboberfläche von FusionPBX kann sich das erste Gerät mit FreeSwitch verbinden. Beim ersten Anruf erhält man allerdings folgende Hinweis- und Fehlermeldungen:

Audio Codec Compare [SILK:99:24000:20:0:1]/[G722:9:8000:20:64000:1]
Audio Codec Compare [SILK:99:24000:20:0:1]/[PCMU:0:8000:20:64000:1]
Audio Codec Compare [SILK:99:24000:20:0:1]/[PCMA:8:8000:20:64000:1]
Audio Codec Compare [SILK:99:24000:20:0:1]/[GSM:3:8000:20:13200:1]
Audio Codec Compare [PCMU:0:8000:30:32000:1]/[G722:9:8000:20:64000:1]
Audio Codec Compare [PCMU:0:8000:30:32000:1]/[PCMU:0:8000:20:64000:1]
Audio Codec Compare [PCMU:0:8000:30:32000:1]/[PCMA:8:8000:20:64000:1]
Audio Codec Compare [PCMU:0:8000:30:32000:1]/[GSM:3:8000:20:13200:1]
Audio Codec Compare [PCMA:8:8000:30:32000:1]/[G722:9:8000:20:64000:1]
Audio Codec Compare [PCMA:8:8000:30:32000:1]/[PCMU:0:8000:20:64000:1]
Audio Codec Compare [PCMA:8:8000:30:32000:1]/[PCMA:8:8000:20:64000:1]
Audio Codec Compare [PCMA:8:8000:30:32000:1]/[GSM:3:8000:20:13200:1]
...
Hangup sofia/internal/1000@xxx.xxx.xxx [CS_NEW] [INCOMPATIBLE_DESTINATION]

Es konnte kein kompatibler Codec für beide Geräte (SIP-Telefon und FreeSwitch) gefunden werden.

Grund dafür ist, dass der unter Debian Wheezy (auf dem Raspbian aktuell basiert) GCC 4.6 als Standard-Compiler verwendet und GCC 4.6 auf der ARM-Plattform FreeSwitch falsch übersetzt. quentusrex hat den Fehler umfangreich analysiert und dokumentiert und bereits Bugreports erstellt.

Abhilfe schafft erst GCC 4.7. Mit folgenden Kommandos wird GCC 4.7 auf dem Raspberry Pi 2 installiert und als Default-Compiler eingerichtet. Beim letzten Kommando erscheint eine Auswahl, in der 4.7 als Default gewählt werden kann (Quelle).

$ sudo apt-get install gcc-4.7 g++-4.7
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7
$ sudo update-alternatives --config gcc

Anschließend muss natürlich FreeSwitch noch einmal kompiliert werden. Danach jedoch funktioniert die Codec-Auswahl korrekt.