2012-10-23 29 views
5

Tôi hiện đang lên kế hoạch cho dự án năm cuối cùng của mình là tôi muốn tạo một ứng dụng hỗ trợ thoại qua IP và trò chuyện dựa trên văn bản (mặc dù không phải là "skype tiếp theo"). Tôi chỉ thực sự muốn một cách dễ dàng để sử dụng cách nhẹ để có được phần voip được thực hiện và nó không cần số lượng mở rộng các tính năng, ít nhất là không bắt đầu.C++ và voIP sử dụng P2P

Một trong những tính năng tôi muốn là nó không đi theo máy chủ, nhưng đó là vì tôi không muốn duy trì máy chủ sau khi phát hành ứng dụng. Vì vậy, nếu nó có thể chỉ cần cung cấp cho IP của bạn cho ai đó và họ tham gia sử dụng nó sẽ là thích hợp hơn.

Tôi đang lên kế hoạch sử dụng khung Qt cho GUI, mặc dù nó có thể được thay đổi và có thể là ngôn ngữ (C++), vì vậy không có gì được viết bằng đá. Phần mềm sẽ chạy trên các cửa sổ.

Tôi đã xem H.323, nhâm nhi và một số nguồn mở khác, nhưng có vẻ như rất khó để tham gia và tôi không thể biết liệu họ có làm những gì tôi cần họ làm hay không.

Bất kỳ thư viện nguồn mở nào mà tôi nên xem xét một phần là điều tôi muốn? Bất kỳ nguồn nào tôi đã bỏ lỡ? Tôi hoàn toàn mới với thế giới voip và có thể sử dụng một cú đẩy đúng hướng. Một lần nữa nếu có một ngôn ngữ thực hiện điều này một cách đơn giản, tôi chỉ có thể chuyển đổi kể từ khi tôi đang trong giai đoạn lập kế hoạch. Cảm ơn bạn đã giúp tôi.

+0

[Câu hỏi này] (http://stackoverflow.com/questions/270524/does-anyone-know-of-a-good-simple-c-based-sip-stack-that-i-could-use) giao dịch với SIP, mà tôi tin là giao thức phổ biến nhất cho VoIP. Tôi không phải là những gì quan tâm là với P2P so với máy chủ. P2P chỉ là một trường hợp đặc biệt của máy khách/máy chủ. – paddy

+0

Bạn muốn mức chất lượng nào? (VoIP khá nhiều nhu cầu [Gắn thẻ QoS] (http://www.cse.wustl.edu/~jain/refs/ipqs_ref.htm)). Bạn có muốn hỗ trợ máy trên các thiết bị NAT không? (Nếu vậy, bạn sẽ muốn xem [TURN] (http://tools.ietf.org/html/rfc5766) và [STUN] (http://tools.ietf.org/html/rfc5389), cho người mới bắt đầu). Có thể bạn cũng muốn xem [XMPP] (http://xmpp.org/).Ồ, gần như đã quên: để định cấu hình các bộ định tuyến NAT để hỗ trợ TURN/STUN, bạn thường sử dụng [UPnP] (http://upnp.org/specs/gw/igd1/). –

+0

Tôi không yêu cầu tốt nhất của tốt nhất, miễn là chất lượng là đủ phong nha để nghe những gì mọi người đang nói. Về cơ bản chỉ là công việc. Tôi thậm chí còn không xem xét NAT tbh ... Cần đọc thêm một số điều tôi đoán :) –

Trả lời

1

Trước hết, tôi đã triển khai một cái gì đó tương tự cho công ty của mình một vài tháng trước.

Bài học kinh nghiệm:

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

Tôi nghĩ rằng đây sẽ tổng hợp những vấn đề bạn sẽ cần phải giải quyết đầu tiên, trước khi đào sâu vào nghệ thuật lập trình VoIP.

Đối với câu hỏi của bạn, vấn đề của bạn nhỏ hơn nhiều.

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. 

Chúc may mắn :)

+0

Vui lòng không sử dụng aLaw/uLaw. Sử dụng Opus! http://www.opus-codec.org/downloads/ –

2

Tôi muốn giới thiệu PJSIP. http://www.pjsip.org/

PJSIP sẽ xử lý âm thanh SIP âm thanh cho bạn. (Nó có STUN quá!)

Tôi sẽ phải không đồng ý với câu trả lời khác, DO sử dụng QT. Không có lý do để đi "bản địa" ở đây. PJSIP không chỉ có thể xử lý âm thanh cho bạn mà còn có rất nhiều thư viện âm thanh đa nền tảng khác.

Liên quan đến việc chuyển qua IP ... nếu bạn dự định sử dụng mạng LAN này, tôi khuyên bạn nên sử dụng phát sóng UDP để khám phá những người dùng khác (và có một vị trí trong giao diện người dùng để xác định tên người dùng của bạn để người dùng cuối có thể xác định lẫn nhau). Điều này rất dễ thực hiện trong QT.

Các vấn đề liên quan