2012-10-23 14 views
5

Attualmente sto pianificando il mio progetto per l'ultimo anno in cui desidero creare un'applicazione che supporti la voce su IP e la chat basata sul testo (anche se non il "prossimo skype"). Voglio solo un modo leggero e facile da usare per ottenere la parte voIP con e non ha bisogno di una grande quantità di funzionalità, almeno non per cominciare.C++ e voIP utilizzando P2P

Una delle funzionalità che volevo era che non passasse per un server, ma è perché non voglio mantenere un server dopo il rilascio dell'applicazione. Quindi, se è possibile dare il tuo IP a qualcuno e unirsi a questo, sarebbe preferibile.

Sto progettando di utilizzare il framework Qt per la GUI, sebbene possa essere modificato e così anche il linguaggio (C++), quindi niente è scritto nella pietra. Il software verrà eseguito su Windows.

Ho guardato H.323, sorseggiare e qualche altro open source, ma sembra così difficile entrare e non riesco a capire se fanno quello che ho bisogno che facciano.

Qualsiasi libreria open source che dovrei esaminare fa in parte ciò che voglio? Qualche fonte che ho perso? Sono completamente nuovo nel mondo VoIP e potrei usare una spinta nella giusta direzione. Anche in questo caso, se esiste un linguaggio che fa questo in modo semplice, posso passare da quando sono attualmente in una fase di pianificazione. Grazie per l'aiuto che ottengo.

+0

[Questa domanda] (http://stackoverflow.com/questions/270524/does-anyone-know-of-a-good-simple-c-based-sip-stack-that-i-could-use) si occupa di SIP, che credo sia il protocollo più diffuso per VoIP. Io non so quale sia la preoccupazione per il P2P rispetto al server. P2P è solo un caso speciale di client/server. – paddy

+0

Che livello di qualità vuoi? (il VoIP decente ha praticamente bisogno di [QoS tagging] (http://www.cse.wustl.edu/~jain/refs/ipqs_ref.htm)). Vuoi supportare macchine su dispositivi NAT? (Se è così, ti consigliamo di esaminare [TURN] (http://tools.ietf.org/html/rfc5766) e [STUN] (http://tools.ietf.org/html/rfc5389), per antipasti). Probabilmente vuoi anche guardare [XMPP] (http://xmpp.org/).Oh, quasi dimenticavo: per configurare i router NAT per supportare TURN/STUN, normalmente si usa [UPnP] (http://upnp.org/specs/gw/igd1/). –

+0

Non ho bisogno del meglio del meglio, purché la qualità sia abbastanza decente da sentire ciò che le persone stanno dicendo. Fondamentalmente fa solo il lavoro. Non ho nemmeno considerato NAT tbh ... Ho bisogno di leggerlo un po 'di più suppongo :) –

risposta

1

In primo luogo, ho implementato qualcosa di simile per la mia azienda qualche mese fa.

Lezioni apprese:

1. you can't just pass IPs around and expect the users to like that over skype. 
    Solution: 
     a. You will need your own server with the necessary ports forwarded. You will have to use some sort of firewall hole punching algorithm(take a look at UDP hole punching). 

2. Using existing VoIP library is always better. Downside? You can't write proprietary code using opensource library. Hence you will need to learn H.323 and RTCP/RTP protocol. 

3. You will need to write echo reduction algorithms for voice. 

4. COMPRESS your audio data before sending it to another computer. PCM data can and will clog your network, delaying sound and fuzzing up everything in the process. 
Use aLaw and uLaw compression schemes. 

5. Make sure you take care of all the error conditions. Multimedia over network can be tricky if not really hard to implement. 

6. DONT USE QT. Use a platform specific framework like .NET and libraries that deal with sound (NAudio). 

Penso che questo sarà riassumere i problemi che sarà necessario per risolvere in primo luogo, prima di approfondire l'arte della programmazione VoIP.

Per la tua domanda, il tuo problema è molto più piccolo.

1. You don't need echo reduction algorithms IF you use headsets. 
2. You don't need to write hole punching algorithms if you're OK with passing IPs around. Take a look at NAT traversal(UPnP?) if the data is suppose to go on a network and to a computer that isn't on your LAN. 

FLOW: 
COMPUTER1->DATABUFFER->COMPRESSuLaw/aLaw->NETWORK->DECOMPRESSuLaw/aLaw->OTHERCOMPUTER 
and vice versa. 

Buona fortuna :)

+0

Si prega di non utilizzare aLaw/uLaw. Usa Opus! http://www.opus-codec.org/downloads/ –

2

mi sento di raccomandare PJSIP. http://www.pjsip.org/

PJSIP gestirà il SIP e l'audio per voi. (Anche STUN!)

Dovrò essere in disaccordo con l'altra risposta, DO utilizzare QT. Non c'è motivo di andare "nativo" qui. PJSIP non solo può gestire l'audio per te, ma ci sono molte altre librerie audio multipiattaforma.

Per quanto riguarda il passaggio degli IP ... se si intende utilizzarlo sulla LAN, raccomanderei l'utilizzo di una trasmissione UDP per scoprire altri utenti (e avere un posto nell'interfaccia utente per definire il proprio nome utente in modo che gli utenti finali possano identificare l'un l'altro). Questo è molto facile da realizzare in QT.