0.0.3 • Published 6 years ago

hello-webrtc v0.0.3

Weekly downloads
1
License
ISC
Repository
github
Last release
6 years ago

Hello WebRTC

A simple js library to use WebRTC.

install

npm install --save hello-webrtc

usage

ES6:

import { WebRTCPeer, WebRTCClient } from 'hello-webrtc/src/hello-webrtc'

CommonJS:

const { WebRTCPeer, WebRTCClient } = require('hello-webrtc')

With Webpack:

import { WebRTCPeer, WebRTCClient } from 'hello-webrtc'

In browsers:

<script src="node_modules/hello-webrtc/dist/hello-webrtc.js"></script>
<script>
const { WebRTCPeer, WebRTCClient } = window.HelloWebRTC
</script>

To use:

let peer = new WebRTCPeer(options)
let client = new WebRTCClient(options)

WebRTCPeer

Methods

constructor(options)

options

  • stun: array of objects, required
  • turn: array of objects, required
  • websocket: an instance of WebSocket
  • user: which user do you want to connect to
  • room: in which room do you want to connect to the user
  • immediate: do you want to run setup() immediately, default is true
let peer = new WebRTCPeer({ stun, turn, websocket, user, room, immediate: false })

All required.

setup()

To setup the connection. If you set options.immediate to be true, you should not run setup() by yourself again.

send(data)

Send data by RTCDataChannel, data can be any type of data.

await peer.send({ msg: 'Hello, there!' })

getMedia(options)

Get user device media, return stream.

let stream = await peer.getMedia({ video: true, audio: false })

stream(stream)

Send stream.

let stream = await peer.getMedia({ video: true, audio: false })
await peer.stream(stream)

receive(type, callback)

Replace callback when you receive data message or stream.

await peer.receive('message', (data) => {
  // ...
})
await peer.receive('streams', (streams) => {
  // ...
})

destory()

Unlink peer connection and destory context.

Events

setup

When setup, only once in the life circle of a peer.

peer.on('setup', () => { ... })

message

When receive a message from remote peer.

peer.on('message', (data) => {
  // ...
})

streams

When receive streams from remote peer.

break

When called to break connection, before destory.

error

When recevie an error message.

peer.on('error', (error) => {})

WebRTCClient

Methods

constructor(options)

options

  • stun: array of objects, required
  • turn: array of objects, required
  • signaling: signaling websocket server url, required, pend token as a query string
let signaling = 'ws://localhost:8686?token=xxxx-xxxx-xxx'
let node = new WebRTCClient({ stun, turn, signaling })

connect({ user, room })

Connect with another user.

node.connect({ user: 100202004 }) // if you do not pass room name, it means you want to create a connect not in a room
node.connect({ user: 100202004, room: 291445 })

Why you need a room name? In fact, in a WebRTCClient instance, you can connect to multiple users (WebRTCPeer can only connect to another peer), with each user using one peer. But some times you may in a chat room, so two users may need more than one connection, pass a room name to certain which to connect.

Return an instance of WebRTCPeer.

destory()

Destory all connections in this node.

Events

offline

When receive a call to offline, before destory.

error

When receive an error message.

websocket server

You should implement your own signaling websokcet server. However I have provided one package:

npm install --save hello-webrtc-server

And then:

const SignalingServer = require('hello-webrtc-server')
const server = new SignalingServer()

And then use ws://your-host.com:8686 as signaling server address to pass into WebRTCClient or WebRTCPeer.