En tête technical corner
Linphone
Technical corner
Description
Linphone is an open source SIP phone for voice/video calls, instant messaging and conference calling. It is available for mobile and desktop environments (iOS, Android, GNU/Linux, macOS, Windows).
Linphone features a separation between the user interfaces and the core engine, allowing the creation of various kinds of user interface on top of the same functionalities.
The user interface frontends are:
- A Qt/QML interface for Windows desktop, macOS and GNU/Linux
- A console interface (linphone-daemon)
- An iPhone application built in Swift
- An Android application built in Kotlin
Liblinphone is the core engine, this is the library that implements all the functionalities of Linphone. It is a powerful SIP-based SDK for Voice and Video over IP, that anyone can use to add audio and video calls or instant messaging capabilities to an application. It provides a high-level API to initiate, receive and terminate audio and video calls.
Liblinphone relies on the following software components:
- Mediastreamer2, a powerful multimedia SDK for audio/video streaming and processing
- oRTP, a simple RTP library
- belle-sip, the SIP library
Liblinphone and all its dependencies are written in C++ and C.
Architecture
Console tools
Linphone-daemon is a console-mode program based on Liblinphone that can register, send and receive calls by reading simple text commands from standard input or from a UNIX socket. In response to each command, linphone-daemon writes the execution status of the command to standard output (or a socket).
This tool can easily be used from a shell script to execute simple SIP scenarios by those who do not require the full capabilities of the Liblinphone SDK.
Linphone-daemon supersedes the former "linphonec" console tool, as it uses a more effective syntax for inputs and outputs.
Common Features (Mobile and Desktop)
OVERALL FEATURES
- HD audio and video calls
- Multiple call management (pause and resume)
- Call transfer (blind and attended)
- Audio and video conferencing, based on a modern Selective Forwarding Unit (SFU)
- Call recording and replay
- Instant Messaging and group chat
- Message delivery status (IMDN)
- File sharing (audio, video, documents, gifs...)
- Message forward, copy, reply to
- Chat access during calls
- Contact list
- "Invite your friends" feature
- Presence status
- Call history
- Support for bluetooth headset
- Display of advanced call statistics
- Echo cancellation
- Call quality indicator
- Supported languages: English, French
- Account creation assistant
- Remote provisioning (via Qr code or URL)
- Secure user authentication: md5 / SHA256 digest, TLS client certificates
- End-to-end encryption for calls via SRTP, zRTP and SRTP-DTLS
- End-to-end encryption for messaging, using Linphone Instant Messaging Encryption (LIME)
- Post quantum call encryption, using CRYSTALS-Kyber algoritm (the winning of an international competition run by the American NIST between 2016 and 2022).
ADVANCED FEATURES
- Audio codecs: opus, speex, g711, g729, gsm, iLBC, AMR, AMR-WB, g722, SILK, iSAC, BV16, Codec2
- Video codecs: VP8, H.264 and H.265 with resolutions up to 1080P, MPEG4
- Hardware accelerated H.264 and H.265 codec for Mac OSX / iOS (VideoToolbox) and Android (MediaCodec)
- Innovative RTP jitter buffer algorithm, which quickly adapts to network conditions with a lot of jitter and improves control of the audio latency
- Adaptive bit rate control algorithm: congestion control and estimation of available bandwidth, in order to optimise the quality of audio and video
- Integration with push notification (requires compatible SIP server; linphone.org SIP service is push enabled)
- ICE (RFC 5245), STUN and TURN (RFC 5766) for optimised NAT traversal, allowing for peer-to-peer audio and video connections whenever possible
- Call handover accross a change of network access type (e.g. start a call in wifi and continue in 3G)
- Ability to configure multiple proxy accounts with different transports protocols (UDP, TCP, TLS)
- IPv6 (dual-stack and v6-only support)
- DTMF (telephone tone) support using SIP INFO or RFC 4733
For more information, consult the complete list of implemented standards in the Liblinphone section.
Mobile-specific features (iOS/Android)
- Smart contact list (shows people using the service) using list subscription to a presence server
- Dedicated tablet user interface
- Blind accessibility
Linphone is available on the following mobile platforms:
- Apple iOS 9 and more recent (ARM v7, ARM 64)
- Google Android 6 and more recent (ARM v7, ARM 64, x86, x86-64)
iOS ADDITIONAL FEATURES
- AAC-ELD support
ANDROID ADDITIONAL FEATURES
- Video overlay
Desktop-specific features
The Qt (QML) graphical interface runs on GNU/Linux, Windows and macOS.
SPECIFIC FEATURES
- HD video calls in full screen mode
- Smart search bar
- Unified history
- Quick access to recent events
PORTABILITY
- GNU/Linux: x86, x86-64, ARM v5, v7, arm64 ; Debian 8/9, Centos 7
- Windows Desktop: x86 (works also on x86_64), Windows 7 and later
- Mac OS X: x86_64 ; 10.11 and later.
- GNU/Linux embedded: linphone-daemon is a good candidate to provide the software stack for a hardware phone or hardware communication system.
License
Linphone is dual licensed, and can be licensed and distributed:
- under a GNU GPLv3 license for free (open source)
- under a proprietary license, to be used in closed source applications. Contact Belledonne Communications for costs and other service information.
Download Mobile versions
- Linphone iOS on the App Store
- Linphone Android on Google Play and the apk here
Download Desktop versions
Linphone for desktop:
AppImage package for GNU/Linux:
Download the AppImage package for Linux
Source code
Linphone source code is available from our GitLab, or can be cloned with Git:
Project |
Git repository |
linphone-desktop, comprising:
|
git clone https://gitlab.linphone.org/BC/public/linphone-desktop.git --recursive |
linphone-iphone (iOS application) |
git clone https://gitlab.linphone.org/BC/public/linphone-iphone.git |
linphone-android (Android application) |
git clone https://gitlab.linphone.org/BC/public/linphone-android.git |
For those who are behind a proxy:
You can change the access method from git:// to http:// as follows:
Normal git access:
git clone git://git.linphone.org/msilbc.git
Behind a proxy, use http access:
git clone git.linphone.org/msilbc.git
Daily builds (testing)
Every day, binary packages generated from the current git state are uploaded to http://www.linphone.org/snapshots. It is worth visiting if you want to test and see the latest changes, especially if a long time has elapsed since the last official stable release. These snapshots are generated automatically and are not tested, meaning that certain features might occasionally be broken.
Please refer to the README.md file for each project (linphone-iphone, linphone-android, linphone-desktop) for developer information about the applications.
Additionally, our developer wiki provides details about specific subjects:
Footer mentions
© Copyright 2023 - Linphone - Belledonne Communications SARL