Ich suche eine VoIP-Bibliothek, die folgende Kriterien erfüllt:
Besonders freuen würde ich mich über Berichte aus erster Hand über den Support (wie schnell reagieren sie, wie hilfreich ist die Antwort …) und wie schön die Oberfläche ist. Die technischen Details kann und muss ich sowieso selbst prüfen.
Da ich mich bereits selbst ein wenig umgesehen habe, ist dies die Liste der Bibliotheken, die ich derzeit untersuche, gruppiert danach, wie gut sie unseren Anforderungen entsprechen (nach einer vorläufigen Analyse):
Vielversprechend:
Nicht so vielversprechend:
Gar nicht:
Mein Projekt, Managed Media Aggregation , macht alles, was Sie mit rtp und rtsp brauchen, es enthält einen Client und einen Server, die sowohl effizient als auch standardkonform sind.
Der Server unterstützt problemlos über 1000 Clients, und die Speicherauslastung liegt selten über 150 MB, selbst wenn diese Clients Medien verbrauchen.
Die Lösung hat auch einige Codec-Implementierungen, aber nur JPEG wird derzeit vollständig unterstützt, obwohl es nützliche Tools für fast alle dokumentierten Codecs und Containerformate gibt, einschließlich h264 und MPEG.
Abspielen und Decodieren sowie Codieren werden in Kürze unterstützt.
Sie können das SIP-Zeug von sipsorcery.codeplex.com bekommen
Wenn Sie die Codecs jetzt brauchen, dann:
Audio Transcoding kann entweder mit Audio oder Bass erreicht werden .
Video wird Ihre Problemdomäne sein, aber ich bin mir nicht sicher, ob dies ein Aspekt Ihres Projekts ist.
Die Nettokosten sind hier nur Ihre Zeit oder das, was Sie spenden.
MMA verwendet die Apache-Lizenz 2.0 .
Da wir die Bibliotheken ziemlich ausführlich untersucht haben, möchte ich unsere Erkenntnisse mit Ihnen teilen.
Jetzt habe ich im Grunde genommen akzeptiert, dass die Schnittstellenqualität von im Grunde allen VoIP-Bibliotheken ... naja ... schlecht ist! Zumindest aus Sicht der Clean-Code-Entwickler. Ausnahmen wie „Lizenz ist ungültig oder abgelaufen oder es ist ein anderer Fehler aufgetreten“ sind Standard. Einige lösen möglicherweise nie Ausnahmen aus, sondern lösen stattdessen ein Ereignis aus. Das Ereignis enthält eine Zeichenfolge, die entweder "Initialisiert" wird, oder wenn nicht - die Fehlerursache. Wohlgemerkt, das Ereignis ist nicht asynchron, es tritt auf, bevor die Methode beendet wird.
Andere haben kryptische Namen (viele kryptische Abkürzungen. Ich meine nicht Dinge wie DTMF, die Sie leicht googeln und herausfinden können, was es bedeutet). Eine Bibliothek hatte ziemlich viele Tippfehler.
Andere Bibliotheken wiederum bieten native C++ Importe an, mit denen Sie unsafe
viel arbeiten müssen. Einige bieten COM- oder sogar .net-DLL-Wrapper an, aber wenn Sie fortgeschrittenere Dinge wie das Puffern tun möchten, müssen Sie immer noch Zeiger / unsicheren Code verwenden. Diese sind nicht einmal umwickelt, IntPtr
sondern long bufferPointer
. Bei den Arten von Bibliotheken ist es auch üblich, dass es Eigenschaften gibt, z. B. wo Sie von zu sich selbst int IsLoopbackInterfaceEnabled
konvertieren müssen .int
bool
Wir haben einige schlechte Erfahrungen mit Ozeki gemacht und daher muss ich meine vorherige Aussage zurückziehen. Hier ist also, was schief gelaufen ist (abgesehen von mehreren Fehlern, die wir entdeckt und behoben haben): Zuerst haben wir ein Problem mit der Audioqualität festgestellt. Da einige kundenspezifische VoIP-Hardware und Funkgeräte beteiligt waren (die die Qualität beeinflussen), haben wir viele Tests durchgeführt. Endlich konnten wir es dem Ozeki SDK zuordnen und haben Ozeki danach gefragt. Es war ein bekanntes Problem mit den Standardeinstellungen, welche Windows Audio API (Wasapi oder Waveform API) Ozeki SDK verwendet.
Das war jetzt noch nicht das Ende. Das Umschalten der Audio-API in der Beispielanwendung (die von Ozeki bereitgestellt wurde) oder in einigen Demoanwendungen, die wir selbst geschrieben haben, funktionierte problemlos. In unserer realen Anwendung führt die Änderung nur einer Konfigurationszeile jedoch dazu, dass überhaupt kein Ton von den Lautsprechern ausgegeben wird. Wieder habe ich Ozeki um Hilfe gebeten. Ich dachte, vielleicht ist es nur ein weiteres bekanntes Problem. es ist nicht. Nach einiger Diskussion sind wir uns also einig, dass sie eine voll funktionsfähige Repro untersuchen sollten. Also habe ich ihnen eine geschickt. Ihre Antwort war, dass das Problem wahrscheinlich mit der Lautsprecher-Instanziierung zusammenhängt. Sie haben das Problem also nicht gründlich untersucht, sondern versuchen, mich mit einigen allgemeinen Antworten abzuspeisen. Leider gab es noch weitere Diskussionen und ihr nächster Vorschlag war, dass die Initialisierung zu einem anderen Zeitpunkt durchgeführt werden sollte (obwohl sie etwas anderes meinten). Also habe ich noch einige Stunden investiert und viele Kombinationen ausprobiert, einschließlich Initialisierung im GUI-Thread, nicht im GUI-Thread usw. usw. Es hat nicht geholfen. Ihre letzte Antwort war, dass es in ihrer Beispielanwendung funktioniert, also muss das Problem bei unserer Anwendung liegen.Das ist eine wirklich lahme Ausrede, falls ich jemals eine gehört habe. (Außerdem: Beim Wechsel der Konfiguration auf die andere API funktioniert es "einwandfrei" (schlechte Audioqualität) - und laut Ozeki sollte das Wechseln der API keine Seiteneffekte haben).
Ich habe den Repro-Fall am 12. Dezember 2014 an Ozeki übermittelt und das Problem wurde bis jetzt (8. Juni 2015) nicht gelöst.
Außerdem gibt es andere Probleme mit dem Ozeki SDK, die die Entwicklung verlangsamen. Für einige davon gibt es Problemumgehungen (was mühsam ist) und für einige nicht (was noch mühsamer ist).
Schließlich haben wir die Entscheidung getroffen, unsere C++-Entwicklungsabteilung zu bitten, einen VoIP-Dienst auf der Basis von PJSIP für uns zu schreiben. Laut unserem Entwickler ist es ein Leckerbissen.
Letztendlich haben wir uns für das Ozeki SDK entschieden. Wir halten ihre API für die beste aller untersuchten Bibliotheken (allerdings noch lange nicht perfekt). Wohlgemerkt, die Ausnahmen sind nicht sehr klar (oh, Sie sagen mir also, die Adresse sei falsch, warum geben Sie mir nicht ein Beispiel für eine korrekte Adresse?) und die "Zustandsmaschine" von Objekten ist nicht sehr klar (S .Bsp. bei a IPhoneCall
kann man .Start()
zweimal anrufen, beim zweiten Mal gibt es keine Ausnahme, nichts, aber es geht nicht, egal ob man angerufen hat.HangUp()
vorher oder nicht. Das bedeutet, dass Sie das Objekt nur einmal – für einen Anruf – verwenden können, was völlig in Ordnung ist. Es wäre besser, wenn die Methode eine Ausnahme auslösen und mir mitteilen würde, dass ich sie nicht verwenden kann). Der Ozeki-Support schien auch in Ordnung zu sein. Sie verfügen über eine umfangreiche VoIP-Dokumentation auf der Website und bieten auch viele Beispiel-C#-Projekte. Alles in allem war es die am einfachsten zu bedienende Schnittstelle. Und die Funktionalität / Audioqualität ist auch ok. Preislich auch ok (zumindest für unser Szenario).
long pointer
für einige Methoden unsicheren Code verwendenboolean
s werden dargestellt alsint
CAbtoPhoneClass
GTAPIEnv
. Wie hässlich ist das?SetInteger(string name, int value)
. Das Gegenteil einer sauberen Oberfläche!.PhoneLineRecording[2]
und .PhoneLineState[2]
. Also 1990!Windows.Forms.Control
. WPF, jemand? No-GUI-Service, irgendjemand?bool
s als int
s dargestellt.Error
Eigenschaft auslesen (Thread-Sicherheit? Auf Wiedersehen!)Ich evaluiere auch Ozaki für einige Wochen. Es scheint sehr vielversprechend, aber als Neuling finde ich, dass es nicht gut dokumentiert ist (zumindest für mich, da ich im VoIP-Bereich keine Erfahrung habe, ich wünsche mir mehr Ausführlichkeit, zum Beispiel in Bezug auf Fehler), irgendwie inkonsistent zwischen aufeinanderfolgenden Versionen , und ihre Website scheint mir sehr überladen mit vielen Informationen, aber nicht gut organisiert zu sein. Das finde ich auch wahnsinnig teuer.
Ich verwende das Ozeki SDK. Meiner Erfahrung nach funktionieren die neuesten Versionen (1.3.7 und 1.3.8) in einigen Fällen nicht wie erwartet.
Auch fast gibt es überhaupt keine Unterstützung.
Ich teste gerade https://sites.google.com/site/sipekvoip/ , es ist vielversprechend.
Versuchen Sie PortSIP VoIP SDK ( https://www.portsip.com/portsip-voip-sdk/ ).
Dies ist das benutzerfreundliche und leistungsstarke SDK, das mehrere Plattformen unterstützt; Das kostenlose Beispielprojekt kann zum Testen heruntergeladen werden.
Und hier das Wichtigste: Das PortSIP VoIP SDK ist nicht von einem anderen Open-Source-Projekt abgeleitet. Soweit ich weiß, werden viele SDKs einfach von einem Open-Source-Projekt wie Linphone modifiziert und dann als kommerziell verkauft.
Jay
BozoJoe