Linphone is an open source SIP Phone, available on mobile and desktop environments (iOS, Android, Windows Phone, GNU/Linux, MAC OSX, Windows Desktop, Windows 10).

Linphone has inside a separation between the user interfaces and the core engine, allowing to create various kind of user interface on top of the same functionalities.

  • The user interface frontends:
    • Gtk+ interface for windows, mac and GNU/Linux
    • The console interface (linphonec, linphonecsh)
    • The iPhone application built in objective C
    • The Android application running in java
    • The Windows Phone application written in C#
  • Liblinphone, the core engine: this is the library that implements all the functionalities of Linphone.
    Liblinphone is a powerful SIP VoIP video SDK that anyone can use to add audio or video call capabilities to an application. It provides a high level api to initiate, receive, terminate audio & video calls.
  • Liblinphone relies on the following software components:
    • Mediastreamer2, a powerful multimedia SDK to make audio/video streaming and processing.
    • oRTP, a simple RTP library.
    • belle-sip, the SIP library.
    Liblinphone and all its dependencies are written in pure C.


Console tools

Linphonec is a command line interface that can use readline on GNU/Linux to get completion, history, such as bash.
Linphonecsh is another command line tool to remotely control a linphonec daemon. Unlike linphonec, linphonecsh immediately exits once the command is executed.
See the documentation tab for more information.

Linphone-daemon is a new alternative to linphonec which is more easily usable from scripting languages because the outputs of the program are consistent and always in response to a command. Commands can be passed via standard input or a unix socket. To learn more about Linphone-daemon's capabilities, use the help command.



Common Features (Mobile and Desktop)

Overall features

  • Audio & HD video calls
  • Multiple calls management (pause & resume)
  • Call transfer
  • Audio conferencing (merge calls into a conference)
  • Instant Messaging
  • Pictures and files sharing
  • Contact list
  • Call History
  • Display of advanced call statistics
  • Echo Cancellation
  • Call quality indicator
  • Secure communications: zRTP, TLS, SRTP
  • Supported languages: English, French
  • Account creation assistant

Advanced features

  • Audio codecs:  OPUS, SILK, SPEEX, G722, AMR-WB (G722.2), AMR-NB, GSM 6.10, ILBC, G729, ISAC, BV16, G711, Codec2
  • Video codecs: VP8, H264, MPEG4
  • HD video support
  • Integration with push notification (requires compatible SIP server, sip service has push enabled)
  • ICE support (RFC5246) to allow peer to peer audio & video connections without media relay server
  • Low bandwidth mode for audio calls over 2G networks.
  • Call handover accross network access type change (start a call in wifi and continue in 3G)
  • Ability to configure multiple proxy accounts with different transports (UDP, TCP, TLS)
  • IPv6 (dual stack and v6-only support)
  • DTMF with RFC4733

Mobile specific features

  • Smart contact list (shows people using the service)
  • Bluetooth headset support
  • Dedicated tablet user interface
  • Languages : contributions for Japanese and Arabic have been integrated

Linphone is available on following mobile platforms :

  • Apple iOS 8 to 10 (ARM v7, ARM 64)
  • Google Android 4.1 to 7 (ARM v5 to v7, x86)
  • BlackBerry OS10 (ARM v7)
  • Windows Phone 8 and 8.1 (ARM v7)

iOS additional features

  • Blind accessibility
  • AAC-ELD support

Android additional features

  • Video overlay

Windows Phone

  • Windows Phone 8 and 8.1, and 10 support
  • Multiple calls management and audio conferencing are not supported.

Blackberry 10

  • Blackberry Hub integration
  • Video calls with VP8 only

Desktop specific features

The Gtk2 graphical interface is running on GNU/Linux, Windows and MacOSX.

Specific features 

  • HD video calls in fullscreen mode
  • Call recording (audio & video)
  • Presence status
  • Languages: contributions for Arabic, Russian, Serbian, German have been integrated
  • Support of H263-1998 video codec (specific desktop)


  • GNU/Linux: x86, x86-64, ARM v5, v7, arm64 ; Debian 7/8, Centos 6/7
  • Windows Desktop: x86 (works also on x86_64)   Vista and later
  • Mac OS X: x86_64 ; 10.7 and later.
  • GNU/Linux embedded: Linphonec or liblinphone are good candidates to provide the software stack of an hardware phone or hardware communication system.




Linphone is dual licensed. It can be licensed and distributed:

  • under GNU GPLv2 license - for free (open source).
  • under proprietary and commercial license to be used in closed source applications. Contact Belledonne Communications for costs and other service information.

Download Mobile versions

Download Desktop versions

Mac osx / Windows

Download Linphone for Mac OS X

Download Linphone for Windows

Debian & ubuntu packages

Linphone is included in Debian and Ubuntu GNU/Linux distributions: you can then install it in a few seconds using your favourite package manager or in a console using

sudo apt-get install linphone

See linphone page on debian and ubuntu websites: 

OpenSUSE packages

Please visit

Source code

Download Linphone source package


Clone linphone sources with git:

Project git

linphone, including:

  • oRTP
  • mediastreamer2
  • liblinphone
  • linphonec
  • linphone (gtk)

git clone git:// --recursive

linphone-desktop, including:

  • linphone (gtk)
  • linphonec
  • liblinphone
  • mediastreamer2
  • ortp
  • belle-sip
  • dependencies

git clone git:// --recursive


  • iPhone app
  • liblinphone
  • dependencies

git clone git:// --recursive


  • Android app
  • liblinphone
  • dependencies

git clone git:// --recursive


  • Linphone windows 10 universal app, and dependencies
git clone git:// --recursive


  • Windows Phone 8 app
  • dependencies

git clone git:// --recursive


  • BB10 app
  • liblinphone
  • dependencies


git clone git:// --recursive


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://
Behind a proxy, use http access:
git clone


Daily builds (testing)

Every day some binary packages generated from the current git state are uploaded at . It is worth to visit it if you want to test and see the latest changes, especially when a long time has elapsed since the last official stable release. These snapshots are generated automatically and not tested, some features might be broken from time to time.



The instructions are in the README file distributed with the sources.

Linphone command line tools


Linphonec is a terminal based version of linphone that reads commands from the user prompt.


Start linphonec in a terminal
$ linphonec
Warning: video is disabled in linphonec, use -V or -C or -D to enable.
Place an outgoing call
linphonec> call
Alternatively, if is your default proxy configuration (entered via 'proxy add' command), you call simply like this
linphonec> call 594305005
Terminate a call
linphonec> terminate
At any time you can list available commands using 'help':
linphonec> help

Commands are:

help Print commands help
call Call a SIP uri
chat Chat with a SIP uri
terminate Terminate the current call
answer Answer a call
autoanswer Show/set auto-answer mode
proxy Manage proxies
soundcard Manage soundcards
webcam Manage webcams
staticpic Manage static pictures when nowebcam
ipv6 Use IPV6
refer Refer the current call to the specified destination.
nat Set nat address
stun Set stun server address
firewall Set firewall policy
call-logs Calls history
friend Manage friends
play play from a wav file
record record to a wav file
quit Exit linphonec
register Register in one line to a proxy
unregister Unregister from default proxy
duration Print duration in seconds of the last call.
status Print various status information
ports Network ports configuration
speak Speak a sentence using espeak TTS engine
codec Audio codec configuration
vcodec Video codec configuration
ec Echo cancellation
mute Mute microphone and suspend voice transmission.
unmute Unmute microphone and resume voice transmission.
nortp-on-a Set the rtp_no_xmit_on_audio_mute configuration parameter

Type 'help <ltcommand>' for more details.

Linphonecsh - control a linphonec daemon

Linphonecsh is a console utility to send non-blocking commands to an instance of linphonec runnning in the background.
Here is an example to run within your favourite shell and terminal:

#spawn a linphonec daemon:
$ linphonecsh init
#register to a proxy
$ linphonecsh register --host --username bill --password thisisasecret
#dial out
$ linphonecsh dial ""
#terminate the call
$ linphonecsh hangup
#linphonecsh can transmit any command understood by linphonec using the 'generic' keyword
$ linphonecsh generic "proxy list"
#exit the daemon
$ linphonecsh exit

This feature is still being developed, stay connected to svn if you use it !
What could be the applications of this tool ? For example:

  • run VoIP calls from scripts
  • from web cgi pages
  • from javascript in a browser window...

Configuration file documentation

Linphone has a linphonerc configuration file in which all SIP, RTP, sound, video settings are read and stored. By default no configuration file is required and linphone always generates a default one at first startup.
Most of the parameters are used internally by accessors of liblinphone (ex: linphone_core_set/get_audio_port()) and thus do not need to be accessed directly by editing the config file.
However some parameters are related to fine grained settings: noise gate, echo canceler parameters, echo limiter etc.
Follows here a description of sound related tunables and a documented linphonerc config file with all settings.

Echo canceller

Linphone uses an echo canceller from libspeexdsp. Filter tail length, echo delay and frame size can be changed.

#turn on/off echo cancellation

#Expected delay of echo in milliseconds

#Use this when you have a fixed latency in the sound hardware.
#This allows to reduce the tail length of the echo canceller, which speeds up convergence
#and reduces complexity of computations.

#Tail length of echo canceller in milliseconds.
#Ideally it should be no more than the expected duration of the echo.

#Frame size for AU-MDF echo canceller algorithm
#This is a parameter internal to the echo canceller, recommended is too keep to its default value.

Echo limiter

The echo limiter is an algorithm that consists in lowering the gain of the mic input when the speaker is talking. Combined with the noise gate (see next section) it gives good results when the echo canceller no more works, because of non linear distorsion (saturation) of the echo path.
Its drawback is that it turns the call in a kind of automatic half-duplex mode, which makes impossible to interrupt the person who is talking.

#Enables echo limiter
#this basically consists in lowering the mic input (in software)
#when the speaker level is above a certain threshold
#the attenuation is made proportionnal to the speaker detected level

#el_speed parameter: gain changes are smoothed with a coefficent
#el_speed is this coefficient. It's a value between 0 and 1
#0.1 is already very fast, 0.001 is very low
#default value is 0.03
#recommendation is to keep it unchanged

#el_thres parameter
#Threshold above which the system becomes active.
#It is a normalized power, between 0 and 1.
#Default value is 0.1
# A smaller value can be better.

#el_force parameter
#The proportional coefficient controlling the mic attenuation.
#Default value is 10

#el_sustain parameter
#Time in milliseconds for which the attenuation is kept unchanged after 
#resuming from speech to silence on the network->speaker channel.
#This is a very important parameter that needs to be adjusted
#to take in account the latency of the sound card/driver.
#Indeed when the echo limiter sees there is no more energy going to the 
#speaker, there can be still some audio buffers pending to be played
#in the audio driver. These buffers are out of control of the application
#and will generate echo as they are non-silence.
#The purpose of the parameter is to keep the mic attenuated
#for some time until the echo of these buffer is finished.
#100 ms is a reasonable value to start, can be higher depending
#on the hardware.

Noise gate

The goal of the noise gate is to remove (or attenuate a lot) the background noise heared by the microphone. Noise and speech are distinguished using an energy threshold. The use of the noise gate can prevent feedback to produce between two devices running linphone.

#The noise gate is located just after mic input
#Tells whether noise gate is active:

#Noise gate threshold in linear power between 0 and 1:
#Above this threshold the noise gate becomes bypass.

#Noise gate's floorgain: gain applied to the signal when its energy is below the threshold.
#It is expect to be low so that noise is attenuated.


A parametric equalizer can be used to recover from speakers with bad spectral response. The frequency response of the equalizer is entirely configurable.

#equalizer: it is located before speaker output
#Tells whether equalizer is active.

#equalizer gains.
#It is a list of triplets ::
#for example:
#eq_gains=300:0.1:100 700:0.2:250

Miscellaneous audio parameters

#Automatic gain control (of mic input) - turns on or off:

#static software gain (linear scale) to be applied to microphone signal


#static software gain (log scale) to be applied to signal sent to speaker

#Enable or disable DC removal of mic input:

Linphonerc sample file documented

##section relative to sound settings
#sound device name used for playback, as listed in linphonec by "soundcard list"
playback_dev_id=ALSA: default device
#sound device name used for ringing, as listed in linphonec by "soundcard list"
ringer_dev_id=ALSA: default device
#sound device name used for capture, as listed in linphonec by "soundcard list"
capture_dev_id=ALSA: default device
#Alsa special device name
# This option allows to specify a special ALSA card (as defined in ALSA asoundrc config files)
# to be used by linphone. This card can then be referred by playback_dev_id, ringer_dev_id, capture_dev_id options.
# Use this if you are able to understand asoundrc syntax and you know what you are doing.
#wav file to play to advertise remote ringing
#wav file to play to advertise incoming calls
#turn on/off echo cancellation
#Expected delay of echo in milliseconds
#Use this when you have a fixed latency in the sound hardware.
#This allows to reduce the tail length of the echo canceller, which speeds up convergence
#and reduces complexity of computations.
#Tail length of echo canceller in milliseconds.
#Ideally it should be no more than the expected duration of the echo.
#Frame size for AU-MDF echo canceller algorithm
#This is a parameter internal to the echo canceller, recommended is too keep to its default value.
#static software gain (linear scale) to be applied to microphone signal
#static software gain (log scale) to be applied to signal sent to speaker
##Video settings
#Size of sent video among these names: QCIF, QVGA, CIF, VGA, SVGA
#Whether video is enabled:
#You can refine whether it is enabled for display or capture or both
#Show local preview between calls.
#Show local view during calls, in a corner of the video window
#Webcam name for capture
device=V4L2: /dev/video0
##Network settings
#Estimated download bandwidth in kbit/s
#The bandwidth settings are used to control the bitrate of video (and sometimes audio) encoder, as well
#as limiting the size or fps of the sent video.
#Estimated upload bandwidth in kbit/s
#Firewall policy:
# 0: assume there is no nat
# 1: use firewall address supplied in "nat_address" item (discouraged)
# 2: use STUN to discover its own public IP address and ports
# 3: use ICE.
#Network's Maximum Transmission Unit
# Use 0 to allow automatic discovery, otherwise set to a number of bytes.
# This parameter is only meaningful with video streams for which RTP packets are big.
#STUN server address to use when in firewall_policy=2
#Firewall address to use when in firewall_policy=1
##SIP settings
#SIP port used
#Discover automatically local IP address
#Contact address when no proxy is used
# The host port is always overriden at runtime if guess_hostname
# is set to 1.
#Incoming call answering timeout
#Use SIP INFO to send DTMFs (digits)
#Use RFC2833 (out of band DTMFs) to send digits
#Use IPv6. caution: it is exclusive with IPv4.
#Send registers only when network is up
#Default proxy to use (the number is the index of the proxy configuration in this config file)
# Use -1 for no proxy.
#Keepalive period in milliseconds for sending out SIP UDP keepalive to the proxies.
#When answering to SDP offers, select only one codec,
#instead of replying with all matching codecs.
#Send an OPTIONS message before doing outgoing calls
#This is used by Linphone to workaround some NAT problems inherent to SIP.
#This is highly recommended.
#Network state automatic monitoring
# When set to 1, linphone will periodically monitor the network state (by checking whether it is possible
# to reach the internet).
# When the operating system has callbacks to notify such information, you can use
# linphone_core_set_network_reachable() to notify the core, in which case no network monitoring will be done internally.
## RTP settings
#Audio RTP (UDP) port
#Video RTP (UDP) port
#Nominal audio jitter buffer size in milliseconds
#Nominal video jitter buffer size in milliseconds
#RTP timeout in seconds: when no RTP or RTCP
# packets are received for this period, the running call is
# automatically closed.
## Audio codec descriptions
# These sections are named audio_codec_X, where X is a number.
# This number identifies the position of the described codec
# in the core's audio codec list.
# sub-mime type as defined in RFC3551 or codec's specific RFC:
# RTP clock-rate as defined in RFC3551 or codec's specific RFC:
# Tells whether is codec is enabled
# Fmtp (format parameters) string to be sent in SDP for this codec, which
# corresponds usually to what we are prefering to receive.
# RFC3551 or codec's specific RFC describes the allowed parameters.
## Video codec descriptions
# These sections are named video_codec_X, where X is a number.
# This number identifies the position of the described codec
# in the core's video codec list.
# sub-mime type as defined in RFC3551 or codec's specific RFC:
# RTP clockrate as defined in RFC3551 or codec's specific RFC, usually 90000 for video payloads.
# Tells whether the codec is enabled
# Fmtp (format paramters) string to be sent in SDP for this codec, which
# corresponds usually to what we are prefering to receive.
## SIP Proxy configuration
# Like with audio_codec, it is possible to define several proxy configuration in the
# form of [proxy_X] section, where X is a number.
#SIP address of the proxy
#SIP identity for which you are known on this proxy:
#Expiration period of the registration in seconds
#Whether to send a register or not
#Route: SIP server address to send all outgoing SIP requests
#It is usually left blank, otherwise it is commonly used to specify this proxy
#must be used as an outbound proxy, for example:
#Send a PUBLISH request to the proxy to notify about presence information (online, busy, out to lunch)
#whether "+" in phone numbers should be replaced by 00
#Phone number prefix to be applied to entered destinations.
#Example: prefix=+33
## Authentication information
# Similarly, several auth_info_X can be defined
# Authentication information is kept distinct from proxy information
# because there can be authentication challenges from proxies or user
# agents even if we are not registered to any proxy.
#SIP username
#sip userid (usually the same as username, don't specify unless you know what you are doing)
#password associated with above username, userid and realm
#SIP authentication realm (= authentication domain), can be left empty if realm is not known.
#SIP favourite contacts (friends, buddies...)
# Again it is represented as a family of [friend_X] sections.
#SIP address of buddy
#Policy for incoming SUBSCRIBEs for presence. Can be:
# accept : we accept to share our presence status with this person
# deny : we don't want to share our presence status with this person
# Send SUBSCRIBEs for presence to this person, so that
# we are notified about her presence information.
#Other stuff stored in config files that are not configuration items but rather
#persistent information stored in the same place. They are not described here just but
#mentionned for information:
# call_logs_X : call history items


Where CAN I FIND instructions to compile linphone on my computer

First checkout the source code, from tarball or git, and follow the instructions in README files. There are several README files at the toplevel, one per OS (mac, mingw (=windows), and linux).

Does linphone work behind firewalls ? What are the ports used ?

Yes it works provided that the SIP server is kind enough. The SIP server powering the SIP service is kind enough and guarantees correct operation behind any firewall.