.NET VoIP-Bibliothek

Ich suche eine VoIP-Bibliothek, die folgende Kriterien erfüllt:

  • geschrieben in .NET oder zumindest mit .NET-Schnittstelle
  • eine übersichtliche ("sauberer Code") Oberfläche wäre ein großer Vorteil
  • muss Direct IP Call unterstützen
  • muss G711 (PCMA) aLaw 8kHz mono unterstützen
  • muss die Aufzeichnung gleichzeitig mit dem eigentlichen Sprechen unterstützen
  • Ich muss in der Lage sein, SIP-INFO-Nachrichten zu abonnieren und SIP-INFO-Nachrichten mit benutzerdefinierter Nutzlast zu senden
  • sollte SRTP oder die Verschlüsselung des gesamten Transports durch TLS unterstützen
  • Lizenz:
    • dürfen uns nicht dazu verpflichten, unsere Software als Open Source zu veröffentlichen
    • muss weniger als 30.000 $ kosten
    • sollen nicht pro verkauftem Gerät Kosten verursachen (wir benötigen nur eine Leitung/Port, werden aber mehrere Geräte verkaufen)

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:

Das Ozeki-Kamera-SDK verwendet nur andere kostenlose Software. Http://net7mma.codeplex.com ff mpeg und Fluorixe fx

Antworten (5)

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 .

Vielen Dank für Ihren großartigen Beitrag und Ihre Informationen zu VoIP-Bibliotheken und insbesondere zur Ozeki-Bibliothek. Ich habe mich immer gefragt, wie die in .net geschriebene Medienverwaltung auch unter hoher Last ruckelfrei sein kann (insbesondere wenn der GC läuft - was die Verarbeitung anderer Threads stört). Ich würde mich sehr freuen, wenn Sie das Thema näher erläutern könnten. Vielleicht hast du schon einen Blogbeitrag geschrieben? Vielleicht ist es "einfach", weil alles bereits von vorhandenem nicht verwaltetem Code gehandhabt wird? ...
Ich wundere mich besonders darüber, weil Ozeki behauptete, es sei kein Problem. Ich habe sie speziell gefragt, wie sie sicherstellen, dass der GC kein Stottern einführt. Sie sagten, sie hätten „Optimierungen“ vorgenommen, um das zu verhindern. Leider wurden die technischen Details nie konkreter und ich bleibe etwas skeptisch...
Leider führt Ozeki keine verwaltete Dekodierung durch, sondern verwendet ffmpeg, Research cscodec. Es ist möglich, dass der GC kein Stottern einführt, wenn Sie nicht genug Speicherdruck haben, um es zu verursachen. Ich habe noch keinen Blog, aber ich beantworte Fragen auf der Projektseite, die einen Thread hat, in dem die h264-Decodierung diskutiert wird.

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 unsafeviel 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, IntPtrsondern long bufferPointer. Bei den Arten von Bibliotheken ist es auch üblich, dass es Eigenschaften gibt, z. B. wo Sie von zu sich selbst int IsLoopbackInterfaceEnabledkonvertieren müssen .intbool

Update - Probleme mit Ozeki

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.

Hier ist der Originaltext zum Ozeki SDK:

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 IPhoneCallkann 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).

Hier ist eine kurze Liste von Notizen, die ich zu den anderen SDKs gemacht habe:

  • Abto : ActiveX, COM und DLL verfügbar.
    • müssen long pointerfür einige Methoden unsicheren Code verwenden
    • unspezifische Ausnahmemeldungen
    • booleans werden dargestellt alsint
    • Tippfehler
    • im Grunde keine objektorientierte Abstraktion - alles wird mit dem gemachtCAbtoPhoneClass
    • es gibt jede Menge Veranstaltungen. Die Benutzeroberfläche ist nicht sauber und leicht verständlich, Sie müssen viel Dokumentation lesen, um zu wissen, was zu tun ist.
  • pjsip-Wrapper
    • direkter Wrapper zu c lib (im Grunde ein nativer Import)
  • PCBest
    • Nur einer, bei dem der C#-Beispielcode mit der aktuellen VS2013-Lösung geliefert wird
    • müssen Unterklasse GTAPIEnv. Wie hässlich ist das?
    • Konfigurieren Sie Einstellungen mit Methoden wie SetInteger(string name, int value). Das Gegenteil einer sauberen Oberfläche!
  • LanScape VoIP-Media-Engine
    • keine objektorientierte Abstraktion
    • stattdessen arbeitet man viel mit Arrays. Dinge wie .PhoneLineRecording[2]und .PhoneLineState[2]. Also 1990!
    • Fehler werden als Enums dargestellt. Sie sind abgekürzt – halbwegs verständlich.
  • PortSIP VoIP-SDK
    • direkte DLL-Importschnittstelle
  • Conaito SIP-Client-SDK
    • einzige generische Ausnahme wie "VOIP SDK Failed". Wenn ich mich richtig erinnere, müssten Sie dann eine Eigenschaft lesen, um (ein wenig) mehr Informationen über das Problem zu erhalten. Hallo, Parallelität? Sicher.
    • Das Instanziieren der API-Klasse erfordert einen Verweis auf eine Windows.Forms.Control. WPF, jemand? No-GUI-Service, irgendjemand?
  • VaxVoIP SIP-Telefon-SDK
    • wieder werden bools als ints dargestellt
    • Jede Methode gibt ein int zurück. Codierung im C-Stil. Returncode immer mit 0 vergleichen, um herauszufinden, ob es geklappt hat. Um mehr Informationen zu erhalten, müssen Sie eine .ErrorEigenschaft auslesen (Thread-Sicherheit? Auf Wiedersehen!)
    • nicht sehr gut dokumentiert, man muss sich die Beispiele ansehen, um Dinge zu finden.
    • Auch hier gibt es viele Ereignisse - lesen Sie stundenlang die Dokumentation.
  • IntTalk VoIP-SDK
    • Sie haben den Verkauf des SDK vor kurzem eingestellt. Jetzt bieten sie an, kundenspezifische VoIP-Software für Sie zu programmieren.
Sie verwenden Open-Source-Software und verkaufen sie Ihnen. Sie können die Fehler selbst beheben oder melden und zahlen nichts.
@Jay: Ich weiß, dass dies bei Dingen wie FluorineFX und anderen der Fall ist. Aber was ist mit dem ganzen SIP-, RTP- und SRTP-Handling? Welche Bibliotheken verwenden sie dafür? Das Problem ist, dass es viel Know-how erfordert, diese Dinge so zusammenzusetzen, dass sie zuverlässig funktionieren. Ich muss allerdings zugeben, dass ich in letzter Zeit ziemlich enttäuscht von der Qualität des Ozeki SDK war.
Sipsorcery für sip und srtp. Meine Bibliothek für den Rest. Siehe meine Antwort. Letztendlich tut diese Firma nichts anderes, als Open-Source-Software gegen eine Gebühr zu unterstützen.
@Jay: hast du jemals darüber nachgedacht, Open-Source-Software gegen eine Gebühr zu unterstützen? Weil es viel einfacher wäre, das meinem Chef zu "verkaufen" als Spenden... ;-)
Meine Bibliothek hat kostenlose Unterstützung, wenn er mit dem Projekt Geld verdient, sollte eine Spende genauso gut sein wie etwas kaufen und auch steuerlich absetzbar sein.
@Jay: Haben Sie ein Support-SLA? Viele Unternehmen mögen das Open-Source-Modell, benötigen jedoch in bestimmten Grenzen Support-Antworten.
Wenn Sie einen brauchen, könnte etwas ausgearbeitet werden, da bin ich mir sicher, aber der Support ist kostenlos, wenn das Problem mit meiner Software zusammenhängt. Siehe die Projektseite als Beweis dafür :P

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.

hast du auch in andere bibliotheken geschaut? An einem Vergleich – auch einem subjektiven und unvollständigen – wäre ich und vermutlich auch andere wahrscheinlich sehr interessiert. Wenn ich es mit anderen Bibliotheken vergleiche, denke ich, dass Ozeki überhaupt nicht teuer ist - es hängt davon ab, wie viele Kanäle/gleichzeitige Verbindung Sie benötigen. Wenn Sie viele davon brauchen, dann ja, es ist teuer.
Zunächst einmal bin ich ein absoluter Neuling in diesem Bereich. Also bin ich nicht sehr vertraut mit Preisen und anderen Aspekten. Ich habe gerade Conaito, VaxVOIP und Abto VoIP heruntergeladen. Zum Beispiel hat mich VaxVoip Web Softphone in Versuchung geführt. Aber leider war ich absolut nicht in der Lage, ihre DLL einfach auf meinem Win 8.1 x64-Notebook zu regsvr32 zu regsvr32, sodass ich nicht tiefer schauen konnte. Also mache ich noch eine Weile mit Ozaki weiter. Was mich an Ozaki frustriert, ist, dass ich zwischen zwei Veröffentlichungen angefangen habe, bei der letzten, ihre Beispiele nicht mehr gut funktionierten und sie mir nicht sehr kooperativ zu sein scheinen, wenn es darum geht, einige Hinweise zu geben.
Und ich kann wirklich nicht daran denken, ein teures SDK zu kaufen, wenn ich zumindest ihre grundlegenden Beispiele nicht zum Laufen bringen kann.
Ich würde nichts für Ozeki bezahlen, die Software ist verpackte kostenlose Software, die verschleiert wurde.
Welche kostenlose Software? jedenfalls kommt es mir furchtbar teuer vor, aber ansonsten sieht es vielversprechend aus. Außerdem mag ich ihre Unterstützung nicht. Ist nicht sehr freundlich.

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.