node-datachannel
Version:
WebRTC For Node.js and Electron. libdatachannel node bindings.
127 lines (82 loc) • 3.55 kB
Markdown
# WebRTC For Node.js and Electron ( with WebSocket)
   
- Lightweight
- No need to deal with WebRTC stack!
- Small binary sizes (~8MB for Linux x64)
- Type infos for Typescript
- Integrated WebSocket Client & Server Implementation
This project is Node.js bindings for [libdatachannel](https://github.com/paullouisageneau/libdatachannel) library.
## Install
```sh
npm install node-datachannel
```
## Supported Platforms
`node-datachannel` targets N-API version 8 and supports Node.js v18.20 and above. It is tested on Linux, Windows and MacOS. For N-API compatibility please check [here](https://nodejs.org/api/n-api.html#n_api_n_api_version_matrix).
| | Linux [x64,armv7,arm64] (1) | Windows [x86,x64] | Mac [M1,x64] |
| ------------------------- | :-------------------------: | :---------------: | :----------: |
| N-API v8 (>= Node.js v18) | + | + | + |
**(1)** For Linux musl + libc
## Electron
`node-datachannel` supports Electron.
Please check [electron demo](/examples/electron-demo)
## WebRTC Polyfills
WebRTC polyfills to be used for libraries like `simple-peer`.
Please check [here for more](/src/polyfill)
### web-platform-tests
Please check actual situation [here](/test/wpt-tests/)
## WebSocket Client & Server
Integrated WebSocket Client & Server is available, which can be used separately or for signaling.
For an example usage, [check here](/examples/websocket)
## Example Usage
```js
import nodeDataChannel from 'node-datachannel';
// Log Level
nodeDataChannel.initLogger('Debug');
// Integrated WebSocket available and can be used for signaling etc
// const ws = new nodeDataChannel.WebSocket();
let dc1 = null;
let dc2 = null;
let peer1 = new nodeDataChannel.PeerConnection('Peer1', { iceServers: ['stun:stun.l.google.com:19302'] });
peer1.onLocalDescription((sdp, type) => {
peer2.setRemoteDescription(sdp, type);
});
peer1.onLocalCandidate((candidate, mid) => {
peer2.addRemoteCandidate(candidate, mid);
});
let peer2 = new nodeDataChannel.PeerConnection('Peer2', { iceServers: ['stun:stun.l.google.com:19302'] });
peer2.onLocalDescription((sdp, type) => {
peer1.setRemoteDescription(sdp, type);
});
peer2.onLocalCandidate((candidate, mid) => {
peer1.addRemoteCandidate(candidate, mid);
});
peer2.onDataChannel((dc) => {
dc2 = dc;
dc2.onMessage((msg) => {
console.log('Peer2 Received Msg:', msg);
});
dc2.sendMessage('Hello From Peer2');
});
dc1 = peer1.createDataChannel('test');
dc1.onOpen(() => {
dc1.sendMessage('Hello from Peer1');
});
dc1.onMessage((msg) => {
console.log('Peer1 Received Msg:', msg);
});
```
## Examples
Please check [examples](/examples/) folder
## Test
```sh
npm run test # Unit tests
node test/connectivity.js # Connectivity
```
## Build
Please check [here](/BULDING.md)
## API Docs
Please check [docs](/API.md) page
## Contributing
Contributions are welcome!
## Thanks
Thanks to [Streamr](https://streamr.network/) for supporting this project by being a Sponsor!