Domanda:
Libreria VoIP .NET
BatteryBackupUnit
2014-07-03 12:13:10 UTC
view on stackexchange narkive permalink

Sto cercando una libreria VoIP che aderisca ai seguenti criteri:

  • scritta in .NET o almeno con interfaccia .NET
  • un clear ("clean codice "simile) sarebbe un grande vantaggio
  • deve supportare Direct IP Call
  • deve supportare G711 (PCMA) aLaw 8kHz mono
  • deve supportare la registrazione contemporaneamente a parlare effettivamente
  • Devo essere in grado di iscrivermi al messaggio SIP INFO e inviare messaggi SIP INFO con payload personalizzato
  • dovrebbe supportare SRTP o la crittografia di tutti i trasporti tramite TLS
  • licenza:
    • non deve richiederci di rendere open source il nostro software
    • deve costare meno di 30.000 $
    • non deve sostenere costi per ogni dispositivo venduto (richiediamo solo una linea / porta, ma venderà diversi dispositivi)

Sarei particolarmente felice di ricevere resoconti di prima mano del livello di supporto (come reagiscono velocemente, quanto è utile la risposta ...) e quanto è bella l'interfaccia. I dettagli tecnici che posso e dovrò verificare su comunque la mia.

Dato che ho già scavato un po 'da solo, questo è l'elenco delle biblioteche che sto attualmente esaminando, raggruppate in base a come si adattano alle nostre esigenze (in un'analisi preliminare):

Promettente:

Non così promettente:

Niente affatto:

Ozeki Camera SDK utilizza solo altri software gratuiti. Http://net7mma.codeplex.com ff mpeg e Fluorixe fx
Libreria MS-SIP @ http://www.eyeball.com/products/ms-sip-library/
Cinque risposte:
#1
+4
BatteryBackupUnit
2014-07-17 12:31:21 UTC
view on stackexchange narkive permalink

Dato che abbiamo esaminato ampiamente i librarier, vorrei condividere i nostri risultati con voi.

Ora fondamentalmente sono arrivato ad accettare che la qualità dell'interfaccia di praticamente tutte le librerie VoIP è .. bene .. male! Almeno dal punto di vista degli sviluppatori Clean-Code. Eccezioni come "La licenza non è valida o scaduta o si è verificato qualsiasi altro errore" sono standard. Alcuni potrebbero non lanciare mai eccezioni ma piuttosto generare un evento in risposta. L'evento contiene una stringa che verrà "inizializzata" o, in caso contrario, il motivo dell'errore. Ricordati, l'evento non è asincrono, si verifica prima che il metodo termini.

Altri hanno nomi criptici (molti abbreviazioni criptiche. Non intendo cose come DTMF che puoi facilmente cercare su google e scoprire cosa significa). Una libreria aveva molti errori di battitura.

Altre librerie offrono ancora Importazioni C ++ native in cui dovrai lavorare molto con unsafe . Alcuni offrono wrapper DLL COM o anche .net, ma se vuoi fare cose più avanzate come il buffering dovrai comunque usare puntatori / codice non sicuro. Questi non sono nemmeno inseriti in IntPtr ma sono bufferPointer lungo . Con i tipi di librerie è anche abbastanza comune che ci siano proprietà come int IsLoopbackInterfaceEnabled dove devi convertire da int a bool te stesso.

Aggiornamento - Problemi con Ozeki

Abbiamo creato alcuni esperienze con Ozeki e quindi devo ritirare la mia precedente dichiarazione. Quindi ecco cosa è andato storto (a parte diversi bug che abbiamo rilevato e risolto): Innanzitutto, abbiamo rilevato un problema di qualità audio. Poiché sono stati coinvolti alcuni dispositivi VoIP-HW e radio personalizzati (che influenzano la qualità), abbiamo eseguito molti test. Finalmente abbiamo potuto individuarlo nell'SDK di Ozeki e abbiamo chiesto a Ozeki al riguardo. Si trattava di un problema noto con le impostazioni predefinite relative a quale Windows Audio API (Wasapi o Waveform API) utilizza l'SDK di Ozeki.

Ora questa non era la fine. Cambiare l'API audio nell'applicazione di esempio (quella fornita da Ozeki) o in poche applicazioni demo che abbiamo scritto noi stessi ha funzionato perfettamente. Tuttavia, nella nostra applicazione reale, cambiando solo una riga di configurazione non viene emesso alcun audio dagli altoparlanti. Ancora una volta, ho chiesto aiuto a Ozeki. Ho pensato che forse fosse solo un altro problema noto. non è. Quindi, dopo qualche discussione, siamo d'accordo che dovrebbero indagare su una riproduzione completamente funzionante. Quindi ne ho inviato uno. La loro risposta è stata che il problema era probabilmente correlato all ' istanza del relatore . Quindi non hanno studiato a fondo il problema, ma piuttosto stanno cercando di convincermi con alcune risposte generiche. Purtroppo, ci furono altre discussioni e il loro suggerimento successivo fu che l'inizializzazione dovesse essere eseguita in un altro momento (sebbene intendessero qualcosa di diverso). Quindi ho investito qualche ora in più e provato molte combinazioni, inclusa l'inizializzazione nel thread della GUI, non nel thread della GUI, ecc. Ecc. Non ha aiutato. La loro risposta finale è stata che funziona nella loro applicazione di esempio, quindi il problema deve riguardare la nostra applicazione. Questa è una scusa davvero insignificante se ne ho mai sentita una. : quando si cambia la configurazione con l'altra API funziona "in modo impeccabile" (cattiva qualità audio) - e secondo Ozeki la modifica dell'API non dovrebbe avere effetti collaterali).

Ho inviato il Repro- Caso a Ozeki il 12 dicembre 2014 e il problema non è stato risolto fino ad ora (8 giugno 2015).

Ci sono anche altri problemi con Ozeki SDK che rallentano lo sviluppo. Per alcuni di questi ci sono soluzioni alternative (che sono una seccatura) e per altre no (il che è ancora più complicato).

Alla fine abbiamo deciso di chiedere al nostro reparto di sviluppo C ++ di scrivi un servizio VoIP basato su PJSIP per noi. Secondo il nostro sviluppatore è un piacere.

ecco il testo originale sull'SDK di Ozeki:

Infine abbiamo deciso di accontentarci di Ozeki SDK. Consideriamo la loro API la migliore di tutte le librerie esaminate (ancora lontane dall'essere perfette, però). Intendiamoci, le eccezioni non sono molto chiare (oh, quindi mi stai dicendo che l'indirizzo non è corretto, perché non mi dai un esempio di indirizzo corretto?) E la "macchina a stati" degli oggetti non è molto chiara (p .Es. Per un IPhoneCall puoi chiamare due volte .Start () . La seconda volta non ci sono eccezioni, niente. Ma non funziona, non importa se tu chiamato .HangUp () prima o meno. Ciò significa che puoi utilizzare l'oggetto solo una volta, per una chiamata, il che va benissimo. Sarebbe meglio se il metodo generasse un'eccezione e mi dicesse che Non posso usarlo). Anche il supporto di Ozeki sembrava essere ok. Presentano un'ampia documentazione VoIP sul sito Web e offrono anche molti progetti C # di esempio. Tutto sommato è stata l'interfaccia più semplice da usare. E anche la funzionalità / qualità audio è ok. Anche dal punto di vista del prezzo vanno bene (almeno per il nostro scenario).

Ecco un breve elenco di note che ho preso riguardo agli altri SDK:

  • Abto : ActiveX, COM e DLL disponibili.
    • è necessario utilizzare puntatore lungo / codice non sicuro per alcuni metodi
    • messaggi di eccezione specifici
    • booleani sono rappresentati come int
    • typos
    • fondamentalmente nessuna astrazione orientata agli oggetti - tutto viene fatto usando il CAbtoPhoneClass
    • ci sono un sacco di eventi. L'interfaccia non è pulita e facilmente comprensibile, è necessario leggere molta documentazione per sapere cosa fare.
  • wrapper pjsip
    • wrapper diretto a c lib (fondamentalmente un'importazione nativa)
  • PCBest
    • Solo uno in cui il codice C # di esempio viene fornito con una soluzione VS2013 aggiornata
    • necessita di una sottoclasse GTAPIEnv . Quanto è brutto?
    • Configura le impostazioni con metodi come SetInteger (nome stringa, valore int) . L'opposto di un'interfaccia pulita!
  • LanScape VoIP Media Engine
    • nessuna astrazione con orenti di oggetti
    • invece si lavora molto con gli array. Cose come .PhoneLineRecording [2] e .PhoneLineState [2] . Quindi 1990!
    • Gli errori sono rappresentati come enumerazioni. Sono abbreviati - comprensibili a metà.
  • PortSIP VoIP SDK
    • interfaccia di importazione diretta DLL
  • Conaito SIP Client SDK
    • unica eccezione generica come "VOIP SDK Failed". Se ricordo bene, dovresti leggere una proprietà per ottenere alcune (un po ') più informazioni sul problema. Ciao, concorrenza? Certo.
    • La creazione di istanze della classe API richiede un riferimento a un Windows.Forms.Control . WPF, chiunque? Nessun servizio GUI, chiunque?
  • VaxVoIP SIP Phone SDK
    • ancora una volta, bool s sono rappresentati come ints
    • ogni metodo restituisce un int. Codifica in stile C. Confronta sempre il codice di ritorno con 0 per scoprire se ha funzionato. Per avere maggiori informazioni, devi leggere una proprietà .Error (thread safety? Arrivederci!)
    • non molto ben documentata, devi guardare negli esempi per trova le cose.
    • ancora una volta, ci sono molti eventi: leggi la documentazione per ore.
  • IntTalk VoIP SDK
    • di recente hanno effettivamente smesso di vendere l'SDK. Ora offrono la possibilità di programmare software VoIP personalizzato per te.
Usano software open source e te lo vendono. Potresti correggere o segnalare i bug da solo e non pagare nulla.
@Jay: So che questo è il caso di cose come FluorineFX e altri. Ma per quanto riguarda l'intera gestione di SIP, RTP e SRTP? Quali biblioteche stanno usando per questo? Il problema è che richiede molto know-how per mettere insieme queste cose in modo che funzionino in modo affidabile. Devo ammettere, tuttavia, che ultimamente sono rimasto piuttosto deluso dalla qualità di Ozeki SDK.
Sipsorcery per sip e srtp. La mia libreria per il resto. Vedi la mia risposta. Alla fine quella società non fa altro che supportare il software open source a pagamento.
@Jay: hai mai considerato di farlo - supportare il software open source a pagamento? Perché sarebbe molto più facile "vendere" questo al mio capo invece che alle donazioni ... ;-)
La mia biblioteca ha supporto gratuito, se guadagna soldi con il progetto una donazione dovrebbe essere altrettanto buona quanto l'acquisto di qualcosa e utilizzabile anche come detrazione fiscale.
@Jay: hai uno SLA di supporto? molte aziende amano il modello open source, ma richiedono risposte di supporto entro certi limiti.
Se ne hai bisogno, allora qualcosa potrebbe essere risolto, ne sono sicuro, ma il supporto è gratuito se il problema è con il mio software. Vedere la pagina del progetto per la prova di ciò: P
#2
+3
net4u
2014-12-09 17:49:54 UTC
view on stackexchange narkive permalink

Valuto anche Ozaki per alcune settimane. Sembra molto promettente, ma come nuovo arrivato trovo che non sia ben documentato (almeno per me che non ho esperienza nel dominio VoIP, auguro più verbosità, ad esempio per quanto riguarda gli errori), in qualche modo incoerente tra rilasci consecutivi , e il loro sito mi sembra molto ingombro di molte informazioni, ma non ben organizzato. Inoltre trovo che sia tremendamente costoso.

hai esaminato anche altre biblioteche? Io e presumibilmente altri saremmo probabilmente molto interessati a un confronto, anche soggettivo e incompleto. Se lo confronto con altre librerie, penso che Ozeki non sia affatto costoso - dipende da quanti canali / connessioni simultanee hai bisogno. Se ne hai bisogno di molti, allora sì, è costoso.
Prima di tutto, sono molto nuovo a questo. Quindi non ho molta familiarità con i prezzi e altri aspetti. Ho appena scaricato Conaito, VaxVOIP e Abto VoIP. Ad esempio, sono stato tentato dal softphone web VaxVoip. Ma sfortunatamente non ero assolutamente in grado di registrare semplicemente la loro DLL sul mio notebook Win 8.1 x64, quindi non sono stato in grado di guardare più a fondo. Quindi continuo per un po 'con Ozaki. Quello che mi frustra di Ozaki è che ho iniziato tra due versioni, con l'ultima, i loro esempi hanno smesso di funzionare bene e non mi sembrano molto collaborativi nel fornire alcuni indizi.
E non riesco davvero a pensare di acquistare un SDK costoso se almeno i loro esempi di base non riesco a far funzionare.
Non pagherei nulla per ozeki, il software è un software libero confezionato che è stato offuscato.
quale software gratuito? comunque mi sembra terribilmente costoso, ma per il resto sembra promettente. inoltre, non mi piace il loro supporto. Non è molto amichevole.
#3
+3
Jay
2015-01-04 00:31:12 UTC
view on stackexchange narkive permalink

Il mio progetto, Managed Media Aggregation , fa tutto ciò di cui hai bisogno con rtp e rtsp, include un client e un server che sono sia efficienti che conformi agli standard.

Il server supporta oltre 1000 client senza alcun problema e l'utilizzo della memoria è raramente superiore a 150 MB anche con quei client che consumano supporti.

La soluzione ha anche alcune implementazioni di codec, ma solo Jpeg è completamente supportato in questo momento sebbene ci siano strumenti utili per quasi tutti i codec documentati e formati contenitore inclusi h264 e mpeg.

La riproduzione, la decodifica e la codifica saranno presto supportate.

Puoi ottenere il materiale sip da sipsorcery.codeplex.com

Se hai bisogno dei codec adesso allora:

La transcodifica audio può essere ottenuta utilizzando naudio o bassi.

Il video sarà il tuo dominio problematico ma Non sono sicuro che questo sia un aspetto del tuo progetto.

Il costo netto qui è solo il tuo tempo o ciò che doni.

MMA utilizza la Licenza Apache 2.0.

Grazie per il tuo fantastico post e per le tue informazioni sulle librerie VoIP e in particolare sulla libreria Ozeki. Mi sono sempre chiesto come la gestione dei media scritti in .net possa essere priva di balbuzie anche sotto carico pesante (specialmente quando il GC è in esecuzione, il che interferisce con l'elaborazione di altri thread). Ti sarei davvero grato se potessi approfondire l'argomento. Forse hai già scritto un post sul blog? Forse è "semplice" perché tutto è già gestito dal codice non gestito esistente? ...
Mi chiedo soprattutto questo perché Ozeki ha affermato che * non * è un problema. Ho specificamente chiesto loro come si assicurano che il GC non stia introducendo balbuzie. Hanno detto di aver fatto "ottimizzazioni" per impedirlo. Purtroppo non sono mai stati più specifici sui dettagli tecnici e rimango un po 'scettico ...
Sfortunatamente Ozeki non sta eseguendo la decodifica gestita, sta usando ffmpeg, ricerca cscodec. È possibile che il gc non introduca studder se non hai abbastanza pressione di memoria in primo luogo per causarlo. Non ho ancora un blog ma rispondo alle domande sulla pagina del progetto che ha un thread in cui viene discussa la decodifica h264.
#4
+1
Ferit
2016-05-10 14:06:54 UTC
view on stackexchange narkive permalink

Sto usando Ozeki SDK, secondo la mia esperienza le ultime versioni (1.3.7 e 1.3.8) non funzionano come previsto in alcuni casi.

Inoltre quasi non c'è supporto.

Sto testando https://sites.google.com/site/sipekvoip/ adesso, è promettente.

#5
  0
Thomas Young
2017-05-08 09:04:15 UTC
view on stackexchange narkive permalink

Prova PortSIP VoIP SDK ( https://www.portsip.com/portsip-voip-sdk/).

Questo è l'SDK potente e facile da usare, supportare più piattaforme; il progetto di esempio gratuito può essere scaricato per testarlo.

Ed ecco la cosa più importante: PortSIP VoIP SDK non è derivato da nessun altro progetto open source. Per quanto ne so, molti SDK sono stati semplicemente modificati da un progetto open source come linphone per poi venderli come commerciali.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...