Webrtc-phone: Free phone calls with iNum from a browser

Bla, bla bla…

WebRTC is on the march

With a stable implementation in Chrome since ver 23, applications are appearing as fast as flowers blooming in Spring. The nightly and developer builds (ver 25+) have more features including full desktop screen capture and ability to send it as a video stream over a peer connection. By adding DTLS encryption to Chrome nightly build, Google have achieved interoperability with Firefox nightly build.

Back in 2007 at ignite realtime, we built the first open source Flash to SIP gateway for SparkWeb and followed that up a few months later with Red5phone, the first open source web soft phone. Red5phone has now evolved into Apache OpenMeetings Red5Sip.

Fast-forward to today and we now have the iNum initiative from Voxbone which enables us to have a new geographical independent phone number for free phone calls on the Internet. iNums are global, supported by most telephone carriers including my former employer BT in the UK. Combine WebRTC with iNum and you can send and recieve free phone calls anywhere in the world provided you have a web browser and an iNum.

That was all the incentive I needed to get started on webrtc-phone.


Ok, so what does it do?

The prime purpose is to make and recieve free phone calls with iNums. It can also make SIP calls with domains that accept them.

For more details go to the project page.

How did I make it. What did I use?

  • Customized version of Phono SDK for webrtc only that connects to the Voxeo SIP cloud and handles the Jingle signalling and WebRTC media. Flash support has completely been removed. It only works with Chrome ver 23+ for now. Firefox support will come later
  • Openfire Server with websockets and redfire plugins to lookup iNums and map to Phono SIP addresses using XMPP Presence for anonymous users.
  • Candybar and DialPad? GUI components from AT&T Foundry and &Yet
  • AddThis social sign on service for Facebook, Google and Twitter

Free calls! Whats the catch?

Calls from iNum to/from the public PSTN still costs money. If you divert your iNum to a mobile or landline, your voice service provider will charge you for diverting the call. You will be paying for all calls from your iNum to your mobile or landline phone.

Calls from the public PSTN to your iNum cannot be intercepted and are therfore are not supported by webrtc-phone. If your iNum is dialed from a regular phone, the call will end up on whatever device you have forwarded it to. It is only when the number is dialed from a webrtc-phone elsewhere that it will be re-mapped to your webrtc-phone session.

Can I play?..

Live demo is hosted at https://webrtc.free-solutions.org:8443/webrtc-phone by the very kind folks at free-solutions.ch who are also members of the ignite realtime community.

Project source code is hosted on a Git repository at http://code.google.com/p/webrtc-phone/source/checkout, so go ahead and clone


**Inspired webrtc/Openfire platform for tests and experiencers : check http://www.free-solutions.org **and sign in with your Google credentials.

You just need a Google chrome browser + a Gmail account

Feel free to use and test


Hi Dele

The link is not working https://webrtc.free-solutions.org:8443/webrtc-phone

I also tried to install on my machine and the page just keeps loading. Any clue?

Does not work any more. Try the iNum phone in Openfire Meetings 0.1.8+

Hi Dele

Any link you can point me to for the same?

Hi Dele

I tried to do it but no luck . It stuck at the please wait page

any hint please?

user: focus pass: focus123

Hi Dele,

I used the ofmeet instead but I am unable to make Webrtc to sip call. I see nothing on the sip server and the error log of openfire is the following

2015.06.18 09:44:34 org.jitsi.jigasi.openfire.JigasiPlugin - CallControlComponent makeCall


at org.ifsoft.sip.SipService.sendInvite(SipService.java:356)

at org.jitsi.jigasi.openfire.CallControlComponent.makeCall(CallControlComponent.ja va:275)

at org.jitsi.jigasi.openfire.CallControlComponent.handleIQSet(CallControlComponent .java:570)

at org.xmpp.component.AbstractComponent.processIQRequest(AbstractComponent.java:51 5)

at org.xmpp.component.AbstractComponent.processIQ(AbstractComponent.java:289)

at org.xmpp.component.AbstractComponent.processQueuedPacket(AbstractComponent.java :239)

at org.xmpp.component.AbstractComponent.access$100(AbstractComponent.java:81)

at org.xmpp.component.AbstractComponent$PacketProcessor.run(AbstractComponent.java :1051)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

Also, for screen share do we need any additional settings?