node-webrtc provides Node.js bindings to WebRTC M71. You can write Node.js applications that use RTCDataChannels with it. Some MediaStream APIs are supported.
x86 | x64 | armv6l | armv7l | arm64 | |
---|---|---|---|---|---|
Linux | - | ✔︎ | ✘ | ✔︎ | ✔︎ |
macOS | - | ✔︎ | - | - | - |
Windows | ✘ | ✔︎ | - | - | - |
Getting Started
Prerequisites
This library will attempt to download pre-compiled binaries for your particular platform using node-pre-gyp; however, if binaries are unavailable, it will fallback to building from source using node-cmake. When building from source, in addition to the prerequisites required by node-cmake, you will need
- Git
- CMake 3.12 or newer
- GCC 5.4 or newer (Linux)
- Xcode 9 or newer (macOS)
- Microsoft Visual Studio 2017 (Windows)
- Any additional prerequisites listed by WebRTC
Install
The easiest way to install is via npm:
npm install wrtc
If you want to work from source, run
git clone https://github.com/js-platform/node-webrtc.git
cd node-webrtc
npm install
Depending on what you checkout, npm install
will either download a
pre-compiled binary or attempt to build from source. Set SKIP_DOWNLOAD=true
to
always build from source. See below for more information on building from
source.
Build
If you would like to build node-webrtc from source, run
./node_modules/.bin/ncmake rebuild
You can pass either --debug
or --release
to build a debug or release build
of node-webrtc (and the underlying WebRTC library). Refer to
node-cmake for additional
command-line options to ncmake
.
Other Notes
Linux
On Linux, we statically link libc++ and libc++abi. Also, although we compile WebRTC sources with Clang (downloaded as part of WebRTC's build process), we compile node-webrtc sources with GCC 5.4 or newer.
armv7l
In order to cross-compile for armv7l on Linux,
- Set
TARGET_ARCH
to "arm". - Install the appropriate toolchain, and set
ARM_TOOLS_PATH
. - On Ubuntu, you may also need g++-arm-linux-gnueabihf.
wget https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/arm-linux-gnueabihf/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz
tar xf gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz
SKIP_DOWNLOAD=true TARGET_ARCH=arm ARM_TOOLS_PATH=$(pwd)/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf npm install
arm64
In order to cross-compile for arm64 on Linux,
- Set
TARGET_ARCH
to "arm64". - Install the appropriate toolchain, and set
ARM_TOOLS_PATH
. - On Ubuntu, you may also need g++-aarch64-linux-gnu.
wget https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
tar xf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
SKIP_DOWNLOAD=true TARGET_ARCH=arm64 ARM_TOOLS_PATH=$(pwd)/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu npm install
macOS
On macOS, we compile WebRTC sources with the version of Clang downloaded as part of WebRTC's build process, but we compile node-webrtc sources using the system Clang.
Windows
On Windows, we do not compile WebRTC sources with Clang. This is disabled by
passing is_clang=false
to gn gen
.
Tests
Unit & Integration Tests
Once everything is built, run
npm test
Web Platform Tests
web-platform-tests/wpt defines a suite of WebRTC tests. node-webrtc borrows a technique from jsdom/jsdom to run these tests in Node.js. Run the tests with
npm run wpt:test
MediaStream Loopback Example
This example demonstrates relaying MediaStreamTracks through node-webrtc. Run the example with
node examples/loopback.server.js
Then navigate to http://localhost:8080/loopback.client.html. You should be prompted for your microphone and webcam. Once granted, the browser negotiates an RTCPeerConnection with the server, and the server relays the browser's MediaStreamTracks. Finally, these are displayed in a <video> element in the browser.
Programmatic Video Example
This example demonstrates compositing an incoming video MediaStreamTrack with graphics drawn using node-canvas.
node examples/programmatic-video.server.js
Then navigate to http://localhost:8080/programmatic-video.client.html. You should be prompted for your webcam. Once granted, the browser negotiates an RTCPeerConnection with the server, and the server relays the browser video track with the text "node-webrtc" composited over it.