2012-10-23 15 views
5

Obecnie planuję mój ostatni projekt roku, gdy chcę utworzyć aplikację, która obsługuje voice over IP i chat oparty na tekście (choć nie "następny skype"). Po prostu chcę mieć łatwy w użyciu, lekki sposób na uzyskanie części VoIP i nie wymaga dużej ilości funkcji, przynajmniej nie na początek.C++ i voIP używające P2P

Jedną z funkcji, których chciałem, jest to, że nie przechodzi przez serwer, ale to dlatego, że nie chcę utrzymywać serwera po wydaniu aplikacji. Jeśli więc możliwe jest podanie komuś swojego adresu IP, a skorzystają z niego, byłoby to lepsze.

Mam zamiar użyć ramy Qt dla GUI, choć można go zmienić, podobnie jak język (C++), więc nic nie jest napisane w kamieniu. Oprogramowanie będzie działać w systemie Windows.

Spojrzałem na H.323, łyk i kilka innych otwartych źródeł, ale wydaje się, że tak trudno jest się do nich dostać i nie mogę się dowiedzieć, czy robią to, co ich potrzebuje.

Jakieś biblioteki Open Source, do których powinienem zaglądać, to częściowo to, czego chcę? Jakieś źródła, które przegapiłem? Jestem całkowicie nowy w świecie VoIP i mogę użyć pchnięcia we właściwym kierunku. Ponownie, jeśli istnieje język, który robi to w prosty sposób, mogę po prostu zmienić, ponieważ jestem obecnie w fazie planowania. Dzięki za pomoc, którą otrzymuję.

+0

[To pytanie] (http://stackoverflow.com/questions/270524/does-anyone-know-of-a-good-simple-c-based-sip-stack-that-i-could-use) zajmuje się SIP, który uważam za najbardziej rozpowszechniony protokół VoIP. Nie rozumiem, o co chodzi z P2P a serwerem. P2P to tylko szczególny przypadek klienta/serwera. – paddy

+0

Jaki poziom jakości chcesz? (przyzwoite VoIP ma duże potrzeby [tagowanie QoS] (http://www.cse.wustl.edu/~jain/refs/ipqs_ref.htm)). Czy chcesz obsługiwać maszyny przez urządzenia NAT? (Jeśli tak, zajrzyj do [TURN] (http://tools.ietf.org/html/rfc5766) i [STUN] (http://tools.ietf.org/html/rfc5389) dla przystawki). Prawdopodobnie chcesz również spojrzeć na [XMPP] (http://xmpp.org/).O, prawie zapomniałem: aby skonfigurować routery NAT do obsługi TURN/STUN, zwykle używasz [UPnP] (http://upnp.org/specs/gw/igd1/). –

+0

Nie wymagam najlepszych z najlepszych, o ile jakość jest wystarczająco dobra, aby usłyszeć, co ludzie mówią. Zasadniczo po prostu wykonuje pracę. Nie zastanawiałem się nawet nad NAT tbh ... Muszę to jeszcze trochę przeczytać :) –

Odpowiedz

1

Najpierw zaimplementowałem coś podobnego dla mojej firmy kilka miesięcy temu.

Wnioski:

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

myślę, że to będzie podsumować problemy trzeba będzie rozwiązać najpierw, zanim zagłębiając się w sztuce programowania VoIP.

Na twoje pytanie twój problem jest znacznie mniejszy.

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. 

Powodzenia :)

+0

Proszę nie używać aLaw/uLaw. Użyj Opus! http://www.opus-codec.org/downloads/ –

2

Polecam PJSIP. http://www.pjsip.org/

PJSIP obsłuży dźwięk SIP i dla Ciebie. (Ma też STUN!)

Będę musiał się nie zgodzić z drugą odpowiedzią: DO użyj QT. Nie ma powodu, aby tu "rodzimy". PJSIP może nie tylko obsługiwać audio dla Ciebie, ale istnieje wiele innych bibliotek audio na różnych platformach.

Jeśli chodzi o przekazywanie adresów IP ... jeśli zamierzasz używać tego w sieci LAN, polecam użycie transmisji UDP, aby odkryć innych użytkowników (i mieć miejsce w interfejsie użytkownika, aby zdefiniować swoją nazwę użytkownika, aby użytkownicy końcowi mogli zidentyfikować wzajemnie). Jest to bardzo łatwe do osiągnięcia w QT.

Powiązane problemy