Search
Write a publication
Pull to refresh

Пишем свой сервис IP-телефонии с использованием OPAL. Глава 1

Многие из нас уже хорошо знакомы с технологиями голосовой связи с использованием IP сетей. Кто-то просто использует софтофоны для совершения звонков (например знаменитый Skype), а кто-то строит на этом свой бизнес или использует для решения своих технических задач. Про достоинства и недостатки VoIP написано горы статей, в том числе много материалов об использовании готовых решений (IP-телефоны, шлюзы, АТС и т. п.). Но что делать, если необходимо внедрить VoIP в разрабатываемое вами приложение или просто написать свой IP-телефон?

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

К счастью, великое сообщество OpenSource не стоит на месте. Открытые разработки есть в том числе и в области IP-телефонии. Я открыл для себя подходящее решение — библиотеку OPAL для С++, которая умеет все необходимое для реализации моей задачи. Поставляется совместно с библиотекой PTLib, которая используется как прослойка между OPAL и железом с системой, что делает этот инструмент универсальным и кроссплатформенным (можно писать для *nix, Windows, WinCE, MacOS). Недостаток в том, что вся документация OPAL представляет собой просто Class Reference, автоматически сгенерированный doxygen-ом, плюс несколько примеров, включая простой софтофон под названием OpenPhone.



Итак, что нам дает OPAL:
  • поддержка SIP и H.323, включая возможность авторизации, регистрации и прокси
  • поддержка основных звуковых и видео кодеков, плюс возможность писать\подключать плагины для коммерческих алгоритмов сжатия
  • поддержка переадресации вызовов, в том числе внутренняя переадресация между EndPoint-ами.
  • набор переносимых классов библиотеки PTLib, которая включает поддержку многопоточности, интеллектуальные указатели, строки, работу со звуковыми устройствами, с видео устройствами и еще много всяких полезностей.

Цель статьи — продемонстрировать, как можно быстро и удобно реализовать VoIP в своем приложении на базе библиотеки OPAL. Весь материал в одну статью не поместится, поэтому начну со сборки необходимого инструментария и настройки среды для работы с OPAL.

Для начала работы нужно скачать исходные коды библиотек и скомпилировать их. Я использовал MS Visual Studio 2008, поэтому все рекомендации будут для этого инструмента.

Качаем исходники:
OPAL-3.8.2
PTLib-2.8.2

Там же можно скачать архивы с документацией:
OPAL-htmldoc
PTLib-htmldoc

Кроме этого нужно скачать GNU Bison, он потребуется при сборке.

В OPAL есть поддержка OpenSSL, DirectX, Ruby, OpenLDAP, SDL, Expat и при сборке библиотеки они должны подключиться автоматически, если установлены пакеты разработки.

Сначала создадим папку C:\Tools и закинем туда Bison. Потом открываем студию и прописываем путь к этой папке. Заходим Tools – Options – Project and Solutions – VC++ Directories, выбираем Win32 – Executable files и добавляем строчку C:\Tools



Распаковываем архивы с исходниками например в папки c:\voip\ptlib-2.8.2 и c:\voip\opal-3.8.2. Открываем с помощью студии файл c:\voip\ptlib-2.8.2\ptlib_2008.sln и видим дерево проектов:



Теперь нужно прописать пути к OPAL и PTLib. Открываем тот же диалог Tools – Options – Project and Solutions – VC++ Directories и в разделы Win32 – Include files добавляем папки c:\voip\opal-3.8.2\include и c:\voip\ptlib-2.8.2\include.



В раздел Win32 – Library files добавляем папки c:\voip\opal-3.8.2\lib и c:\voip\ptlib-2.8.2\lib (если папки lib отсутствуют, то их нужно предварительно создать).



Теперь можно запускать сборку проекта PTLib DLL (в моем случае мне нужна динамически загружаемая библиотека). Выбираем конфигурацию Release и начинаем сборку. Должен запуститься скрипт конфигурации, который будет искать установленные SDK в системе. Необходимо внимательно следить за процессом и проверять правильность найденных путей.

Если у вас установлены также другие компиляторы, то нужно исключить их из путей поиска, иначе могут быть конфликты. Для этого создайте переменную окружения с именем VSNET2008_PTLIB_CONFIGURE_EXCLUDE_DIRS и укажите значением переменной список папок через точку с запятой (у себя я отключил использование Ruby и OpenSSL путем добавления их папок в исключения, также добавил туда установленный GCC).



Если скрипт конфигурации успешно отработал, начнется сборка библиотеки. Обратите внимание, даже если вы выбрали собирать DLL, сначала будет скомпилирован проект PTLib Static, а потом запустится MergeSym и будет собрана DLL.

В процессе компиляции студия может выдавать ошибки неправильных символов конца строки для некоторых файлов:
1>c:\voip\ptlib-2.8.2\include\ptlib/syslog.h : error C4335: Mac file format detected: please convert the source file to either DOS or UNIX format

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



Если в таких файлах объявлены макросы с использованием переноса строки (символ \), то нужно убрать пустые строки, иначе не скомпилируется.



После успешной сборки, в папке c:\voip\ptlib-2.8.2\lib вы найдете ptlib.dll и ptlib.lib, или ptlibd.dll и ptlibd.lib если вы компилировали Debug версию.

Теперь можно приступить к сборке самой библиотеки OPAL. Заходим в папку c:\voip\opal-3.8.2 и открываем файл opal_2008.sln. В процессе загрузки проектов студия может выдать сообщения об ошибках, что некоторые проекты не найдены, игнорируем их.



Выбираем конфигурацию Release и запускаем сборку проекта OPAL_dll. По аналогии с PTLib, сначала скомпилируется OPAL_Static, потом OPAL_dll. По идее, сборка должна пройти без проблем, за исключением некоторых файлов с неправильным символом конца строки:
1>c:\voip\opal-2.8.2\src\opal\recording.cxx : error C4335: Mac file format detected: please convert the source file to either DOS or UNIX format

Для исправления действуем аналогично предыдущему случаю.

В результате имеем файлы opal.dll и opal.lib в папке c:\voip\opal-3.8.2\lib.

На этом этапе сборка библиотеки завершена и можно пока почитать документацию и установить OpenPhone для экспериментов. В следующей части приступим непосредственно к написанию кода.

Полезные ссылки:


Сайт OPAL http://www.opalvoip.org/
Компиляция под Windows http://www.opalvoip.org/wiki/index.php?n=Main.BuildingPTLib
Онлайн Reference http://www.opalvoip.org/wiki/index.php?n=Main.APIDocumentation
Файлы для скачивания http://sourceforge.net/projects/opalvoip/files/
Статья в Wiki http://ru.wikipedia.org/wiki/OpenH323
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.