2017年6月,Linphone Desktop 4发布了。这样,它的作者Belledonne Communications从GTK + 2更改为Qt 5.9 LTS(更精确地说:他们使用Qt Quick Controls 2更改为QML)。此外,他们还增加了通过Flatpak下载即用型二进制文件的可能性。因此,尽管先前的答案在当时是正确的,但它们发生了变化:
a)从Flatpak下载
sudo add-apt-repository ppa:alexlarsson/flatpak
sudo apt update
sudo apt install flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak --user install --from https://linphone.org/flatpak/linphone.flatpakref
flatpak run com.belledonnecommunications.linphone --verbose
b)从源代码构建
- 去使用Ubuntu 14.04 LTS,和/或
- 由于您是开发人员,因此要调试/贡献给Linphone
- 享受最新功能和错误修复,和/或
- 获得更多的视频和音频编解码器。
通过Flatpak提供的变体仅将VP8作为视频编解码器。如果您自己构建,则将添加MP4V-ES,H.263和H.264。作为音频编解码器,添加了AMR,AMR-WB,iLBC,iSAC和SiLK。此外,您还可以选择甚至添加G.726和Codec2。但是,到目前为止,这两个模块需要进行修补以与其他VoIP / SIP实现(错误的字节序和错误的比特率)一起使用。
要编译自己,您需要Qt Framework。因此,您
a)选择Qt Installer,或
b)选择Ubuntu 18.04 LTS及其现有的Qt 5.9软件包。
步骤1a:Qt安装程序
wget download.qt.io/official_releases/online_installers/qt-unified-linux-x64-online.run
chmod u+x ./qt-unified-linux-*.run
./qt-unified-linux-*.run
在安装程序中,进入Qt→Qt 5.9.x→桌面。设置PATH
和时Qt5_DIR
,请确保其与您下载的版本匹配:
Qt5_DIR="~/Qt/5.9.9/gcc_64/lib/cmake"
PATH="~/Qt/5.9.9/gcc_64/bin/:$PATH"
步骤1b:Qt软件包
sudo apt install qt5-default qttools5-dev qttools5-dev-tools libqt5svg5-dev libqt5texttospeech5-dev qtdeclarative5-dev qtdeclarative5-dev-tools qtquickcontrols2-5-dev qml-module-qtquick-controls qml-module-qtquick-controls2 qml-module-qtquick-dialogs qml-module-qtqml-models2 qml-module-qtquick-templates2 qml-module-qt-labs-folderlistmodel qml-module-qt-labs-settings qml-module-qt-labs-platform
如上所述,这仅适用于最新的Ubuntu。对于较旧的Ubuntu版本,我将按照替代方法A中的说明去安装Qt Installer。此外,源代码中的注释表明,Belledonne Communications不坚持长期支持(LTS)版本,但需要下一个稳定版本。释放时,释放下一个稳定分支后(例如,释放Qt 5.11时,Linphone可能已经要求Qt 5.10)。因此,当您阅读此答案时,此替代B可能已不再是选择。
适用于Ubuntu 14.04 LTS的步骤2
sudo apt install autoconf libasound2-dev build-essential libbsd-dev cmake3 curl doxygen git libglew-dev graphviz libtool default-jre-headless nasm libpcap-dev pkg-config python-pystache python-six libudev-dev libwww-perl libxv-dev yasm libpolarssl-dev libsqlite3-dev libxml2-dev libsrtp0-dev libgsm1-dev libopus-dev libspeexdsp-dev libavcodec-extra libavcodec-dev libswscale-dev libv4l-dev libvpx-dev libantlr3c-dev antlr3 xsdcxx libxerces-c-dev libspandsp-dev libopencore-amrnb-dev libopencore-amrwb-dev libvo-amrwbenc-dev
适用于Ubuntu 16.04 LTS的步骤2
sudo apt install autoconf libasound2-dev build-essential libbsd-dev cmake curl doxygen git libglew-dev graphviz libtool default-jre-headless nasm libpcap-dev pkg-config python3-distutils python3-pystache python3-six libudev-dev libwww-perl libxv-dev yasm libmbedtls-dev libsqlite3-dev libxml2-dev libsrtp0-dev libgsm1-dev libopus-dev libspeexdsp-dev libavcodec-extra libavcodec-dev libswscale-dev libv4l-dev libvpx-dev libantlr3c-dev antlr3 xsdcxx libxerces-c-dev libspandsp-dev libopencore-amrnb-dev libopencore-amrwb-dev libvo-amrwbenc-dev libcodec2-dev
适用于Ubuntu 18.04 LTS的步骤2
sudo apt install autoconf libasound2-dev build-essential libbsd-dev cmake curl doxygen git libglew-dev graphviz libtool default-jre-headless nasm libpcap-dev pkg-config python3-distutils python3-pystache python3-six libturbojpeg0-dev libudev-dev libwww-perl libxv-dev yasm libmbedtls-dev libsqlite3-dev libxml2-dev libsrtp2-dev libgsm1-dev libopus-dev libspeexdsp-dev libavcodec-extra libavcodec-dev libswscale-dev libv4l-dev libvpx-dev libantlr3c-dev antlr3 xsdcxx libxerces-c-dev libspandsp-dev libopencore-amrnb-dev libopencore-amrwb-dev libvo-amrwbenc-dev libcodec2-dev
第三步
git clone git://git.linphone.org/linphone-desktop --recursive
cd ./linphone-desktop
python3 prepare.py --use-system-dependencies --all-codecs --debug --list-cmake-variables -DENABLE_AMRWB=OFF -DENABLE_AMR=OFF -DENABLE_UNMAINTAINED=ON -DENABLE_JPEG=OFF
make
gdb ./OUTPUT/desktop/bin/linphone -ex 'run --verbose'
在Ubuntu 14.04 LTS中,您可以使用python2
。在Ubuntu 18.04 LTS中,您可以删除-DENABLE_JPEG=OFF
。在Ubuntu 19.10中,您必须修补头文件。到今天为止,AMR(-WB)实现中存在多个错误。因此在这里被禁用。
旁注:请仔细检查quality_reporting_enabled
文件中的值~/.config/linphone/linphonerc
是否反映了您的数据收集和隐私利益。对我来说,0
禁用了在每次通话后发送给Belledonne Communications的遥测数据。但是,我找不到通过图形用户界面更改该值的方法。