node-webrtc
node-webrtc is a Node.js Native Addon that provides bindings to WebRTC M87
Top Related Projects
Pure Go implementation of the WebRTC API
📡 Simple WebRTC video, voice, and data channels
WebRTC, WebRTC and WebRTC. Everything here is all about WebRTC!!
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
- Creating a peer connection:
const wrtc = require('node-webrtc');
const peerConnection = new wrtc.RTCPeerConnection({
iceServers: [{ urls: 'stun:stun.l.google.com:19302' }]
});
- 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);
};
- Handling ICE candidates:
peerConnection.onicecandidate = (event) => {
if (event.candidate) {
// Send the candidate to the remote peer
sendToRemotePeer(JSON.stringify(event.candidate));
}
};
Getting Started
-
Install node-webrtc:
npm install node-webrtc
-
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
- 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
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.
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 designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
### 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
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.
Top Related Projects
Pure Go implementation of the WebRTC API
📡 Simple WebRTC video, voice, and data channels
WebRTC, WebRTC and WebRTC. Everything here is all about WebRTC!!
WebRTC Web demos and samples
A low-level JS video API that allows adding a completely custom video experience to web apps.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot