Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Аналог скайпа...прошу совета..


Автор: tonchitos 11.4.2007, 00:30
Я буду ваять курсовик. Хочу сделать куцый аналог скайпа. То есть перехватывать голосовые сообщения, шифровать их и передавать, а там, соответственно получать и тд. Ну и еще чего нить к нему приделаю...но это уже в процессе..

Но я в сетевом программировании нолик. smile  
Посоветуйте, что мне нужно освоить для решения этой задачи..Программирую на Visual C++(знаю апи и мфс). Время на курсовик у меня - два месяца(я успею разобраться, да?  smile ).

Жду любых советов подсказок и мыслей. 
Заранее всем спасибки..

Добавлено через 3 минуты и 27 секунд
И ссылочки кидаааайте, да побоооольше!  

Автор: azesmcar 11.4.2007, 08:47
Скайп использует технологию VoIP (Voice Over IP). Короче говоря это не самое простое что можно придумать для курсовой. Для начала ты должен выбрать для себя какой нибудь протокол, хотя в принципе если тебе нужно чтоб пользователи могли общатся только через твою программу это не обьязательно. Можешь придумать свой. Но если подойти к делу серьезно, то нужен протокол.
На данный момент http://www.ietf.org/rfc/rfc3261.txt наилучший вариант. Хотя с протоколом http://www.packetizer.com/voip/h323/standards.html микрософт облегчит тебе путь (смотри TAPI - Telephony Application Programming Interface ). Кроме этого нучно изучить механизм передачи голоса по интернет, т.е. алгоритм преобразования Analog-Digital. Алгоритм смотри здесь

http://en.wikipedia.org/wiki/Nyquist%E2%80%93Shannon_sampling_theorem

Также почитай описание технологии VoIP
Цитата

Технология передачи голосовой информации с использованием протокола IP имеет за рубежом устоявшееся название Voice Over IP (VOIP). Одним из приложений этой технологии является Интернет-телефония (Internet Telephony). Интернет-телефония - технология передачи голосовой информацией в режиме реального времени через Интернет или любую другую сеть на основе протокола IP (Internet Protocol). Поэтому Интернет-телефонию часто называют IP-телефонией (IP telephony).

Передача голоса по Интернет происходит в несколько этапов. Первый этап - это оцифровка голоса. Затем оцифрованные данные анализируются и обрабатываются с целью уменьшения физического объема данных, передаваемых получателю. На этом этапе происходит подавление ненужных пауз и фонового шума, а также компрессирование. На следующем этапе полученная последовательность данных разбивается на пакеты и к ней добавляется протокольная информация - адрес получателя, порядковый номер пакета на случай, если они будут доставлены не последовательно, и дополнительные данные для коррекции ошибок.

Компрессия данных позволяет передавать по Интернет-каналу одновременно несколько разговоров (в отличие от традиционной телефонии, где для передачи одного разговора используется целый канал), что существенно уменьшает стоимость междугородних и международных телефонных разговоров по сравнению с традиционной телефонией.

Извлечение переданной голосовой информации из полученных пакетов также происходит в несколько этапов. Когда голосовые пакеты приходят на терминал получателя, то сначала проверяется их порядковая последовательность. Поскольку IP-сети не гарантируют время доставки, то пакеты со старшими порядковыми номерами могут прийти раньше, более того, интервал времени получения также может колебаться. Для восстановления исходной последовательности и синхронизации происходит временное накопление пакетов. Однако некоторые пакеты могут быть вообще потеряны при доставке, либо задержка их доставки превышает допустимый разброс. В обычных условиях приемный терминал запрашивает повторную передачу ошибочных либо потерянных данных. Передача голоса критична ко времени доставки, поэтому включается алгоритм аппроксимации, позволяющий на основе полученных пакетов приблизительно восстановить потерянные, либо эти потери просто игнорируются, а пропуски заполняются данными случайным образом. Отсюда возникают небольшие искажения голоса при передаче. Кроме того, так как IP-пакеты проходят через несколько маршрутизаторов, то во время разговора возникают небольшие (0,1 - 0,4 секунды) задержки.

Для передачи голосовой информации Трансинфосеть использует высококачественные каналы с большой полосой пропускания, и практически полным отсутствием потерь пакетов, что позволяет достичь уровня качества, сравнимого с качеством традиционной телефонии.


Автор: tonchitos 11.4.2007, 13:44
Спасибо....а..я за два месяца успею? Как думаете?
И еще, люди, ссылочки то на русском кидайте...а то на инглише у мя скорость чтения ниже в 10 раз, неудобно оч.

Автор: Бонифаций 11.4.2007, 13:49
если писать с нуля - два месяца слишком мало

В качестве отправной точки посмотрите исходники twinkle (его можно собрать  совсем без GUI), и проект ccrtp

Автор: tonchitos 11.4.2007, 13:59
Цитата

Скайп использует технологию VoIP (Voice Over IP).

Да мне не важно, какую технологию использует скайп, мне нужно написать прогу, которая перехватывает звук у микрофона, шифрует(как любой файл), передает, принимает, расшифровывает,ну тож самое можно делать и с текстом.
Цитата

Короче говоря это не самое простое что можно придумать для курсовой.

Поэтому если есть простая технология, то советуйте. 

Автор: azesmcar 11.4.2007, 14:37
Цитата

И еще, люди, ссылочки то на русском кидайте...


Что-то не припоминаю чтобы RFC на русском писали smile если хочешь программировать придеться учить английский, потому что некоторые вещи на русский никто не перевел и вряд ли переведет.

Цитата

Да мне не важно, какую технологию использует скайп

не сходится
Цитата

Аналог скайпа...


Аналог скайпа означает что ты сможешь звонить не только на компьютер но и на обычный домашний телефон..т.е. IP Телефония.
Если нет, тогда тебе просто нужен Voice Chat. Правда это не особо облегчит твое дело, все равно АЦП звука придется писать.

Цитата

Поэтому если есть простая технология, то советуйте.  


Очень простая технология...записываешь звук, преобразовываешь и посылаешь серверу. С нуля за 2 месяца не напишешь, особенно если не знаком с VoIP. Лучше посмотри на уже готовые решения
Цитата

В качестве отправной точки посмотрите исходники twinkle (его можно собрать  совсем без GUI), и проект ccrtp

попробуй реализовать используя TAPI (в этом случае можешь в качестве клиента использовать Phone Dailer), или пересмотри тему курсовика.

Автор: witex 12.4.2007, 15:04
я думаю полный аналог скайпа не нужен, потому что он то не сразу VOIP использовал! и на простые телефоны только через пару лет звонить начал! вообьще лудще простой аналог сетевой звонилки сдеть вот и всё! идин к одному! 
Естественно в асинхронном режиме!
потому что так  синхронном будет смещение звука и искожение!

преоброзовывать советую в МП3 формат и  посылатть однин паккет с его контрольной суммой МД5! будет проще. и надёжно! а шифрование зачем тебе я не понимаю!

Цитата

Очень простая технология...записываешь звук, преобразовываешь и посылаешь серверу.


в скайпе звук не посылается серверу! он послыется сразу абоненту! сервер только следит за тем кто в онлайне! сервером только становиться тот кто звонит! а ваабще если посмотреть , на коференцию в скайпе то там даже если организатор в офлайн удёт она будет жить! так что Скайп сервер следит только за тем, если звонок или нету! и ни чего более! остальное всё передаётся P2P-

Автор: AndreyK 13.4.2007, 19:44
Я бы воспользовался обычным API

открываем:
waveInOpen 
waveInStart

записываем в буфер:
waveInPrepareHeader
waveInAddBuffer
waveInUnprepareHeader

по мере записи передаём по сети обычным send

принимаем в буфер recv
открываем:
waveOutOpen
проигрываем:
waveOutWrite

где-то есть готовые примеры ... 

Автор: AndreyK 16.4.2007, 15:12
Есть альтернативный вариант:
Берём какую нибудь программу, которая всё это может (например до XP был  NetMeeting , а теперь ,наверное, какая ни будь другая утилита винды может) и используем его для передачи звука по сети, через встроенный в него интерфейс.

Надо только в инструкциях разобраться...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)