В настоящее время я планирую свой последний год проекта, где я хотел бы создать приложение, которое поддерживает передачу голоса по IP и текстовый чат (хотя не «следующий скайп»). Я просто очень хочу простой и удобный способ закончить работу с VoIP, и он не требует расширенного набора функций, по крайней мере, для начала.
Одна из функций, которые мне нужны, заключается в том, что она не выполняется сервером, а потому, что я не хочу поддерживать сервер после выпуска приложения. Так что, если есть возможность просто передать кому-то свой IP, и он присоединится к нему, предпочтительнее.
Я планирую использовать каркас Qt для GUI, хотя его можно изменить, как и язык (C ++), поэтому ничего не написано в камне. Программное обеспечение будет работать на Windows.
Я посмотрел на H.323, sip и какой-то другой открытый исходный код, но мне кажется, что это так сложно, и я не могу понять, делают ли они то, что мне нужно.
Любые библиотеки с открытым исходным кодом, которые я должен изучить, отчасти выполняет то, что я хочу? Какие источники я пропустил? Я совершенно новичок в мире VoIP и могу использовать толчок в правильном направлении. Снова, если есть язык, который делает это простым способом, я могу просто переключиться, так как я в настоящее время на стадии планирования.
Спасибо за любую помощь, которую я получаю.
Я бы порекомендовал PJSIP.
http://www.pjsip.org/
PJSIP будет обрабатывать SIP а также аудио для вас. (Это тоже оглушило!)
Мне придется не согласиться с другим ответом, ДЕЛАТЬ используйте QT. Там нет причин, чтобы пойти «родной» здесь. PJSIP может не только обрабатывать аудио для вас, но и существует множество других кроссплатформенных аудио-библиотек.
Что касается передачи IP-адресов … если вы собираетесь использовать это в локальной сети, я бы порекомендовал использовать широковещательную передачу UDP для обнаружения других пользователей (и иметь место в пользовательском интерфейсе для определения вашего имени пользователя, чтобы конечные пользователи могли идентифицировать друг друга). Это очень легко сделать в QT.
Сначала я реализовал нечто подобное для своей компании несколько месяцев назад.
Уроки выучены:
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).
Я думаю, что это подытожит проблемы, которые вам необходимо решить, прежде чем углубляться в искусство программирования VoIP.
По твоему вопросу твоя проблема намного меньше.
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.
Удачи 🙂