Bhagwad Park has been a VoIP consultant for several years particularly in the field of hosted PBX systems. He enjoys writing about human rights issues, and gender equality in the developing world on his blog.
Enabling real-time communication has long been a challenge for the Internet. Although text and images can be sent and received in real-time, exchanging voice and video has been a tough nut to crack. Making audio or video calls through the Internet has historically involved expensive technology, compatible hardware etc. Many companies have had to develop their own software or license it from others.
There are at present web services which enable Real-Time Communication (RTC) such as Apple’s FaceTime, Google Hangouts, Skype etc. But they require the installation of applications or plug-ins to work. Downloading and installing such plug-ins is prone to errors and many people get confused and give up partway through the process. In some cases, plug-in installation can be hijacked by malware and debugging, deployment, troubleshooting etc. can be complex and expensive. Integration with other applications or browsers is also difficult. All these reasons are a significant obstacle to the goal of achieving real-time communication with just the browser.
In 2011, Google open sourced a project called WebRTC for browser based communication. International standards bodies such as IETF and W3C are now working to standardize the necessary protocols. Firefox and Google Chrome already support WebRTC in the latest version of their software and several companies have built applications utilizing it. WebRTC APIs are open source, do not require anything more than a browser and are more efficient than existing technologies.
WebRTC includes the following three components -
1. getUserMedia: This allows the browser to access the relevant hardware on the users computer namely the camera and microphone.
2. PeerConnection: This API enables the actual setting up of audio or video calls
3. DataChannels: It allows browsers to share data using the peer to peer model.
Although WebRTC is direct browser to browser communication, it still requires servers for signaling as well as to work with firewalls and NATs. Signaling is used to exchange metadata regarding the codecs and protocols for a particular call, error messages etc. However this signaling process is not specified under the WebRTC implementation. This was intentionally done in order to minimize the difficulties of integration with existing signaling protocols such as SIP. It avoids redundancy because including the signaling aspect would essentially be duplicating functions. This approach also allows application developers to come up with their own approaches for a specific use case.
Currently, making an audio or video call requires downloading a plug-in or an application. Users also need to sign up for that particular service and are unable to place calls to their friends who are not on the same network. If you want to make a call to a family member who does not have an account with the service, you will have to guide them through installation and sign up before being able to talk to them.
WebRTC removes the obstacles and complexity associated with real-time communication. Since both WebRTC and SIP are open source standards, they will be compatible across applications. Modern browsers implement the APIs within their code so that there is nothing for the user to download. In effect, WebRTC allows users to place calls directly from their browser to another person. It does not matter what application either party is using as long as the underlying browser supports the WebRTC protocol. A video call only requires a browser and an SIP address from a service like getonsip.com
For developers who are working on the next generation applications, being able to integrate voice and video capabilities can open up huge opportunities. WebRTC is slowly gaining momentum and is set to transform the landscape of real-time communication. Users expectations from technology are constantly growing and WebRTC will be the building block for for more powerful applications.