Autor: Heiko Sommerfeldt
Phoner – ein Freewaretool bekommt VoIP-Unterstützung
Heiko Sommerfeldt ist Entwickler des Freeware-Software-Telefons Phoner,
das ursprünglich als CAPI-Anwendung für ISDN-Telefonie entwickelt wurde.
Im Jahr 2004 begann er die Migration der Anwendung für VoIP. Der Bericht
zeigt, wie einfach eine Software-Anwendung mit Hilfe von
Open-Source-Bibliotheken um VoIP-Funktionalitäten erweitert werden kann.
Im Jahr 1997 war ich auf der Suche nach einem Thema für meine
Diplomarbeit, um mein Informatik-Studium in Ulm abzuschließen. In einem
Aushang sah das Thema „Telefonieoberfläche für Windows“, das mich sehr
interessierte. Ich fing sogleich mit der Entwicklung an. Die Anforderung
war, eine Windows-Applikation zu bauen, die mittels Drag&Drop-Bedienung;
Telefonaufrufe initiieren kann. Dabei sollte die Telephonie API (TAPI) als
Schnittstelle zum Festnetz dienen. Mangels passendem Modem, jedoch
vorhandener ISDN-Karte wurde kurzerhand parallel auch CAPI ausprobiert.
Das entstandene Programm wurde „Phoner“ getauft. Im Laufe der Zeit wurden
immer mehr ISDN-Leistungsmerkmale in Phoner integriert und Features wie
Anrufbeantworter und SMS-Versand hinzugefügt. Die TAPI-Schnittstelle wurde
lediglich stiefmütterlich unterstützt – die Hauptschnittstelle blieb
ISDN-CAPI.
In den Jahren 2003-2004 verebbte der ISDN-Boom immer mehr und VoIP wurde
immer populärer. Beruflich hatte ich mit H.323 zu tun. Deshalb lag es
nahe, den Multimedia-Standard H.323 in Phoner einzubauen, der auch VoIP
unterstützt und bis zu diesem Zeitpunkt führend war. Da ich jedoch keinen
kommerziellen Sourcecode einsetzen konnte, blieb nur Freeware übrig – in
diesem Fall der Softwarestack OpenH323. Jedoch ist OpenH323 in C++
programmiert. Phoner wurde hingegen komplett in Delphi entwickelt. Ich
wollte keines der Softwareteile umschreiben. Als Notbehelf hätte ich eine
Wrapper-DLL mit C-Interface schreiben können. Diesen Ansatz habe ich
jedoch nicht umgesetzt – Phoner blieb zunächst eine Festnetz-Anwendung
ohne VoIP-Unterstützung.
Seit 2004 ist VoIP noch populärer geworden, H.323 konnte sich jedoch nicht
durchsetzen. Der neue Standard lautete fortan SIP. Eine komplette
Eigenentwicklung sollte Phoner nicht erfahren, da es sich um ein reines
Freizeitprojekt handelte.
Phoner - die CAPI-Anwendung mit VoIP-Erweiterung
Im Laufe des Jahres 2004 wurde ich dann auf oSIP (www.osip.org)
aufmerksam. Das war zwar „nur“ eine Library zum Parsen und Zusammensetzen
von SIP-Nachrichten, jedoch ist auch eine rudimentäre State-Machine
enthalten, die ich mir näher angeschaut habe.
Nun kam wieder das alte Problem auf: oSIP ist in C programmiert – Phoner
noch immer in Delphi. Also musste oSIP in eine DLL verpackt werden und in
die Anwendung integriert werden. Die oSIP enthält sehr viele Strukturen
und Funktionen, die ich in Delphi in Pascal-Syntax hätte nachbauen müssen,
so dass dieser Weg auch wenig zielführend erschien.
Phoner bindet jedoch bereits eine „fremde“ C-Dll ein, nämlich die CAPI
(capi2032.dll). Daraus entstand die Idee, selbst eine CAPI zu bauen, die
sich der Applikation gegenüber als normale CAPI ausgibt und auf
Netzwerkseite das SIP-Protokoll verwendet. Diese Idee, welche
grundsätzlich nicht neu ist, gefiel mir am besten.
Deshalb begann ich die DLL „sipper.dll“ zu entwickeln. Theoretisch hätte
diese auch in „capi2032.dll“ umbenannt werden können, so dass sie auch mit
anderen CAPI-Applikationen funktionieren müsste. Diesen Anwendungsfall habe
ich jedoch nie getestet, weil der Fokus stets die Phoner-Anwendung war.
Um Phoner so wenig wie möglich zu ändern, wird zwischen Applikation und
DLL immer der Sprachcodec G.711 A-Law verwendet – wie bei ISDN. Innerhalb
der DLL konnte ich in C/C++ jeglichen anderen frei verwendbaren Codec
integrieren.
In Phoner selbst ist lediglich ein Konfigurationsdialog hinzugekommen, der
eine Ini-Datei schreibt. Diese Ini-Datei von der „sipper.dll“ ausgelesen.
Somit hat Phoner selbst ohne merkliche Änderungen die Migration hin zu
einem VoIP-Client vollzogen. In naher Zukunft (Stand Sommer 2005) möchte
ich die Leistungsmerkmale soweit wie möglich ausbauen, sodass man dann
auch im VoIP-Modus von Phoner die gewohnten ISDN-Leistungsmerkmale
(Transfer, Rufumleitung, Konferenz, ...) nutzen kann.
Ohne oSIP wäre diese schnelle Umsetzung nicht möglich gewesen. Da oSIP
lediglich eine Low-Level-API zur Verfügung stellt, muss die Funktionalität
im Wesentlichen selbst implementiert werden. Die Nachrichten selbst muss
man in korrekter Syntax zusammenstellen und die Reaktion auf empfangene
Meldungen muss ebenfalls implementiert werden.. Die Kommunikation per UDP
war ebenso schnell eingebaut, wie die Behandlung des aufgesetzten
RTP-Protokolls. Erstaunlich einfach war die Integration weiterer Codecs.
Für G.726, GSM und iLBC habe ich auf freie Komponenten zurückgegriffen.
Diese Codecs und oSIP selbst unterliegen nicht der GPL (sondern teilweise
L-GPL), weshalb ich auch Phoner weiterhin als „Closed Source“ Applikation
vertreiben kann.
Links zum Thema:
- Informationen über Phoner
©2008, VoIP-Info.de
|