Opus auf Asterisk 16 nachrüsten: HiFi-Audio-Telefonate auf dem Raspberry Pi 3 B mit oder ohne Video-Telefonie

26. August 2025 (letzte Aktualisierung am 27.8.25)

Kostenlose Telefonate in perfekter Klangqualität. Das gibt es. Opus ist der moderne Audio-Codec für VoIP, der sowohl Sprache als auch Musik in hoher Qualität über das Internet überträgt. Auf einem älteren Raspberry Pi 3 B mit Asterisk 16 unter einem veralteten Raspbian mag die Einrichtung kompliziert wirken, aber mit ein paar gezielten Schritten lässt sich Opus nachrüsten – und schon können Softphones wie Linphone HiFi-Audio genießen, während ältere Telefone weiterhin G.711 mit stark reduzierter Bandbreite verwenden. In diesem Artikel zeige ich, wie ich Opus auf meinem Raspberry Pi aktiviert und getestet habe. Schließlich funktionierten dann auch noch Videotelefonate über meinen kleinen Asterisk-Server auf dem Raspberry Pi.

Jungefrautelefoniertopus
Kostenlose Telefonate mit perfekter Klangqualität. Das gibt es. Ein eigener Asterisk-Server auf einem Raspberry Pi erlaubt Telefonate in HiFi-Qualität. Normale öffentliche Telefonanbieter und die meisten Messengerdienste können dies in der Regel nicht leisten. Die Dame gibt es nicht in Wirklichkeit. Das Bild wurde mit Hilfe von ChatGPT erzeugt.

Asterisk 16 bringt eine solide Grundlage für IP-Telefonie, doch auf älteren Raspberry-Pi-Systemen fehlen oft aktuelle Codec-Module. Besonders Opus, der flexible und qualitativ hochwertige Audio-Codec, ist auf Raspbian Buster nicht standardmäßig verfügbar. Mein Ziel war es, Opus auf einem Raspberry Pi 3 B zum Laufen zu bringen, ohne das gesamte System auf ein aktuelles Raspbian umzuziehen. Dabei wollte ich nicht nur Telefonate in hoher Qualität zwischen Softphones ermöglichen, sondern auch die Kompatibilität zu älteren Geräten wie der Fritz!Box erhalten. In diesem Artikel dokumentiere ich Schritt für Schritt, wie ich Opus nachinstalliert, die Module geprüft und die Konfiguration für optimale Audioqualität eingerichtet habe.

ChatGPT hat mir auf die Sprünge geholfen: https://chatgpt.com/share/68ad78d9-9164-8013-9f3b-1c1662f10b61

SIP, IAX2, Video- und Audio-Codecs. Alles halb so wild:

      • SIP ist ein Protokoll, das nur den Ablauf steuert: Anrufen, Klingeln, Annehmen, Auflegen, Besetzt.

      • Es sagt also wer mit wem spricht, aber nicht wie der Ton oder das Bild übertragen wird.

      • Für den eigentlichen Ton braucht man Audio-Codecs (z. B. G.711 = Telefonqualität, Opus = sehr flexibel und gute Qualität, G.729 = spart Bandbreite).

      • Für das Bild nimmt man Video-Codecs (z. B. H.264 = Standard, VP8/VP9 = oft im Web, AV1 = moderner aber rechenintensiver).

      • Beide Gesprächspartner müssen mindestens einen gemeinsamen Codec unterstützen, sonst klappt es nicht.

      • Die Daten (Ton und Bild) laufen meist über RTP, also ein separates Transportprotokoll.

      • IAX2 ist eine Alternative zu SIP, wird vor allem von Asterisk genutzt und läuft besser durch Firewalls, aber ist weniger verbreitet.

      • Es gibt auch noch andere Protokolle (z. B. H.323 oder WebRTC), die ähnliche Aufgaben haben.

      • Grob gesagt: SIP = Sprache des Telefonprotokolls, Codecs = Sprache der eigentlichen Medieninhalte.

      • Man kann also SIP mit verschiedenen Codecs kombinieren, solange beide Seiten dieselben verstehen.

Bildschirmfoto zu 2025 08 27 08 10 24
SIP ist nur für die Steuerung des Telefonats wie Wählen, Auflegen, Besetzt, Abheben und so weiter zuständig. Darauf aufgesetzt sind die Codecs für die Video- und Audio-Übertragung.

Nachfolgend die Zusammenfassung, wie ich dann schließlich vorgegangen bin, da mein Raspbian-Betriebssystem auf meinem Raspberry Pi 3B veraltet ist und das Asterisk 16 ebenfalls:

Damit Opus in HiFi-Qualität läuft, habe ich folgendes in der codecs.inf von Asterisk eingetragen:

;============================ OPUS Section ============================
; Optimiert für Linphone / HiFi / Fullband
[opus]
type=opus
max_bandwidth=fullband       ; volle Bandbreite für HiFi
bitrate=64000                ; 64 kbps als Standard, VBR möglich
cbr=no                       ; Variable Bitrate aktiv
complexity=10                ; maximale Kodierkomplexität für beste Qualität
fec=yes                      ; Forward Error Correction aktiv
dtx=no                       ; Discontinuous Transmission deaktiviert (bessere Musikqualität)
signal=auto                  ; automatisch zwischen Sprache/Musik wählen
application=voip             ; Standard für VoIP-Telefonie
max_playback_rate=48000      ; 48 kHz, passt zu Linphone Fullband

;============================ OPTIONAL: Narrowband / low-bandwidth ============================
; Für langsame Verbindungen oder Clients, die Fullband nicht unterstützen
[opus-low]
type=opus
max_bandwidth=wide           ; nur Wideband
bitrate=32000
cbr=no
complexity=8
fec=yes
dtx=no
signal=voice
application=voip
max_playback_rate=16000

In der sip.conf von Asterisk unter [general] bekommt opus die höchste Prioritet:

disallow=all
allow=opus
allow=g722
allow=alaw
allow=ulaw
allow=gsm
allow=g729

Was fehlt, ist noch ein funktionsfähiges Opus auf meinem Asterisk:

raspberrypi*CLI> module show like codec_opus
Module                         Description                              Use Count  Status      Support Level
0 modules loaded
raspberrypi*CLI> module show like opus
Module                         Description                              Use Count  Status      Support Level
res_format_attr_opus.so        Opus Format Attribute Module             1          Running              core
1 modules loaded
raspberrypi*CLI>

Du hast nur res_format_attr_opus.so geladen (das ist die „Meta-Info“ über Opus),
aber der eigentliche Codec (codec_opus.so) fehlt bei Dir. Deshalb kannst Du im Moment noch kein Opus aushandeln oder benutzen – Asterisk kennt die Parameter, hat aber keinen Encoder/Decoder.

Warum fehlt das? Bei Asterisk 16 auf Raspberry Pi ist es oft so, dass die Distribution (Debian/Raspbian-Pakete) aus Lizenz-/Build-Gründen Opus nicht kompiliert hat. Standardmäßig kommen nur die freien Codecs (alaw, ulaw, gsm, g722) mit.

Lösung: Du musst das Opus-Codec-Modul für Asterisk installieren. Unter Debian/Raspberry Pi OS (je nach Version) geht das z. B. so:

sudo apt update
sudo apt install asterisk-opus

Danach prüfen, ob das Modul da ist:

ls /usr/lib/asterisk/modules/ | grep opus

Und das passierte dummerweise bei mir:

sudo apt install asterisk-opus
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Die folgenden Pakete wurden automatisch installiert und werden nicht mehr benötigt:
  libmicrodns0 python-colorzero rpi-eeprom-images
Verwenden Sie »sudo apt autoremove«, um sie zu entfernen.
Die folgenden zusätzlichen Pakete werden installiert:
  libopusfile0
Die folgenden NEUEN Pakete werden installiert:
  asterisk-opus libopusfile0
0 aktualisiert, 2 neu installiert, 0 zu entfernen und 330 nicht aktualisiert.
Es müssen 47,8 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 146 kB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n] J
Fehl:1 http://ftp.acc.umu.se/mirror/raspbian/raspbian buster/main armhf libopusfile0 armhf 0.9+20170913-1
  Verbindung fehlgeschlagen [IP: 194.71.11.165 80]
Holen:2 http://ftp.acc.umu.se/mirror/raspbian/raspbian buster/main armhf asterisk-opus armhf 13.7+20171009-2 [14,3 kB]
Es wurden 14,3 kB in 1 min 27 s geholt (164 B/s).
E: Fehlschlag beim Holen von http://ftp.acc.umu.se/mirror/raspbian/raspbian/pool/main/o/opusfile/libopusfile0_0.9+20170913-1_armhf.deb Verbindung fehlgeschlagen [IP: 194.71.11.165 80]
E: Einige Archive konnten nicht heruntergeladen werden; vielleicht »apt-get update« ausführen oder mit »--fix-missing« probieren?
pi@raspberrypi:~ $ 

Alles klar – das Problem ist also nicht Asterisk selbst, sondern dass Dein Raspberry Pi aus den alten Buster-Repos zieht und die Pakete dort auf dem Mirror nicht mehr sauber verfügbar sind. Das heißt: asterisk-opus + Abhängigkeit libopusfile0 können nicht geladen werden → deshalb kriegst Du kein codec_opus.so.

Lösung:

sudo apt-get update --fix-missing
sudo apt-get install asterisk-opus

Test:

pi@raspberrypi:~ $ ls /usr/lib/asterisk/modules/ | grep opus
codec_opus_open_source.so
format_ogg_opus_open_source.so
res_format_attr_opus.so
pi@raspberrypi:~ $ ls /usr/lib/asterisk/modules/ | grep opus
codec_opus_open_source.so
format_ogg_opus_open_source.so
res_format_attr_opus.so
pi@raspberrypi:~ $ 

Alles klar, das erklärt, warum Du kein codec_opus.so findest. Auf Deinem Raspberry Pi ist offenbar nicht der offizielle Digium/Schmooze‐Opus-Codec installiert, sondern die freie Open-Source-Implementierung.

Die Dateinamen verraten es:
codec_opus_open_source.so → das eigentliche Codec-Modul
format_ogg_opus_open_source.so → sorgt dafür, dass Asterisk auch OGG/Opus-Dateien abspielen/aufnehmen kann
res_format_attr_opus.so → stellt die Format-Attribute für Opus bereit (z. B. Bitrate, Bandbreite)

Für Dich heißt das: In der sip.conf oder pjsip.conf musst Du opus als Codec eintragen, nicht den Dateinamen. Asterisk lädt automatisch codec_opus_open_source.so, wenn Du allow=opus setzt.

Prüfen kannst Du das mit:

asterisk -rx "module show like opus"
asterisk -rx "core show codecs"
asterisk -rx "core show translation"

Normalerweise musst Du in der modules.conf gar nichts extra eintragen, wenn die Dateien schon unter /usr/lib/asterisk/modules/ liegen – Asterisk lädt die automatisch, sofern Du sie nicht explizit verbietest.

Damit alles Änderungen übernommen werden, reicht ein Neustart von Asterisk:

sudo systemctl restart asterisk

Prüfen, ob alle Opus-Module geladen sind:

raspberrypi*CLI> module show like opus
Module                         Description                              Use Count  Status      Support Level
codec_opus_open_source.so      Opus Coder/Decoder                       0          Running           unknown
format_ogg_opus_open_source.so OGG/Opus audio                           0          Running              core
res_format_attr_opus.so        Opus Format Attribute Module             1          Running              core
3 modules loaded
raspberrypi*CLI> 

Wunderbar! Alles in Ordnung.

Welches Endgerät soll ich verwenden? Das Endgerät muss Opus in der entsprechend hohen Übertragungsbandbreite unterstützen. Die FritzBoxen, die ich kenne, unterstützen kein Opus. Das Softphone PhonerLite unterstützt nur ein Opus mit niedriger Bandbreite.

Also blieb für mich nur Linphone übrig. Ich verwende es als Android Softphone auf meinem  Smartphone und auf Linux. Wichtig ist, dass Opus aktiviert ist.

Chatgpt image 26. aug. 2025, 18 14 01
Videotelefonate gelingen auch mit dem Asterisk-SIP-Server.

Video-Telefonate mit Softphones von Linphone: Das geht. Im Beispiel habe in der sip.conf nur vp8 aktiviert.

[general]
videosupport=yes


disallow=all
allow=opus
allow=g722
allow=alaw
allow=ulaw
allow=gsm
allow=g729
allow=vp8
; allow=h264
; allow=h261
; allow=h263
; allow=h263p

Dann müssen in den Softphones auch VP8 aktiviert sein. Wenn in einzelnen SIP-Accounts Codecs definiert sind, muss dort auch VP8 aktiviert sein. Das hatte ich vergessen und lange gesucht, obwohl ich hätte schneller darauf kommen müssen:

; Telefon 1034 auf meinem BlackView A80 Smartphone
[1034]
type=friend
context=janson
secret=xxxxxxxx
host=dynamic
username=1034
canreinvite=no
keepalive=60
dtmfmode=rfc2833
callerid = "Volker" <1034>
port=5064
disallow = all
allow = opus
allow = g722
allow = alaw
allow = ulaw
allow = vp8

Hier hatte ich nur „allow = vp8“ vergessen einzutragen und Videotelefonate funktionierten nicht. Einfacher Fehler. Lange Suche. Beginnende Demenz?

Bildschirmfoto zu 2025 08 26 18 57 44
Selbstversuch eines Videotelefonats über meinen Asteriskserver zwischen einem Android-Smartphone und einem Desktop-Rechner mit Ubuntu Mate 24.04. Beide Endgeräte sind Linphone-Softphones. Alles geht ruckelfrei und ohne Abstürze. Wunderbar!
Video telefonie mit linphon auf android smartphone
So präsentiert sich ein Video-Telefonat auf der Android-App von Linphone.
Linphone android audio video codecs
Die momentan genutzten Audio- und Video-Codecs kann man sich in Linphone anzeigen lassen. Die App verwendet tatsächlich Opus/48 kHz für Audio und VP8 für Video. Viel besser kann man es nicht machen.

Die Linphone-Softphones gibt es für Android im Google Playstore und für Linux als AppImage unter https://download.linphone.org/releases/linux/app/. Dort habe ich die Linphone 5.3.0.AppImage heruntergeladen. Eine Installation ist nicht notwendig. Eine AppImage enthält alle notwendigen Quellen in einer einzigen Datei, die nur ausführbar gemacht werden muss. Linphone ist kostenlos und werbefrei. Aber die Bedienung ist eine harte Nuss.

Und so begann mein Linphone-Drama, das mit einem Happy End seinen Abschluss fand:

Linphoneubuntuinstallieren150px
Linphone unter Linux: Offenbar das Ergebnis jahrelanger Verschlimmbesserungen mit vielen Bugs. Nur Eingeweihte blicken bei der Konfiguration noch durch.
Video-Calls unter Linux: mein Weg durch das Chaos und wie du auf meinen Asterisk-Server kommst – 17. August 2025: Wer denkt, Video-Telefonie unter Linux sei ein Kinderspiel, liegt daneben. Zwischen instabilen Programmen, überforderten Notebooks und kryptischen Menüs habe ich so ziemlich alles ausprobiert, was der Markt hergibt. Am Ende stand ich kurz davor, die Webcam aus dem Fenster zu werfen – bis ich das Linphone-AppImage entdeckt habe. – weiter