node-webrtc provides Node.js bindings to WebRTC M73. 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
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
Browser Tests
These tests are run by Circle CI to ensure node-webrtc remains compatible with
the latest versions of Chrome and Firefox.
npm run test:browsers
node-webrtc Examples
See example/ for a node-webrtc example application demonstrating
RTCDataChannels, RTCRtpTransceivers, and more.