Video-Telefonie mit Asterisk

27. September 2021 (Nachtrag vom 29. 9. 21)

Der kleine SIP-Server auf der Basis eines Raspberry Pi und Asterisk ist sogar in der Lage zusätzlich Video-Telefonate zu bewältigen. Dazu sind nur wenige Zeilen in der sip.conf hinzuzufügen. Ein Video-Telefonat belastet die CPU des Raspberry Pi 3 B+ mit etwa 5 bis 6%. Getestet habe ich die Konfiguration wieder auf Asterisk 16.2.1. Die Bildqualität ist je nach gewählter Bandbreite und Kamera hervorragend und übertrifft die der mir bekannten Messenger-Dienste. Abgesehen davon möchte ich nicht mehr von bestimmten externen Anbietern abhängig sein, von denen ich nicht weiß, wie sie meine Daten verwerten.

Die vollständige Beschreibung meines Asterisk-SIP-Servers befindet sich auf https://elektronikbasteln.pl7.de/eine-einfache-asterisk-konfiguration-fuer-einen-sip-server-als-telefonanlage.

Die Installation von Asterisk auf einem Raspberry Pi ist unter https://elektronikbasteln.pl7.de/asterisk-und-fail2ban-auf-dem-raspberry-pi beschrieben.

Sip.conf für Video-Telefonate ergänzen: Um auf  Asterisk die Videotelefonie einzurichten, müssen wir nur in der sip.conf ein paar weitere Zeilen eintragen und mehr nicht. Voraussetzung ist, dass die normale Audio-Telefonie bereits einwandfrei klappt:

; Ausschnitt aus der sip.conf für Video-Support
; getestet auf Asterisk 16.2.1 am 24.9.21
; um SIP auf auf Video "scharfzustellen" müssen wir die
; sip.conf um ein paar Einträge [general] ergänzen.
; Alles, was für Video-Telefonie hinzugefügt wurde,
; ist mit NEU kommentiert.
;
[general]
videosupport=yes     ; NEU muss auf yes stehen
                     ; NEU alle Telefon-Accounts können
                     ; NEU Video-Telefonate durchführen,
                     ; NEU falls die Endgeräte dies unterstützen.
port=5064
bindport=5064
context=telefone
bindaddr=0.0.0.0
allowguest=no
;
; Codecs
disallow=all
;
; Audio-Codecs
allow=alaw         
allow=ulaw
allow=gsm
allow=g722
;
; Video-Codecs    NEU Asterisk nimmt keine Transkodierung der Videoformate vor.
                ; NEU ähnlich wie bei den Audio-Codecs, müssen wir die Video-Codecs
                ; NEU eintragen, die verwendet werden dürfen.
allow=h264      ; NEU zwingend erforderlich, da die meisten Softphones h264 unterstützen.
allow=h261      ; NEU
allow=h263      ; NEU
allow=h263p     ; NEU
; allow=vp8     ; NEU wenn man will ... https://en.wikipedia.org/wiki/VP8
;
; ****** Type Of Service (TOS) Settings ******
; empfehlenswert, aber nicht zwingend notwendig
; https://www.voip-info.org/asterisk-sip-tos/
; http://qosasterisk.blogspot.com/2015/08/setting-tos-in-asterisk.html
; https://www.dialogic.com/webhelp/bordernet2020/2.0.0/webhelp/tossetting.htm
tos_sip=cs3    ; Sets TOS for SIP packets.
tos_audio=ef   ; Sets TOS for RTP audio packets.
tos_video=af41 ; Sets TOS for RTP video packets.  ; NEU
tos_text=af41  ; Sets TOS for RTP text packets.   ; NEU, eventuell NEU
;
; und nachfolgend geht es weiter wie gehabt.
;

Die Konfiguration der sip.conf ist wirklich ein Klacks. Der Knackpunkt sind die meist kostenlosen Softphones, welche auch Video unterstützen. Sie müssen richtig konfiguriert werden, damit die Videotelefonie einwandfrei funktioniert

MicroSip: MicroSip ist ein kostenloses Softphone, das ich für die Video-Telefonate unter Windows 10 getestet habe. Es kommt mit einer einfachen und schlanken Oberfläche daher:

Bedienoberfläche MicroSip: Nach der Auswahl oder dem Eintippen der Zielnummer, können wir ein normales Telefonat einleiten, indem wir auf “Anrufen” kicken. Links vom Knopf “Anrufen” können wir ein Video-Telefonat einleiten, rechts von “Anrufen” starten wir das Verschicken einer Textnachricht.

Für die Installation unter Windows gehen wir auf https://www.microsip.org/downloads und laden uns von ganz oben das Programm herunter. Wir wählen die linke Version aus, die für Video geeignet ist. Rechts gibt es noch die Lite-Version, die kein Video kann. Die nehmen wir nicht:

Download von MicroSIP für Video-Telefonate unter Windows. Auf den umkreisten Link klicken und nicht auf irreführende Download-Buttons in Werbeanzeigen reinfallen.

Bevor wir nach dem Herunterladen die Installations-Exe-Datei ausführen, müssen wir sicherstellen, dass eine Videokamera bereits erfolgreich installiert und konfiguriert wurde. Diese sollte auch bei der Installation eingesteckt sein, damit sie während der Installation erkannt wird. Bei meinem Notebook war das ganz einfach, da mein Notebook bereits eine korrekt funktionierende Video-Kamera besitzt.

Bei der Installation werden wir aufgefordert die Firewall von Windows verändern zu lassen. Das müssen wir zulassen. Andernfalls klappt der Verbindungsaufbau und die Datenübertragung nicht.

Im nächsten Schritt sind die Account-Daten unter “Konto hinzufügen…” einzutragen:

Unter “Konto hinzufügen…” sind die Account-Daten einzutragen.
Konfiguration eines Accounts am Beispiel der Nummer 1009. Zu unterscheiden ist, ob sich der Rechner vor oder hinter dem Router des SIP-Servers befindet. Mehr dazu weiter unten im Text.

Fall 1, Rechner außerhalb des eigenen LANS:  Befindet sich der Rechner mit dem MicroSip-Softphone außerhalb des LANS, in welchem sich der SIP-Server befindet, sind die geschwärzten Stellen durch die öffentliche IP oder die DynDNS-Adresse des SIP-Servers zu ersetzen.  Da der SIP-Port bei meiner Konfiguration 5064 lautet, müssen wir diesen hinter einem Doppelpunkt ebenfalls eintragen. Angenommen die öffentliche IP (public IP) des Asterisk-Servers lautet rein fiktiv 94.288.26.123, dann müssen wir unter SIP-Server, SIP-Proxy und Domain 94.288.26.123:5064 eintragen. Der Rest ist dem Screenshot zu entnehmen. Den Anzeige- und Kontonamen passen wir natürlich individuell an. Unbedingt UDP und Auto auswählen. Ganz wichtig ist, dass “IP-Rückmeldung erlauben” und “ICE” angekreuzt sind. Andernfalls baut sich die Verbindung nicht auf oder es treten nach ein paar Sekunden Abbrüche auf.

Fall 2, Rechner innerhalb des eigenen LANs: In diesem Fall sind die geschwärzten Stellen durch die lokale IP des Asterisk-Servers zu ersetzen und dahinter kommt wieder mit Doppelpunkt eingeleitet der SIP-Port, also im Beispiel 5064. Die “IP-Rückmeldung” habe ich nicht aktiviert.

Video-Einstellungen: Unter Einstellungen lässt sich auf die Video-Übertragung konfigurieren. Nachfolgend der Bildausschnitt für die Video-Konfiguration:

Konfiguration für die Video-Übertragung, die man so übernehmen sollte. Die Video-Bitrate habe ich auf 128 halbiert. Außerdem sind die RTP-Ports von 10250 bis 10500 eingetragen. Sie entsprechen den Angaben in der rtp.conf und der UDP-Port-Weiterleitung im Router. Die Einstellungen sind nicht zwingend.

Nach erfolgreicher Installation können wir mit einer videofähigen Gegenstelle ein Videotelefonat führen. Dazu tragen wir die Zielnummer ein und klicken auf dem kleinen Knopf mit dem Kamerasymbol:

Anwählen eine Videogesprächs zur Telefonnummer 1003 von der 1009.
So sieht also ein Asterisk-Verrückter aus. Morgendlicher Selbstversuch des noch unrasierten und ungekämmten Autors mit Covid-19-Selbermacher-Haarschnitt. Oben links das empfangene Video, das von einem Smartphone stammt. Links unten das versendete Video von MicroSip. Das Empfangs-Video-Fenster muss man leider nach jedem Gesprächsbeginn zum richtigen Seitenverhältnis zurechtziehen. Für die Telefonate mit Softphones ist ein Headset oder oder ein Kopfhörer zu empfehlen, um Echoeffekte zu vermeiden.

Bei der Testverbindung war das Smartphone als Gegenstelle über VPN mit Deutschland verbunden und machte also für die Überbrückung von 60 cm Luftlinie einen Umweg von über 2000 km. Unter Win7 habe ich selbst mit den älteren Versionen von MicoSip die Videofunktion nicht zum laufen gebracht.

MicroSip lässt sich problemlos unter Win 10 installieren. Auf meinem Win 7 gelang es selbst mit älteren Versionen nicht. Ein anderer konnte MicroSip erfolgreich auf Win 7 installieren.

Linux: Für Linux gibt es Linphone, das ebenfalls Video unterstützt. Getestet habe ich es nicht unter Linux. Die Konfiguration soll schwierig sein. Ich kenne noch keinen, der auch die Video-Funktion zum Laufen gebracht hat.

Weitere Smartphones für Videotelefonate über  Asterisk: Getestet habe ich bis jetzt Linphone und Sipnetic. Bei Sipnetic ist die Videofunktionalität leider nicht kostenlos.

Linphone: Das Android-Smartphone Linphone konnte ich im zweiten Anlauf erfolgreich testen. Die Oberfläche ist etwas gewöhnungsbedürftig. Dafür sind alle Dienste kostenlos und werbefrei. Man kann zwischen Front- und Rückseitenkamera umschalten. Als Registrar gibt man immer die öffentliche IP bzw. die URL ein.  Wenn der SIP-Port von der 5060 abweicht, kommt direkt hinter der IP ein Doppelpunkt und er SIP-Port, z.B. 94.124.10.388:5060. Der Rest der Account-Konfiguration erklärt sich von selbst.  Unter “Video” gibt es eine Einstellung (Accepting incoming video requests), die dafür sorgt, dass ausgehende Anrufe als Videotelefonate erkannt werden.

SIP-Account in Linphone einrichten. Unter Domain tragen wir die URL oder die öffentliche IP des SIP-Servers ein, z.B. 95.342.14.540:5064

Linphone im eigenen Netzwerk: Linphone für Android zeigt einen interessanten Effekt. Hat man den Asterisk-Account mit der öffentlichen IP des Asterisk-Servers angemeldet, funktioniert normalerweise auch im denjenigen LAN, also in meinem lokalen Netzwerk, in welchem sich der Asterisk-Server befindet.

Doch eines Tages nach dem Rebooten des Routers konnte ich innerhalb meines LANs keine Nummer als Videogespräche anrufen. Auf der Asterisk-Konsole war keine Reaktion zu sehen. Wenn das Smartphone außerhalb des LANs war, funktionierten alle Telefonate einwandfrei. Die Lösung war ungewöhnlich. Linphone deinstallieren, sich über VPN oder auf eine andere Art und Weise außerhalb des eigenen LANs verbinden und dann Linphone ganz normal installieren und konfigurieren. Danach funktionerte alles innerhalb und außerhalb meines LANs einwanfrei.

Die Freude währte nicht lange und die Fehlerbehebung ist auch nicht reproduzierbar. Deshalb habe ich zwei Accounts für dieselbe Nummer angelegt. Der eine Account verwendet die lokale IP, der andere die öffentliche IP des Asterisk-Servers. Das Umschalten zwischen den Accounts ist bei Linphone umständlich. Deshalb habe ich noch Sipnetic auf meinem Smartphone. Doppelt genäht hält besser.

Selbstversuch mit Linphone unter Android. Oben der Videostream, der abgesendet wird, unten der empfangene Videostream.
Screenshot des Videostreams, welches von meinem 60-Euro-Smartphone mit Linphone von der rückwärtigen Kamera versendet wurde. Ich erkannte die Bewegung des Sekundenzeigers der Wanduhr.
Screenshot vom Video-Stream der rückwärtigen Kamera meines Billig-China-Smartphones. Versendet mit Linphone für Android. Makroaufnahmen gelingen auch, um zum Beispiel Details zu zeigen. Ein Videostream sagt mehr als 1000 Worte.

Linphone für Android als Babyphone oder Überwachungskamera: Linphone lässt sich unter “Einstellungen” entsprechend konfigurieren, dass es beim Anruf ein Videotelefonat automatisch annnimmt und die rückwärtige Kamera verwendet. Das Smartphone kann somit für die Videoüberwachung dienen. Damit keine Mobilfunkkosten anfallen, sollte man den Betrieb nur über Wlan erlauben (unter Settings -> Network -> “Use WiFi only” aktivieren).

Das Softphone Linphone für Android lässt sich als Überwachungskamera oder Video-Babyphnone konfigurieren. Bei Anruf hebt es automatisch ab und sendet einen Video-Stream an den Anrufer.

Nachtrag zum Babyphone oder der Videoüberwachung: Unter https://elektronikbasteln.pl7.de/altes-smartphone-als-ueberwachungskamera-ueber-das-sip-protokoll ist eine noch bessere Einstellung mit dem Video-Codec VP8 beschrieben.

Sipnetic: Bei Sipnetic für Android-Smartphones kommt mir die Bedienung während der Eingewöhnungsphase logischer vor. Leider ist die Videounterstützung eine kostenpflichtige Zusatzfunktion, die etwa 5 Euro kostet und mit PayPal bezahlt werden kann. Die Videotelefonate laufen einwandfrei mit Sipnetic. Eine Möglichkeit zum Umschalten zwischen Front- und Rückseitenkamera habe ich nicht gefunden.

Hingegen läuft es sehr zuverlässsig. Bei Sipnetic ist es egal, ob das Smartphone innerhalb oder außerhalb desjeningen LANs betrieben wird, in dem sich der Asterisk-Server befindet.

Außerdem lassen sich viele Accounts verwalten, die alle gleichzeitig für eingehende Gespräche aktiv sind. Die Auswahl des Accounts für das ausgehende Gespräch ist einfach.

Videotelefonat mit Sipnetic für Android-Smartphones vom Telefonanschluss 1009 des Asterisk-SIP-Servers.