Convert Figma logo to code with AI

node-webrtc logonode-webrtc

node-webrtc is a Node.js Native Addon that provides bindings to WebRTC M87

2,723
459
2,723
110

Top Related Projects

13,642

Pure Go implementation of the WebRTC API

📡 Simple WebRTC video, voice, and data channels

WebRTC, WebRTC and WebRTC. Everything here is all about WebRTC!!

13,956

WebRTC Web demos and samples

A low-level JS video API that allows adding a completely custom video experience to web apps.

Quick Overview

node-webrtc is a Node.js native addon that provides WebRTC support. It allows developers to use WebRTC APIs in Node.js applications, enabling peer-to-peer communication, video/audio streaming, and data channels without a browser.

Pros

  • Brings WebRTC capabilities to Node.js environments
  • Supports both data channels and media streaming
  • Actively maintained with regular updates
  • Provides a familiar API for developers experienced with browser-based WebRTC

Cons

  • Complex setup process due to native dependencies
  • Performance may not match browser implementations in all scenarios
  • Limited platform support compared to browser-based WebRTC
  • Steeper learning curve for developers new to WebRTC concepts

Code Examples

  1. Creating a peer connection:
const wrtc = require('node-webrtc');

const peerConnection = new wrtc.RTCPeerConnection({
  iceServers: [{ urls: 'stun:stun.l.google.com:19302' }]
});
  1. Adding a data channel:
const dataChannel = peerConnection.createDataChannel('myChannel');

dataChannel.onopen = () => {
  console.log('Data channel is open');
  dataChannel.send('Hello, peer!');
};

dataChannel.onmessage = (event) => {
  console.log('Received message:', event.data);
};
  1. Handling ICE candidates:
peerConnection.onicecandidate = (event) => {
  if (event.candidate) {
    // Send the candidate to the remote peer
    sendToRemotePeer(JSON.stringify(event.candidate));
  }
};

Getting Started

  1. Install node-webrtc:

    npm install node-webrtc
    
  2. Create a new JavaScript file (e.g., webrtc-example.js) and add the following code:

const wrtc = require('node-webrtc');

const peerConnection = new wrtc.RTCPeerConnection({
  iceServers: [{ urls: 'stun:stun.l.google.com:19302' }]
});

const dataChannel = peerConnection.createDataChannel('myChannel');

dataChannel.onopen = () => {
  console.log('Data channel is open');
  dataChannel.send('Hello from node-webrtc!');
};

dataChannel.onmessage = (event) => {
  console.log('Received message:', event.data);
};

// Add signaling logic here to connect with a remote peer
  1. Run the example:
    node webrtc-example.js
    

Note: This is a basic example. You'll need to implement signaling logic to exchange connection information between peers for a complete WebRTC application.

Competitor Comparisons

13,642

Pure Go implementation of the WebRTC API

Pros of pion/webrtc

  • Written in Go, offering better performance and concurrency
  • Lightweight and easy to integrate into Go projects
  • Active development and community support

Cons of pion/webrtc

  • Limited ecosystem compared to Node.js
  • May require more manual implementation of certain features
  • Potentially steeper learning curve for developers not familiar with Go

Code Comparison

node-webrtc:

const wrtc = require('wrtc');
const pc = new wrtc.RTCPeerConnection();
pc.createOffer().then(offer => {
  pc.setLocalDescription(offer);
});

pion/webrtc:

import "github.com/pion/webrtc/v3"

peerConnection, err := webrtc.NewPeerConnection(webrtc.Configuration{})
offer, err := peerConnection.CreateOffer(nil)
err = peerConnection.SetLocalDescription(offer)

Both libraries provide similar functionality for creating WebRTC connections, but with syntax and patterns specific to their respective languages. node-webrtc leverages JavaScript's promise-based async operations, while pion/webrtc uses Go's error handling approach.

The choice between these libraries largely depends on the project's language requirements, performance needs, and the development team's expertise. node-webrtc may be more suitable for Node.js applications, while pion/webrtc is ideal for Go-based projects requiring WebRTC capabilities.

📡 Simple WebRTC video, voice, and data channels

Pros of simple-peer

  • Easier to use and more beginner-friendly
  • Provides a higher-level abstraction for WebRTC
  • Supports both Node.js and browser environments

Cons of simple-peer

  • Less flexible and customizable than node-webrtc
  • May have performance limitations for complex use cases
  • Lacks some advanced features available in node-webrtc

Code Comparison

simple-peer:

const Peer = require('simple-peer')

const peer = new Peer({ initiator: true })

peer.on('signal', data => {
  // Send signaling data to the other peer
})

node-webrtc:

const wrtc = require('node-webrtc')

const pc = new wrtc.RTCPeerConnection()

pc.createOffer().then(offer => {
  return pc.setLocalDescription(offer)
})

Summary

simple-peer is more user-friendly and works in both Node.js and browsers, making it ideal for simpler WebRTC applications. node-webrtc offers more control and advanced features but has a steeper learning curve and is limited to Node.js environments. Choose simple-peer for quick prototyping and cross-platform compatibility, and node-webrtc for more complex, server-side WebRTC implementations requiring fine-grained control.

WebRTC, WebRTC and WebRTC. Everything here is all about WebRTC!!

Pros of WebRTC-Experiment

  • More comprehensive collection of WebRTC demos and examples
  • Easier to get started with browser-based WebRTC applications
  • Includes additional features like screen sharing and file sharing

Cons of WebRTC-Experiment

  • Less focused on Node.js integration
  • May not provide as low-level access to WebRTC APIs
  • Could be more challenging to integrate into existing Node.js applications

Code Comparison

WebRTC-Experiment:

connection.openOrJoin('room-id');
connection.onstream = function(event) {
    document.body.appendChild(event.mediaElement);
};

node-webrtc:

const pc = new RTCPeerConnection();
const dc = pc.createDataChannel('test');
pc.createOffer().then(offer => pc.setLocalDescription(offer));

The WebRTC-Experiment code snippet demonstrates a higher-level abstraction for joining a room and handling media streams, while the node-webrtc example shows a more low-level approach to creating peer connections and data channels.

WebRTC-Experiment is better suited for rapid prototyping and browser-based applications, offering a wide range of examples and features. node-webrtc, on the other hand, provides deeper integration with Node.js and more granular control over WebRTC functionality, making it more suitable for server-side and native application development.

13,956

WebRTC Web demos and samples

Pros of samples

  • Browser-based implementation, making it accessible across platforms
  • Extensive collection of WebRTC examples covering various use cases
  • Regularly updated with the latest WebRTC features and best practices

Cons of samples

  • Limited to client-side JavaScript, lacking server-side capabilities
  • May require additional setup for signaling and TURN servers
  • Not suitable for building standalone WebRTC applications

Code Comparison

samples (JavaScript):

const peerConnection = new RTCPeerConnection(configuration);
const dataChannel = peerConnection.createDataChannel("myChannel");

dataChannel.onmessage = (event) => {
  console.log("Received:", event.data);
};

node-webrtc (Node.js):

const wrtc = require('wrtc');
const pc = new wrtc.RTCPeerConnection(configuration);
const dc = pc.createDataChannel("myChannel");

dc.onmessage = (event) => {
  console.log("Received:", event.data);
};

Both repositories provide WebRTC functionality, but node-webrtc offers server-side implementation for Node.js, while samples focuses on browser-based examples. samples is ideal for learning and prototyping, whereas node-webrtc is better suited for building standalone WebRTC applications with server-side control.

A low-level JS video API that allows adding a completely custom video experience to web apps.

Pros of lib-jitsi-meet

  • More comprehensive WebRTC solution, including features like multi-user conferencing and screen sharing
  • Better integration with Jitsi Meet ecosystem and other Jitsi projects
  • Active development and regular updates

Cons of lib-jitsi-meet

  • Steeper learning curve due to its complexity and extensive feature set
  • Potentially heavier resource usage for simpler WebRTC applications
  • Tighter coupling with Jitsi infrastructure, which may limit flexibility in some scenarios

Code Comparison

lib-jitsi-meet:

const options = {
    hosts: {
        domain: 'jitsi-meet.example.com',
        muc: 'conference.jitsi-meet.example.com'
    },
    bosh: 'https://jitsi-meet.example.com/http-bind'
};
const connection = new JitsiMeetJS.JitsiConnection(null, null, options);

node-webrtc:

const wrtc = require('wrtc');
const pc = new wrtc.RTCPeerConnection();
const dc = pc.createDataChannel('test');

The lib-jitsi-meet example shows configuration for connecting to a Jitsi server, while node-webrtc demonstrates basic peer connection and data channel creation. lib-jitsi-meet provides a higher-level abstraction, whereas node-webrtc offers more low-level control over WebRTC functionality.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

### NOTE ###

This repository is out-of-date. For an actively maintained fork supporting Node 20 and more recent versions of WebRTC, see @roamhq/wrtc. Once @roamhq/wrtc is stable, it will be merged back into this repository.

Other alternatives that might suit your needs are node-datachannel and werift

    

NPM macOS/Linux Build Status Windows Build status

node-webrtc is a Node.js Native Addon that provides bindings to WebRTC M87. This project aims for spec-compliance and is tested using the W3C's web-platform-tests project. A number of nonstandard APIs for testing are also included.

Install

npm i -g node-pre-gyp
npm install wrtc

Installing from NPM downloads a prebuilt binary for your operating system × architecture. Set the TARGET_ARCH environment variable to "arm" or "arm64" to download for armv7l or arm64, respectively. Linux and macOS users can also set the DEBUG environment variable to download debug builds.

You can also build from source.

Supported Platforms

The following platforms are confirmed to work with node-webrtc and have prebuilt binaries available. Since node-webrtc targets N-API version 3, there may be additional platforms supported that are not listed here. If your platform is not supported, you may still be able to build from source.

Linux macOS Windows
armv7l arm64 x64 arm64 x64 x64
Node 8 ✓ ✓ ✓ ✓ ✓
10 ✓ ✓ ✓ ✓ ✓
11 ✓ ✓ ✓ ✓ ✓
12 ✓ ✓ ✓ ✓ ✓
13 ✓ ✓ ✓ ✓ ✓
14 ✓ ✓ ✓ ✓ ✓
Electron 4 ✓ ✓ ✓
5 ✓ ✓ ✓

Examples

See node-webrtc/node-webrtc-examples.

Contributing

Contributions welcome! Please refer to the wiki.

NPM DownloadsLast 30 Days