Автор: Пользователь скрыл имя, 25 Февраля 2013 в 05:48, дипломная работа
После появления первого устройства под управлением Android, стало возможным предоставить пользователю возможность использовать Интернет-телефонию так же, как и GSM телефонию. Широкополосный доступ в Интернет, многозадачность операционной системы дали возможность пользователю забыть о проблемах, связанных с Интернет связью. До Android самые удобные приложения Интернет-телефонии предлагала ОС iPhone, но с ее ограниченной многозадачностью невозможно использовать другие приложения вместе с Интернет-телефонией, что означает, например, невозможность читать документы и одновременно принимать звонки.
1. Введение 5
1.1. Постановка задачи 5
1.2. Этапы работы 8
1.3. Введение в предметную область 10
1.3.1. Общие сведения о SIP телефонии 10
1.3.2. Принципы SIP протокола 11
1.3.3. Архитектура сети 12
1.3.4. Сообщения протокола SIP 13
1.3.5. Сравнение SIP с H.323 15
1.3.6. Сравнение SIP с Skype 17
2. Описание предлагаемого решения 19
2.1. Выбор платформы решения 19
2.2. Описание использования приложения 20
3. Реализация решения 24
3.1. Реализация низкоуровнего модуля, работающего со звуком напрямую 24
3.1.1. AudioRecordWrapper 26
3.1.2. AudioTrackWrapper 27
3.1.3. QueuedBuffer 28
3.2. Принцип работы “Handover” 29
3.3. Архитектура проекта “MC Client” 31
3.4. Ключевые классы элементов архитектуры. 33
3.4.1. Activity. 33
3.4.2. SipServiceWrapper 35
3.4.3. Service 36
3.4.4. SIPEngine 39
4. Реализация и применение решения 43
5. Сравнительный анализ 45
6. Заключение 47
7. Список литературы 48
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=sendrecv
Рекомендации ITU-T, входящие
в стандарт H.323, определяют порядок
функционирования абонентских терминалов
в сетях с разделяемым
В результате появления стандарта H.323, описывающего механизмы взаимодействия устройств обеспечивающих передачу голоса и видео по IP сетям, появилась возможность объединять в сети устройства различных производителей, что эффективно для сетей специальной связи.
Если сравнивать SIP с H.323, то SIP легче читается человеком и структурирован в отношении запросов и откликов.
Сторонники SIP также заявляют о нём как о более простом по сравнению с H.323. Однако некоторые считают, что, в то время как первоначально целью SIP была простота, в своём сегодняшнем виде он стал так же сложен, как и H.323. Другие считают, что SIP — протокол без состояний, который тем самым даёт легко реализовать восстановление при отказе и другие возможности, которые затруднены в протоколах с состояниями, таких как H.323. SIP и H.323 не ограничены голосовой связью, они могут обслуживать любой сеанс связи, от голосового до видеосеанса или приложений будущего.
Параметр сравнения |
SIP |
H.323 |
Дополнительные услуги |
Набор услуг, поддерживаемых обоими протоколами примерно одинаков | |
Персональная мобильность пользователей |
Имеется хороший набор средств поддержки мобильности |
Персональная мобильность поддерживается, но менее гибко |
Расширяемость протокола |
Удобная расширяемость, простая совместимость с предыдущими версиями |
Расширяемость поддерживается, но существует ряд сложностей |
Масштабируемость сети |
Оба протокола обеспечивают хорошую масштабируемость сети | |
Время установления соединения |
Достаточно одной транзакции |
Требуется несколько транзакций. |
Сложность протокола |
Простой, мало запросов, текстовый формат сообщений |
Сложный, много запросов и протоколов, двоичное представление сообщений |
SIP и Skype предлагают два различных подхода к VoIP связи. SIP обладает гибкостью, Skype прост в установке, использовании и обладает прозрачным сетевым доступом; оба предлагают отличное качество звука.
Параметр сравнения |
SIP |
Skype |
Лицензия |
Публичная |
Проприетарная |
Аутентификация |
Каждый VoIP SIP провайдер предлагает свой собственный сервер регистрации для своих подписчиков |
Единый централизованный сервер регистрации, поддержка пользователей по всему миру |
Архитектура |
Клиент-серверная – есть сервер регистрации и агенты пользователей |
Распределенная – есть вершины (клиент) и супервершины (вершины с большими аппаратными ресурсами). |
Масштабируемость сети |
Хорошая |
Отличная – число супервершин возрастает, как только возрастает число вершин |
Кодеки |
Чаще всего G.711, для корпоративных сетей G.729 |
Для узких каналов связи iLBC, для широких iSAC |
Проход через сетевые защиты(Firewalls) |
STUN server анализирует доверенность агента – не всегда хорошо работает |
Проблемы отсутствуют |
Защищенность |
Все сообщения передаются по Интернету в виде обычного текста |
Каждый пакет шифруется |
В качестве платформы для разработки приложения SIP телефонии был выбран Android.
Поскольку разработка приложения проводилась в ходе рабочего проекта, то при выборе платформы рассматривались как технические, так и экономические факторы, например многозадачность операционной системы, отсутствие приложений SIP телефонии на момент начала проекта и удобство разработки мобильных приложений.
Для удобства большая часть разработки велась на платформе Windows для настольных компьютеров, сборка низкоуровнего модуля в виде библиотеки велась на платформе Linux, так как компилятор arm gcc существовал только для Linux. При этом стоит отметить, что при переносе приложения на платформу Android возник ряд технических проблем:
Приложение SIP телефонии, написанное в ходе дипломной работы, будет далее обозначено как “MC Client”. MC Client ориентирован на использование точек доступа Wi-Fi. Когда пользователь заходит в приложение впервые (рисунок 3), он вводит свои данные для SIP регистрации (такие, как адрес сервера, порт, имя пользователя – рисунок 5) в разделе настроек (рисунок 4).
Рисунок 3: Главное окно приложения Рисунок 4: Настройки (settings)
Рисунок 5: Настройки соединения с сервером (SIP Settings)
Далее, когда пользователь находится вблизи точки доступа Wi-Fi, идет автоматическая попытка соединения через найденную точку доступа. В случае успеха (рисунок 6), пользователь регистрируется на сервере, который он указал в настройках.
Рисунок 6: Сообщение об успешной регистрации
MC Client очень тесно интегрируется со стандартным dialer (приложение для GSM звонков), находящемся в операционной системе Android. Происходит это следующим образом:
В данном случае идет стандартный звонок через Dialer по GSM, средствами операционной системы Android. Т.е. все происходит так, как если бы приложение ни на что не влияло
В указанном случае, звонок, инициируемый dialer, - обрывается. Берется номер, набранный пользователем, и считается, что он набирал SIP адрес.
Рисунок 7: Окно выбора типа звонка
К номеру подставляются данные из настроек приложения, чтобы получился правильный SIP адрес (адрес сервера и порт). По составленному SIP адресу идет дозвон на сервер средствами реализации протокола SIP.
Рисунок 8: Дозвон до абонента Рисунок 9: Разговор с абонентом
Результаты SIP звонков отображаются в логе dialer, как если бы пользователь говорил по GSM(кто звонил, сколько времени говорил и другая информация о разговоре).
Основное преимущество проекта SIP телефонии “MC Client” перед конкурентами состоит в работе на всех версиях Android. В частности, для версий 1.1 и 1.5 было необходимо реализовывать низкоуровневый модуль, работающий со звуком напрямую. Реализации для версий 1.1 и 1.5 очень схожи и отличаются лишь в нескольких константах и параметрах, передаваемых методам, поэтому далее будет описана лишь реализация для Android 1.5.
Всего в модуле есть 3 ключевых сущности: AudioRecordWrapper (рисунок 10) – native обертка для записи звука с микрофона, AudioTrackWrapper (рисунок 10) – native обертка для проигрывания звука на динамиках и QueuedBuffer (рисунок 11) – буфер, через который проходит звук, прежде чем попасть на целевую компоненту.
Рисунок 10: Поля и методы классов AudioRecordWrapper и AudioTrackWrapper
Рисунок 11: Буфер хранения информации
Далее будет описаны основные методы ключевых сущностей. В данном разделе не будет описана инициализация и использование ключевых сущностей низкоуровнего модуля в дипломном проекте “MC Client”, так как это стандартная процедура работы с native классами через JNI[7].
~AudioRecordWrapper() – деструктор, при уничтожении объекта остановить запись звука и уничтожить все связанные переменные.
audioRecordCallback(int event, void* user, void *info) – callback метод о событии, присылаемом ОС Android. В частности, получение новой порции информации с микрофона, которую требуется положить в буфер.
handleEvent(int event, void* voidInfo) – метод обработки события, которое пришло от ОС Android.
onMoreData(const android::AudioRecord::Buffer* info) – при получении новой порции информации положить ее в буфер.
read(char* data, int maxSize) – прочитать данные из буфера.
start() – запустить запись звука.
stop() – остановить запись звука.
~AudioTrackWrapper() – деструктор, при уничтожении объекта остановить проигрывание звука и уничтожить все связанные переменные.
audioTrackCallback (int event, void* user, void *info) – callback метод о событии, присылаемом ОС Android. В частности, получение новой порции информации от динамиков о том, что проигралось некое количество информации и требуется высылать еще.
handleEvent(int event, void* voidInfo) – метод обработки события, которое пришло от ОС Android.
onMoreData(android::
write(const char* data, int size) – отправить данные из буфера на динамик.
start() – запустить проигрывание звука на динамиках.
stop() – остановить проигрывание звука на динамиках.
~QueuedBuffer() – деструктор, при уничтожении объекта уничтожить все связанные переменные.
clear() – в режиме блокировки сбросить все индексы – такие как индекс чтения, индекс записи и размер активных данных в буфере.
get(char* data, int size) – записать в data данные из буфера размером в size.
put(const char* data, int size) – записать в буфер данные из data размером size.
lock(), unlock() – обеспечение режима блокировки. Чтобы обращаться с переменными одновременно мог только один поток (очевидно, что запись звука и проигрывание звука совершаются в разных потоках).
Информация о работе Реализация SIP-телефонии для мобильных устройств с операционной системой Android