WebRTC: Video telephony without a browser plugin
Opening a Peer-to-Peer Connection
The next example goes one step further and transmits the media stream via WebRTC. Before the transfer, the browsers involved exchange session descriptions in Session Description Protocol (SDP) format [11]. The descriptions include information about media streams to be transmitted and the IP addresses, ports, and protocols to use.
Figure 5 shows the steps that an application has to take to open a peer-to-peer connection. Initially, create()
, top left in the figure, creates a peer object for the browser on the left, and stream()
stores the local media stream in the local peer object. Next, offer()
generates a session description, and keepLoc()
stores it as a local session description, also in the local peer object. Then, send()
transmits the information to the right-hand browser.

When the session description reaches the right-hand browser, keepRem()
stores it as information about the other party. Then, answer()
generates a local session description for this browser, and keepLoc()
stores it as a local session description. Finally, send()
transmits it back to the left-hand browser, where the local keepRem()
function stores it as a remote session description. This completes the handshake.
WebRTC in the Local Browser
Listings 4 to 6 transfer the media stream via a peer-to-peer connection, as shown in Figure 5. To remove the need for a signaling server in this preliminary study, two video elements just communicate in the Firefox browser on the local machine (Figure 6). Even locally, WebRTC uses a network connection.

Listing 4 shows the HTML document with the example. As in Listing 2, it binds two JavaScript files in the header. Line 9 of the document body contains a video
element for outputting the local media stream, whereas line 10 has one for outputting the media stream transmitted via WebRTC.
Listing 4
Local and Transmitted Media Stream
Listing 5 shows the JavaScript code of the sample application from the localwebrtc.js
file. Querying and configuring the media stream is handled as in Listing 2, but with a different callback function in lines 5 to 19. In Listing 5, line 6, first connects the media stream with the video element. Line 7 generates the local peer object and stores it in the pcLocal
variable, and line 8 creates the remote peer object in pcRemote
. Line 9 stores the local media stream in the pcLocal
peer object.
Listing 5
WebRTC in the Local Browser
The asynchronous createOffer()
method in line 10 creates the session description for the local context and passes it to the callback function in lines 10 to 17, as in the desc
parameter. The setLocalDescription()
method stores the content of desc
as a local session description in the pcLocal
peer object. As the application runs locally, the setRemoteDescription()
method saves the content of desc
in line 12 as a remote session description for the remote peer object, pcRemote
.
The call to the asynchronous createAnswer()
method in line 13 creates the local session description for the remote peer object, pcRemote
, and passes it to the callback function in lines 13 to 16. Line 14 then stores the session description for the remote peer object, pcRemote
, as a local session description, and line 15 stores it as a remote session description for the local peer object, pcLocal
.
The onaddstream
event for the remote peer object, pcRemote
, is triggered in line 18 by calling the onadd()
function from Listing 6, which returns a callback function. It combines all incoming media streams with the video element that has the ID remote
(Listing 4, line 10). Local communication has now been established.
Listing 6
onadd()
WebRTC via the Internet
The typical application scenario for WebRTC on the Internet requires a signaling server. The signaling server forwards the configuration data, as shown in Figure 1. The following example uses the JSON format for this data. Each message corresponds to a JavaScript object with two components: command
describes the type of message; data
stores the payload data.
The application uses three different types of messages: A message of the offer
type (Listing 7) opens a peer-to-peer connection. To acknowledge opening the connection, the remote site sends a message of the answer
type in return.
Listing 7
Offer in JSON Format
The data fields of the two signals contain the respective local session description. When ICE sends a new candidate, it communicates this by sending an ICE-type message. In this example, data
contains the candidate.
« Previous 1 2 3 4 Next »
Buy this article as PDF
(incl. VAT)
Buy Linux Magazine
Direct Download
Read full article as PDF:
Price $2.95
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters
Find SysAdmin Jobs
News
-
Escuelas Linux 8.0 is Now Available
Just in time for its 25th anniversary, the developers of Escuelas Linux have released the latest version.
-
LibreOffice 7.5 has Arrived Loaded with New Features and Improvements
The favorite office suite of the Linux community has a new release that includes some visual refreshing and new features across all modules.
-
The Next Major Release of Elementary OS Has Arrived
It's been over a year since the developers of elementary OS released version 6.1 (Jólnir) but they've finally made their latest release (Horus) available with a renewed focus on the user.
-
KDE Plasma 5.27 Beta Is Ready for Testing
The latest beta iteration of the KDE Plasma desktop is now available and includes some important additions and fixes.
-
Netrunner OS 23 Is Now Available
The latest version of this Linux distribution is now based on Debian Bullseye and is ready for installation and finally hits the KDE 5.20 branch of the desktop.
-
New Linux Distribution Built for Gamers
With a Gnome desktop that offers different layouts and a custom kernel, PikaOS is a great option for gamers of all types.
-
System76 Beefs Up Popular Pangolin Laptop
The darling of open-source-powered laptops and desktops will soon drop a new AMD Ryzen 7-powered version of their popular Pangolin laptop.
-
Nobara Project Is a Modified Version of Fedora with User-Friendly Fixes
If you're looking for a version of Fedora that includes third-party and proprietary packages, look no further than the Nobara Project.
-
Gnome 44 Now Has a Release Date
Gnome 44 will be officially released on March 22, 2023.
-
Nitrux 2.6 Available with Kernel 6.1 and a Major Change
The developers of Nitrux have officially released version 2.6 of their Linux distribution with plenty of new features to excite users.