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


Администрирование операционных систем на базе Linux (Debian/Ubuntu и Centos/RedHat) Настройка рабочих станций под управлением Ubuntu Linux
cv dev kde neon libjpeg linphone linux видео
 
 

* В этом блоге я описываю свою повседневную рабочую практику, поэтому все статьи в блоге написаны лично мной и при копировании их на свой сайт пожалуйста указывайте ссылку на страницу откуда вы скопировали.
* Если какая-то статья вам помогла, то вы можете дать мне немного денег вместо простого спасибо (ссылка на форму поддержки проекта внизу страницы), если вы что-то не поняли или у вас что-то не получается, то вы можете нанять меня и я вам все подробно расскажу (расценки и ссылки в конце статьи).


(последние правки 3 недели, 5 дней)

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

Сборка 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

Моя официальная страница на FaceBook
Мой микроблог в твиттер

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


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .