janus-simple-videoroom-client
v2.1.0
Published
Provides a simple high-level API that makes it easy to work with the Janus VideoRoom plugin
Downloads
26
Readme
janus-simple-videoroom-client
Built on top of janus.js, this thin client library provides a simple high-level API that makes it easy to work with the Janus VideoRoom plugin.
Install
npm install janus-simple-videoroom-client
Usage
import { createVideoRoomClient } from "janus-simple-videoroom-client"
async function joinRoom(server, roomId, displayName) {
const client = await createVideoRoomClient()
const session = await client.createSession(server)
const room = await session.joinRoom(roomId)
const pub = await room.publish({display: displayName})
pub.onTrackAdded(track => showVideo(track))
pub.onTrackRemoved(track => hideVideo(track))
const subs = {}
room.onPublisherAdded(publishers => publishers.forEach(subscribe))
room.onPublisherRemoved(unsubscribe)
async function subscribe(publisher) {
subs[publisher.id] = await room.subscribe([{feed: publisher.id}])
subs[publisher.id].onTrackAdded(track => showVideo(track))
subs[publisher.id].onTrackRemoved(track => hideVideo(track))
}
async function unsubscribe(publisherId) {
await subs[publisherId].unsubscribe()
}
}
Example
Check out the example.
API
VideoRoomClient
| Property | Description | | -------- | ----------- | | createSession(server, options) | Create a new VideoRoom session |
VideoRoomSession
| Property | Description | | -------- | ----------- | | isValid() | Return whether the session is connected and valid | | joinRoom(roomId) | Joins a room, returns a VideoRoom object | | watch(mountpointId, options) | Subscribe to a streaming mountpoint, return a StreamingSubscriber object | | attachToPlugin() | Attach to the VideoRoom plugin without joining a room, returns a JanusPluginHandleEx object | | destroy() | Destroy the session |
VideoRoom
| Property | Description | | -------- | ----------- | | pluginHandle | The JanusPluginHandleEx object associated with this room | | onPublisherAdded(callback) | Register a callback for when a publisher publishes media to the room | | onPublisherRemoved(callback) | Register a callback for when a publisher unpublishes | | publish(options) | Publish my webcam and return a VideoRoomPublisher object | | subscribe(streams, options) | Subscribe to the specified streams and return a VideoRoomSubscriber object | | leave() | Leave the room |
VideoRoomPublisher
| Property | Description | | -------- | ----------- | | publisherId | | | onTrackAdded(callback) | Register a callback for when a local MediaStreamTrack is available to display | | onTrackRemoved(callback) | Register a callback for when a local MediaStreamTrack terminates | | configure(options) | Modify publisher properties | | restart(options) | Trigger an ICE restart | | unpublish() | Stop publishing |
VideoRoomSubscriber
| Property | Description | | -------- | ----------- | | pluginHandle | The JanusPluginHandleEx object associated with this subscriber | | onTrackAdded(callback) | Register a callback for when a remote MediaStreamTrack is available to display | | onTrackRemoved(callback) | Register a callback for when a remote MediaStreamTrack terminates | | addStreams(streams) | Add additional streams to this (multi-stream) subscriber | | removeStreams(streams) | Remove streams from this subscriber | | pause() | Pause media delivery for this subscriber | | resume() | Resume media delivery | | configure(options) | Modify subscription properties | | restart(options) | Trigger an ICE restart | | unsubscribe() | Stop subscribing |
JanusPluginHandleEx
This object is the Janus plugin handle, but augmented with these convenient methods:
| Property | Description |
| -------- | ----------- |
| eventTarget | Used to listen for events on the handle (e.g. consentDialog, webrtcState, slowLink, etc.) |
| sendRequest(message) | Send a synchronous request to the plugin |
| sendAsyncRequest(message, jsep?, expectResponse) | Send an asynchronous request to the plugin (expectResponse is a function that will be passed a response and must return a boolean indicating whether it matches the request, e.g. a {"request":"start"}
will expect a response like {"videoroom":"event","started":"ok"}
) |