Use WebRTC in Node.js via a hidden Electron process
WebRTC is a powerful web API that lets browsers make peer-to-peer connections, and has already been
deployed in many popular browsers. It may sometimes be
useful to let Node.js programs use WebRTC, e.g. in
webtorrent-hybrid. However, the modules for WebRTC in Node (
node-rtc-peer-connection) are either hard to install, broken, or incomplete.
As a hack, this module talks to an invisible Electron instance in the background (using
electron-eval) to use Chromium's built-in WebRTC implementation.
This module is compatible with
simple-peer and passes its tests.
electron-webrtc is intended for use with RTCDataChannels, so the MediaStream API is not supported.
npm install electron-webrtc
// call exported function to create Electron processvar wrtc =// handle errors that may occur when trying to communicate with Electronwrtc// uses the same API as the `wrtc` packagevar pc = config// compatible with `simple-peer`var peer =initiator: truewrtc: wrtc// listen for errorswrtc
var wrtc = require('electron-webrtc')([opts])
Calling the function exported by this module will create a new hidden Electron process. It is recommended to only create one, since Electron uses a lot of resources.
opts object may contain specific options (including headless mode). See
The object returned by this function has the same API as the
Any errors that occur when communicating with the Electron daemon will be emitted by the
wrtc object (
Closes the Electron process and releases its resources. You may not need to do this since the Electron process will close automatically after the Node process terminates.
A handle to the
electron-eval daemon that this module uses to talk to the Electron process.
daemon.eval() evaluates code that throws an internal error.
Running on a headless server
Chromium normally won't run on a headless server since it expects a screen that it can render to. So to work around this, we can use
Xvfb, a utility that creates a framebuffer that Chromium can use as a virtual screen.
apt-get install xvfb # Ubuntu/Debianyum install xorg-x11-server-Xvfb # CentOS
HEADLESS env variable:
Or if you want to do it programmatically, initialize a new instance and pass in
headless as a key as demonstrated:
var wrtc = headless: true
Now you may run your WebRTC code with