Сборка VoIP-клиента Linphone из исходных кодов с поддержкой проприетарных видео и аудио кодеков

Этот вопрос я уже несколько раз рассматривал, но как оказалось данные немного устарели и сборка новой версии из Github репозитрия осуществляется немного сложнее и появились новые специфичные подводные камни. Правда стоит отметить, что клиент для Linux и Windows стал выглядеть гораздо лучше хотя в продакшн тащить его я не советую, он еще слишком сырой.

 
 
Логотип GITA-DEV

Автор: Черноусов Антон aka Gita-Dev
Опубликовано: 12 Мар 2018 (последние правки 3 месяца)

acl aptitude codec cv dev git install kde neon voip видео кодек символические ссылки

Сборка Linphone-клиента

GIT-репозитарий проекта:

https://github.com/BelledonneCommunications/linphone-desktop

Для сборки понадобится установить дополнительный набор пакетов приложений и заголовочных файлов:

# aptitude install libtool intltool libgtk2.0-dev libspeexdsp-dev libavcodec-dev libswscale-dev libx11-dev
# aptitude install libv4l-dev libxml2-dev libreadline-dev libgsm1-dev libtheora-dev libsqlite3-dev libupnp4-dev libsrtp-dev
# aptitude install nasm qtquickcontrols2-5-dev qttools5-dev qml-module-qt-labs-platform
# aptitude install libx264-dev x264 ibxv-dev libgl1-mesa-dev libglew1.6-dev 

В простейшем виде сборка проводится следующей последовательностью команд:

# cd /usr/src/
# git clone https://github.com/BelledonneCommunications/linphone-desktop.git
# cd ./linphone-desktop/
# git submodule sync && git submodule update --init --recursive
# ./prepare.py
# make
# make install

Возможные проблемы:

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libturbojpeg.a(libturbojpeg_la-turbojpeg.o): перемещение 
R_X86_64_32 для `.data' не может использоваться при создании разделяемого объекта; перекомпилируйте с -fPIC

В этом случае потребуется собрать libjpeg-turbo отдельно:

# git clone https://github.com/libjpeg-turbo/libjpeg-turbo.git
# cd ./libjpeg-turbo/
# libtoolize --force
# aclocal && autoheader
# automake --force-missing --add-missing
# autoconf
# ./configure
# make CFLAGS=-fPIC 
# make install

Собранные библиотеки установлены в каталог /opt/libjpeg-turbo/lib64 и соответственно этот путь надо добавить к системным путям поиска библиотек (файл /etc/ld.so.conf). Или вы можете создать символические ссылки на скомпилированный пакет библиотек вместо системных:

# rm /usr/lib/x86_64-linux-gnu/libjpeg.*
# rm /usr/lib/x86_64-linux-gnu/libturbojpeg.*
# ln -s /opt/libjpeg-turbo/lib64/libjpeg.* /usr/lib/x86_64-linux-gnu/
# ln -s /opt/libjpeg-turbo/lib64/libturbojpeg.* /usr/lib/x86_64-linux-gnu/

Управление параметрами сборки

Сбрасываем параметры конфигурации:

# ./prepare.py -c

Получить все параметры конфигурации:

# ./prepare.py --list-cmake-variables

Задание определенных опций:

# ./prepare.py -DENABLE_JPEG:BOOL=OFF

Запуск клиента Linphone

Клиент linphone собирается в виде бинарных файлов, библиотек и т.п. во вложенный каталог ./OUTPUT/desktop/, вы соответственно сможете скопировать файлы в аналогичную структуру в каталог /usr/ или создать каталог приложения в /opt/ и я рекомендую именно второй вариант:

# cp -R /usr/src/linphone-desktop/OUTPUT/desktop/ /opt/linphone-desktop

Соответственно запуск приложения можно выполнить командой:

$ /opt/linphone-desktop/bin/linphone

Если у вас уже был установленный клиент linphone, то можно удалить его и создать символическую ссылку:

# rm /usr/bin/linphone
# ln -s /opt/linphone-desktop/bin/linphone /usr/bin/linphone

Сборка с поддержкой всех доступных кодеков

Для сборки с поддержкой всех доступных кодеков переконфигурируйте linphone с параметром --all-codecs:

# ./prepare.py --all-codecs

Посмотреть список загруженных кодеков и плагинов можно запустив клиент Linphone с параметром -V:

$ linphone -V

Выбор GIT-ветки для сборки

Сборка master-ветки требуется скорее для разработчиков, чем для обычных пользователей и я предпочитаю собирать "относительно стабильную версию". Для переключения между гит-ветками используются штатные команды git-клиента.

Получить список веток разработки на удаленном GIT-сервере:

# git branch -a

Переключиться на другую (по умолчанию используется ветка master) ветку разработки:

git checkout remotes/origin/4.1.x

Сборка с использованием строго определенной версии QT

При сборке Linphone-клиента в KDE-Neon с версией QT 5.9.3, у вас пропадет иконка приложения в трэй и навигационное меню в разделе настройки.

Баги в интерфейсе Linphone при использовании последней версии QT

Такое поведение свойственно для всех современных версий QT и вам потребуется собрать Linphone-клиент с использованием QT версии 5.9. На самом деле это не так сложно как кажется на первый взгляд, во первых скачайте с официального сайта QT бинарные файлы для Linux x64, сделайте их исполняемыми, запустите и увидите обычный графический мастер установки:

# wget https://download.qt.io/archive/qt/5.9/5.9.0/qt-opensource-linux-x64-5.9.0.run
# chmod +x ./qt-opensource-linux-x64-5.9.0.run
# ./qt-opensource-linux-x64-5.9.0.run

Установка бинарных файлов QT-библиотек

По завершении установки, задайте переменные окружения указывающие какое окружение QT использовать при сборке:

# export PATH="/opt/Qt5.9.0/5.9/gcc_64/bin/:$PATH"
# export Qt5_DIR="/opt/Qt5.9.0/5.9/gcc_64/lib/cmake"

Пересоберите приложение и проверьте с какой версией QT оно собрано.

После пересборки все меню должны отображаться корректно.

Исправляем версию QT

Похожие статьи

Настройка Fail2ban для Asterisk (FreePBX)

Настройка Fail2ban для Asterisk (FreePBX)

Небольшое описание того, как я возился с настройкой Fail2ban в Centos 7. Что интересно, штатные правила конфигурации для FirewallD с виду работают, добавляют заблокированные адреса в соответствующие цепочки, но подключения клиентов все равно не блокируются. Для Asterisk который является просто лакомым кусочком для разного рода жуликов работать без Fail2Ban крайне опасно.


Сборка и установка дополнительных кодеков для Asterisk (Codec Translators)

Сборка и установка дополнительных кодеков для Asterisk (Codec Translators)

Небольшая шпаргалка как в FreePBX-core добавить проприетарные кодеки. Часть кодеков вы можете использовать бесплатно, а например для кодека g729a вам придется приобрести лицензию. Лицензии покупаются на количество конкурентных подключений и для кодека g729a лицензия стоит 8 долларов, что не так уж и дорого если у вас не колл-центр.


SMS-Server для GOIP-шлюзов (Multy Channels GSM VoIP Gateway)

SMS-Server для GOIP-шлюзов (Multy Channels GSM VoIP Gateway)

Наконец то появилась интересная и нестандартная задача, а именно, надо реализовать отправку СМС-уведомлений о задачах в JIRA по нескольким проектам. Если с Jira все относительно понятно и c его API я уже работал, то реализовать отправку уведомлений через SMS Gateway это задачка уже интереснее.


Скрипт сборки VOIP клиента Linphone из исходных кодов (для Ubuntu Linux)

Скрипт сборки VOIP клиента Linphone из исходных кодов (для Ubuntu Linux)

Flexisip, Linphone и еще несколько технологий представляют собой OpenSource часть VOIP-инфраструктуры разрабатываемой Belledonne Communications и на данный момент это единственное решение IP-телефонии в Linux где помимо голосовых звонков, дополнительно представлен полноценный групповой чат и видео-звонки. Одним из главных минусов этой технологии является ее слабая распространенность и как следствие она недостаточно документирована, но как показывает практика официальной документации вполне хватает, а в случае чего можно и в исходные коды залезть.


SSL защита подключений к Asterisk (Let's encrypt)

SSL защита подключений к Asterisk (Let's encrypt)

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


Пример настройки транка voip.kz в FreePBX

Пример настройки транка voip.kz в FreePBX

Есть такой известный в Казахстане провайдер услуг IP-телефонии как voip.kz с которым мне недавно довелось поработать, точнее его транк потребовалось добавить в Asterisk для приема входящих звонков и совершения исходящих. Как показала практика конфигурацию методом тыка мне подобрать не удалось и пришлось общаться со службой тех. поддержки провайдера.


Отзывы и комментарии