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

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

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

Фотография автора

Автор: Антон Черноусов
Опубликовано: 3 месяца, 1 неделя (последние правки: 0 минут назад) - 5 комментариев
Категории записи: Linux, Ubuntu, 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

Пожалуйста, оцените мою статью (всего оценок 1, средняя оценка 4.00):

Комментарии к статье:

Людмила 1 неделя, 2 дня назад

Здравствуйте.
У меня на десктопе установлен Linux Mint 18.2
Я сначала устанавливаю дополнительный набор пакетов. Затем выполняю следующие команды:
# cd /home/lyudmila
#git clone git://git.linphone.org/linphone-desktop.git --recursive
# cd linphone-desktop
# git submodule sync && git submodule update --init --recursive
# ./prepare.py
# make

make заканчивается ошибкой:
-- Checking for module 'libbsd'
-- No package 'libbsd' found.

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

Ссылка | Ответ

Антон Черноусов 1 неделя, 2 дня назад

Для Mint я не собирал.

Ссылка | Ответ

Liudmila 1 неделя назад

Здравствуйте.
Когда я запускаю команду ./prepare.py то получаю в ответ cmake команду, указанную ниже. Меня смущает параметр -DLINPHONE_BUILDER_TARGET=linphoneqt, ведь у меня стационарный компьютер с операционной системой Linux Mint, причем здесь Qt. Может я чего-то не понимаю, вы не могли бы мне дать ссылку или коротко объяснить, чему должен быть равен этот параметр.

lyudmila-linuxmint linphone-desktop # ./prepare.py
cmake /home/lyudmila/linphone-desktop/submodules/cmake-builder -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=/home/lyudmila/linphone-desktop/OUTPUT/desktop -DCMAKE_INSTALL_PREFIX=/home/lyudmila/linphone-desktop/OUTPUT/desktop -DCMAKE_NO_SYSTEM_FROM_IMPORTED=YES -DLINPHONE_BUILDER_WORK_DIR=/home/lyudmila/linphone-desktop/WORK/desktop -DCMAKE_INSTALL_MESSAGE=LAZY -DLINPHONE_BUILDER_CONFIG_FILE=configs/config-desktop.cmake -DLINPHONE_BUILDER_EXTERNAL_SOURCE_PATH=/home/lyudmila/linphone-desktop/submodules -DLINPHONE_BUILDER_EXTERNAL_BUILDERS_PATH=/home/lyudmila/linphone-desktop/cmake_builder -DLINPHONE_BUILDER_TARGET=linphoneqt

Ссылка | Ответ

Liudmila 6 дней, 15 часов назад

Установлено у меня Qt 5.9.0
Мне пришлось дополнительно поставить пакеты:
sudo apt-get install libbsd-dev
sudo apt-get install libglew-dev
sudo apt-get install libturbojpeg

Сборка продвинулась уже достаточно далеко.
Сейчас я застряла вот здесь:
[ 98%] Linking CXX executable liblinphone_tester
make[6]: выход из каталога «/home/lyudmila/linphone-desktop/WORK/desktop/Build/linphone»
[ 98%] Built target liblinphone_tester
make[6]: вход в каталог «/home/lyudmila/linphone-desktop/WORK/desktop/Build/linphone»
make[6]: *** Нет правила для сборки цели «coreapi/help/doc/doxygen/xml/index.xml», требуемой для «wrappers/cpp/include/linphone++/linphone.hh». Останов.
make[6]: выход из каталога «/home/lyudmila/linphone-desktop/WORK/desktop/Build/linphone»
CMakeFiles/Makefile2:1202: ошибка выполнения рецепта для цели «wrappers/cpp/CMakeFiles/linphone++.dir/all»
make[5]: *** [wrappers/cpp/CMakeFiles/linphone++.dir/all] Ошибка 2
make[5]: выход из каталога «/home/lyudmila/linphone-desktop/WORK/desktop/Build/linphone»
Makefile:149: ошибка выполнения рецепта для цели «all»
make[4]: *** [all] Ошибка 2
make[4]: выход из каталога «/home/lyudmila/linphone-desktop/WORK/desktop/Build/linphone»
CMakeFiles/EP_linphone.dir/build.make:123: ошибка выполнения рецепта для цели «/home/lyudmila/linphone-desktop/WORK/desktop/Stamp/EP_linphone/EP_linphone-build»
make[3]: *** [/home/lyudmila/linphone-desktop/WORK/desktop/Stamp/EP_linphone/EP_linphone-build] Ошибка 2
make[3]: выход из каталога «/home/lyudmila/linphone-desktop/WORK/desktop/cmake»
CMakeFiles/Makefile2:423: ошибка выполнения рецепта для цели «CMakeFiles/EP_linphone.dir/all»
make[2]: *** [CMakeFiles/EP_linphone.dir/all] Ошибка 2
make[2]: выход из каталога «/home/lyudmila/linphone-desktop/WORK/desktop/cmake»
Makefile:83: ошибка выполнения рецепта для цели «all»
make[1]: *** [all] Ошибка 2
make[1]: выход из каталога «/home/lyudmila/linphone-desktop/WORK/desktop/cmake»
Makefile:14: ошибка выполнения рецепта для цели «desktop-build»
make: *** [desktop-build] Ошибка 2

В чем дело пока не поняла, если сможете подсказать буду рада.

Ссылка | Ответ

Liudmila 5 дней, 21 час назад

Привет.
Я собрала linphone для Linux Mint 18.2 так как у вас описано.
Все что подходит для Ubuntu и Debian подходит и для Linux Mint.

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

Qt 5.9.0(устанавливала по вашему описанию)
sudo apt-get install libbsd-dev
sudo apt-get install libglew-dev
sudo apt-get install libturbojpeg
sudo apt-get install doxygen
sudo apt-get install graphviz //for dot

//Installing python-pystache package
sudo apt-get update
sudo apt-get install python-pystache

Для меня ваша статья была полезна.
Может владельцам Linux Mint будет полезен мой комментарий.

Ссылка | Ответ

Оставьте комментарий:

обязательно

обязательно (не публикуется)

необязательно

обязательно

обязательно

Последние записи

Архив

2018

Категории

Ленты

RSS / Atom