Home Web Front-end JS Tutorial Janus WebRTC server and SFU: a real time video calling app

Janus WebRTC server and SFU: a real time video calling app

Nov 02, 2024 pm 04:55 PM

In this article we are going to create a video calling app with Janus WebRTC server and SFU

We are also going to learn about Metered.ca SFU and why it is a better option than Janus Server

What is Janus?

Janus is an Open source, general purpose WebRTC SFU server. It is a modular gateway that facilitates real time communication apps by handling the complex WebRTC protocols and provide a stable server for the purposes of media exhange

Key features of Janus SFU

  • Modular architecture: Janus has a plugin based system where each plugin has some specific functionality. This modularity allows for customization and extention

  • Protocol handling: Janus manages signaling and negotiation that is required for establishing webrtc connections.

  • Interoperability: Janus supports media codecs and is compatible with different clients and browsers thus Janus has broad compatibility

  • Scalability: Designed to handle multiple connections efficiently, Janus is scalable within a specific geographical zone. (that is it will work fine if all the users that are using Janus are within a small geographic zone)

Understanding SFU (Selective forwarding Unit)

A SFU or a Selective Forwarding Unit is a media server architecture that is used in WebRTC apps to efficiently route media streams between different media participants

The SFU receives incoming video streams from each participant and then selectively forwards the streams to other participants as requested.

That is each participant receives the streams that the participant request while all the participants push their streams to the SFU

Advantages of Using SFU for Routing Media Streams Efficiently

  1. Scalability: SFU can handle a large number of connections because the SFU does not involve in computational intensive tasks such as encoding and decoding, instead just forwards the streams to the users

  2. Low Latency: The SFU forwards the streams without processing thus leading to low latency. But if your users are all over the world you need a global distributed SFU service such as metered.ca cloud sou

  3. Bandwidth Optimization

    1. Simulcast Support: SFU can stream multiple streams of different qualities from the same participant. Clients can choose to stream different quality that best fits their devices and network capabilities for smooth video / audio streaming
    2. Selective Subscription: Clients can subscribe to only the streams that they need, thus reducing unnecessary bandwidth usage.
  4. Flexibility and Control: Participants have a greater flexibility over what they want to receive, for example if they want to receive just audio or receive video streams of select participants then they have the option to do that

  5. Cost Efficiency: Since SFU require less processing as compared to MCU a smaller instance on the cloud can work for you

  6. Preservation of the quality of media: SFU preserve media quality because they do not do any processing on the media streams just forwards the streams to requested participants.

  7. Easier implementation of Advanced features

    1. Dynamic Layouts Clients can customize their own layouts with the video streams that they are receiving. Rather than pre determined layouts that you get with video sdk and apis
    2. Active Speaker Detection: SFU can forward streams of only the active speaker thus enhancing focus and reducing unnecessary data transmission.
    3. Recording and streaming: SFU can forward the media stream to recording service or broadcast platforms with out affecting any communication between devices and users
  8. Improved Reliability: With no processing of media on the server, there are fewer points of failure . SFU can also be clustered for redundancy, thus making sure that the services remain live even if one server encounters any issue.


Janus WebRTC server and SFU: a real time video calling app

Implementing Janus in your Application

Integrating Janus SFU in your app involves these steps. Here is step by step process to implement Janus in your application.

Step 1: Setting Up the Janus Server

  1. System Preparation

    1. Server Preparation: Ensure that you have a Ubuntu or Debian server running.
    2. Install Dependencies: Janus requires libraries like
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
Copy after login
Copy after login
Copy after login
Copy after login

you can easily install these dependencies on ubuntu or Debian like

apt install libmicrohttpd-dev libjansson-dev \
    libssl-dev libsofia-sip-ua-dev libglib2.0-dev \
    libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
    libconfig-dev pkg-config libtool automake
Copy after login
Copy after login
Copy after login

Download and Build Janus

  • Clone the repo
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
Copy after login
Copy after login
Copy after login
Copy after login
  • Navigate to the directory
apt install libmicrohttpd-dev libjansson-dev \
    libssl-dev libsofia-sip-ua-dev libglib2.0-dev \
    libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
    libconfig-dev pkg-config libtool automake
Copy after login
Copy after login
Copy after login
  • Generate config Scripts
git clone https://github.com/meetecho/janus-gateway.git
Copy after login
  • Configure the build
cd janus-gateway
Copy after login
  • Compile and install
sh autogen.sh
Copy after login
  1. Configure Janus

    1. Edit the config files

      1. The file is located in /opt/janus/etc/janus/
      2. Important files include janus.cfg , janus.transport.websockets.cfg and janus.plugin.videoroom.cfg
    2. Enable the needed plugins

      1. Ensure that the video room plugin is enabled in order to use the SFU
      2. You can also configure WebSockets transport if you want to use that for signalling in your application
  2. Setup SSL Certificate

    1. Generate SSL certificate

      1. You can generate a self signed certificate using lets encrypt if you want to use secure connections. This is an optional step if you want to use secure connections
    2. Update configuration

      1. Point the configuration files to the SSL certificate
  3. Start the Janus Server

    1. Run Janus
./configure --prefix=/opt/janus
Copy after login
  1. Verify Operation

    1. Check the logs to see everything is running without any errors.

Step 2 Developing the Client Side Application

  1. Set Up the Development Environment

    1. Choose a front end framework

      1. You can choose between React, Angular or any other front end framework
    2. Include WebRTC libraries

      1. You can also use WebRTC helper libraries like adapter.js for compatibility with different browsers
  2. Establish Signalling Server

    1. Connect to Janus via Websockets
    2. Implement the handshake in order to create a new session and then attach a video room plugin
  3. Create or Join a video room

    1. Send a request to Janus server to create a new room or join an existing room on the server
  4. Handle local media streams

    1. Show the local media streams to the user if you want to, we will also show the remote streams in the later section below
make
sudo make install
sudo make configs
Copy after login

Attach the local stream to the video element in the HTML to play the stream to the user

5. Publish to Janus

  • Use the RTCPeerConnection to create an SDP offer

  • Send the offer to Janus using the API

  • Receive the SDP answer from the Janus and set it as remote description

6. Subscribe to remote streams

  • Handle the joined and event messages to listen to notifications from other meeting participants

  • Create the Peer connections for subscribers, that is for each remote participant you need to create a new RTCPeerConnection

  • Handling remote streams, get the remote streams and attach them to HTML video elements to play to video on the users web browser

  1. Implement event listener and Handlers

    1. Monitor events like oniceconnectionstatechange and onicecandidate and handle these events when they occur and implement the reconnect logic if needed

Exploring Metered.ca SFU as an Alternative to Janus

What is Metered Global Cloud SFU

  1. Metered Global Cloud SFU is a cloud based Selective Forwarding Unit by Metered.ca

  2. With Metered SFU developers can build any type of application including video, audio and data transmission

  3. The Metered SFU runs using native WebRTC API and HTTP without the need for any proprietary SDKs.

  4. Users are also automatically routed to the nearest SFU based on their geographical location

  5. Multiple SFU are connected globally with each other using high speed interconnect, ensuring lowest possible latency

Key features of Metered Global SFU

  • Global Distribution:

    • Users are connected to the closed SFU based on their geographical location thus have lowest latency and high performance
  • Platform Independence

    • Eliminates the need for any proprietary SDK, thus enabling you develop across different platforms using the WebRTC own APIs
  • Flexible Publish-Subscribe Model:

    • Capacity for unlimited participants and different session structures.
  • Scalability

    • You can have small meetings as well as large scale live streaming sessions with thousands of users
  • Cost Efficiency:

    • Charges are based on rate of data transfer offering significant savings for high usage scenarios
    • Also there is pay per use billing available.

How Metered SFU works

Connection flow

  1. Establishing a Connection

    1. Create a peer connection
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
Copy after login
Copy after login
Copy after login
Copy after login

b. Send Local SDP offer

  • Generate the SDP offer and then send it to the Metered.ca SFU using HTTP API request.

c. Receive SFU remote SDP

  • Set the received SDP as the remote description on your peerConnection

d. Connection Established

  • Add the media track
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
Copy after login
Copy after login
Copy after login
Copy after login
  1. Publishing a Track

    1. Add Media Track
apt install libmicrohttpd-dev libjansson-dev \
    libssl-dev libsofia-sip-ua-dev libglib2.0-dev \
    libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
    libconfig-dev pkg-config libtool automake
Copy after login
Copy after login
Copy after login

b. Generate and Send SDP offer

  • Send the updated SDP offer to the SFU

  • Receive and set the SFU response to the SDP

  1. Subscribing to a Track

      1. Request the track subscription from the SFU

        1. Send the request to the SFU using the trackid and remoteTrackSessionId of the desired stream.
      1. Set the received SDP on your peerConnection
      2. Handle the incoming media and the ontrack event to show the incoming stream to the user

Advantages of Metered SFU over Janus

  1. Scalability

    1. Media distribution

      1. Clients send all their media streams to the SFU once, it does not matter how many participants are there
      2. SFU then manages the distribution of streams to all the subscribers who request the specific streams
    2. Large Scale streaming

      1. Metered SFU supports small meetings as well as large scale live streaming to thousands of users
  2. Platform Independence

    1. No Proprietary SDKs Required
    2. Reduced Complexity
  3. Flexible Publish Subscribe model

    1. No Room Constraints: Metered SFU operates on sessions rather than pre-defined rooms.
    2. Sessions can publish and subscribe to streams with no limit on the number of participants.
    3. Dynamic and Scalable designs: Best for scalable designs such as live streaming.
  4. Cost Efficiency

    1. Metered SFU is cost efficient because we charge based on data transferred per GB rather than per minute billing
    2. Only outbound data is charged and inbound data to SFU is free, this is specially cost effective in applications like surveillance where the streams are continuously uploaded to the SFU but are infrequently viewed
  5. Global SFU Network:

    1. The Metered SFU has global reach with SFUs in all 5 continents
    2. The media streams are routed through high speed interconnect SFU links
    3. This enables users from different parts of the world to experience low latency communication

Comparing Metered SFU with Janus

  1. Deployment and Maintenance

    1. Metered SFU:

      1. Cloud based, managed service infrastructure
      2. Offloads operational and maintenance responsibilities allowing developers to focus on application features
    2. Janus

      1. Requires self hosting, server setup and ongoing maintenance also it is not completely free as you have to pay for cloud servers
      2. Requires managing updates, scaling and security patches
  2. Scalability and Performance

    1. Metered SFU

      1. Automatically scales and can handle any number of participants
      2. With SFUs in every geographical location, participants in every part of the world experience low latency and high performance
    2. Janus

      1. not scalable globally and depends on server resources that you have allocated
      2. Requires complex setups like clustering for high load use cases
  3. Cost Structure

    1. Metered SFU

      1. Billed on data transfer in GB which is cheaper and also pay as you go
      2. More predictable and lower cost for applications that require high data usage
    2. Janus

      1. While open source there are operational costs associated with using Janus including server hosting and maintenance
      2. Costs can increase significantly with scaling and high usage
  4. Flexibility and Features

    1. Metered SFU

      1. Flexible and scalable publish and subscribe model
      2. simplifies development with standard WebRTC APIs and supports unlimited participation
    2. Janus

      1. Offers plugin based architecture with features like video rooms streaming and others
      2. Requires configuration and potential customization for specific use cases
  5. Ease of Integration

    1. Metered SFU

      1. Simplifies the development process with standard WebRTC APIs
      2. Reduces time to market with need to think about infrastructure setup, server requirements etc

Janus WebRTC server and SFU: a real time video calling app

Metered TURN servers

  1. API: TURN server management with powerful API. You can do things like Add/ Remove credentials via the API, Retrieve Per User / Credentials and User metrics via the API, Enable/ Disable credentials via the API, Retrive Usage data by date via the API.

  2. Global Geo-Location targeting: Automatically directs traffic to the nearest servers, for lowest possible latency and highest quality performance. less than 50 ms latency anywhere around the world

  3. Servers in all the Regions of the world: Toronto, Miami, San Francisco, Amsterdam, London, Frankfurt, Bangalore, Singapore,Sydney, Seoul, Dallas, New York

  4. Low Latency: less than 50 ms latency, anywhere across the world.

  5. Cost-Effective: pay-as-you-go pricing with bandwidth and volume discounts available.

  6. Easy Administration: Get usage logs, emails when accounts reach threshold limits, billing records and email and phone support.

  7. Standards Compliant: Conforms to RFCs 5389, 5769, 5780, 5766, 6062, 6156, 5245, 5768, 6336, 6544, 5928 over UDP, TCP, TLS, and DTLS.

  8. Multi‑Tenancy: Create multiple credentials and separate the usage by customer, or different apps. Get Usage logs, billing records and threshold alerts.

  9. Enterprise Reliability: 99.999% Uptime with SLA.

  10. Enterprise Scale: With no limit on concurrent traffic or total traffic. Metered TURN Servers provide Enterprise Scalability

  11. 5 GB/mo Free: Get 5 GB every month free TURN server usage with the Free Plan

  12. Runs on port 80 and 443

  13. Support TURNS SSL to allow connections through deep packet inspection firewalls.

  14. Supports both TCP and UDP

  15. Free Unlimited STUN

The above is the detailed content of Janus WebRTC server and SFU: a real time video calling app. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1672
14
PHP Tutorial
1277
29
C# Tutorial
1257
24
Python vs. JavaScript: The Learning Curve and Ease of Use Python vs. JavaScript: The Learning Curve and Ease of Use Apr 16, 2025 am 12:12 AM

Python is more suitable for beginners, with a smooth learning curve and concise syntax; JavaScript is suitable for front-end development, with a steep learning curve and flexible syntax. 1. Python syntax is intuitive and suitable for data science and back-end development. 2. JavaScript is flexible and widely used in front-end and server-side programming.

JavaScript and the Web: Core Functionality and Use Cases JavaScript and the Web: Core Functionality and Use Cases Apr 18, 2025 am 12:19 AM

The main uses of JavaScript in web development include client interaction, form verification and asynchronous communication. 1) Dynamic content update and user interaction through DOM operations; 2) Client verification is carried out before the user submits data to improve the user experience; 3) Refreshless communication with the server is achieved through AJAX technology.

JavaScript in Action: Real-World Examples and Projects JavaScript in Action: Real-World Examples and Projects Apr 19, 2025 am 12:13 AM

JavaScript's application in the real world includes front-end and back-end development. 1) Display front-end applications by building a TODO list application, involving DOM operations and event processing. 2) Build RESTfulAPI through Node.js and Express to demonstrate back-end applications.

Understanding the JavaScript Engine: Implementation Details Understanding the JavaScript Engine: Implementation Details Apr 17, 2025 am 12:05 AM

Understanding how JavaScript engine works internally is important to developers because it helps write more efficient code and understand performance bottlenecks and optimization strategies. 1) The engine's workflow includes three stages: parsing, compiling and execution; 2) During the execution process, the engine will perform dynamic optimization, such as inline cache and hidden classes; 3) Best practices include avoiding global variables, optimizing loops, using const and lets, and avoiding excessive use of closures.

Python vs. JavaScript: Community, Libraries, and Resources Python vs. JavaScript: Community, Libraries, and Resources Apr 15, 2025 am 12:16 AM

Python and JavaScript have their own advantages and disadvantages in terms of community, libraries and resources. 1) The Python community is friendly and suitable for beginners, but the front-end development resources are not as rich as JavaScript. 2) Python is powerful in data science and machine learning libraries, while JavaScript is better in front-end development libraries and frameworks. 3) Both have rich learning resources, but Python is suitable for starting with official documents, while JavaScript is better with MDNWebDocs. The choice should be based on project needs and personal interests.

Python vs. JavaScript: Development Environments and Tools Python vs. JavaScript: Development Environments and Tools Apr 26, 2025 am 12:09 AM

Both Python and JavaScript's choices in development environments are important. 1) Python's development environment includes PyCharm, JupyterNotebook and Anaconda, which are suitable for data science and rapid prototyping. 2) The development environment of JavaScript includes Node.js, VSCode and Webpack, which are suitable for front-end and back-end development. Choosing the right tools according to project needs can improve development efficiency and project success rate.

The Role of C/C   in JavaScript Interpreters and Compilers The Role of C/C in JavaScript Interpreters and Compilers Apr 20, 2025 am 12:01 AM

C and C play a vital role in the JavaScript engine, mainly used to implement interpreters and JIT compilers. 1) C is used to parse JavaScript source code and generate an abstract syntax tree. 2) C is responsible for generating and executing bytecode. 3) C implements the JIT compiler, optimizes and compiles hot-spot code at runtime, and significantly improves the execution efficiency of JavaScript.

From Websites to Apps: The Diverse Applications of JavaScript From Websites to Apps: The Diverse Applications of JavaScript Apr 22, 2025 am 12:02 AM

JavaScript is widely used in websites, mobile applications, desktop applications and server-side programming. 1) In website development, JavaScript operates DOM together with HTML and CSS to achieve dynamic effects and supports frameworks such as jQuery and React. 2) Through ReactNative and Ionic, JavaScript is used to develop cross-platform mobile applications. 3) The Electron framework enables JavaScript to build desktop applications. 4) Node.js allows JavaScript to run on the server side and supports high concurrent requests.

See all articles