node-webrtc provides Node.js bindings to WebRTC M70. You can write Node.js applications that use RTCDataChannels with it. Some MediaStream APIs are supported.
x86 | x64 | armv6l | armv7l | arm64 | |
---|---|---|---|---|---|
Linux | - | ✔︎ | ✘ | ✔︎ | ✔︎ |
macOS | - | ✔︎ | - | - | - |
Windows | ✘ | ✔︎ | - | - | - |
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
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.
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
.
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.
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/latest-7/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
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/latest-7/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
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.
On Windows, we do not compile WebRTC sources with Clang. This is disabled by
passing is_clang=false
to gn gen
.
Once everything is built, run
npm test
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
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.