iris-js-sdk
Version:
JavaScript SDK for Iris Platform
1,262 lines (946 loc) • 43.9 kB
Markdown
# Iris RTC JavaScript SDK
[![npm version][npm-image]][npm-url]
[![Build Status][drone-badge]][drone-url]
This document covers the APIs for Iris Rtc JavaScript SDK.
Iris RTC JavaScript SDK provides a stack of simple API's to build an application to make audio video calls, multi user conferences and PSTN call.
## Architecture
**Client:** This layer controls the UI and uses the SDK to implement the desired use cases.
**Iris Rtc JavaScript Sdk:** SDK provides three classes IrisRtcConnection, IrisRtcStream and IrisRtcSession with number of API's to access to Iris Rtc platform.
**IrisRtcConnection:** This maintains connection with Rtc server. Responsible for sending and receiving messages.
**IrisRtcStream:** A stream consists of a particular type of media/data. For e.g. for a video call, it could be a audio or a video stream. For data sharing session, it could be a video file or an image or a file. IrisRtcStream provides API to create audio or video stream.
**IrisRtcSession:** This maps to a unique room/session which can be initiated or joined through SDK APIs. A session can have multiple participants and each participant can share their streams with other participants.
**Participant:** Each participant has a unique identifier and can share their streams with other participants. A participant can be part of multiple sessions. For self initiated call, a participant will have it's local stream.
## Install Iris JS SDK
```sh
npm install iris-js-sdk
```
or include iris-js-sdk as script tag in html using
```html
<script src="https://unpkg.com/iris-js-sdk/dist/iris-js-sdk.js"></script>
```
## APIs
- [Initialize Iris Sdk](#initialize-iris-sdk)
- [Create Iris Rtc Connection](#create-connection)
- [Create Iris Rtc Stream](#create-stream)
- [Create Iris Rtc Session](#create-session)
- [Join Iris Rtc Session](#join-session)
- [Reject Iris Rtc PSTN Session](#reject-session)
- [Create Iris Rtc Chat Session](#create-chat-session)
- [Join Iris Rtc Chat Session](#join-chat-session)
- [Send Chat Messages](#send-chat-messages)
- [Set Display Name](#set-display-name)
- [Mute Local Audio](#audio-mute)
- [Mute Local Video](#video-mute)
- [Mute Remote Participant Audio](#mute-remote-participant-audio)
- [Mute Remote Participant Video](#mute-remote-participant-video)
- [Switch Streams](#switch-streams)
- [Kick Participant](#kick-participant)
- [Lock Room](#lock-room)
- [Unlock Room](#unlock-room)
- [End Rtc Session](#end-the-call)
- [End Rtc Connection](#disconnect-rtc-connection)
- [How to use IrisRtcSdk](#how-to-use-irisrtcsdk)
**Initialize Iris SDK**
----
To initialize Iris Rtc Sdk we need to set the RtcConfig and create intstances of three classes namely IrisRtcConnection,
IrisRtcStream and IrisRtcSession.
* **IrisRtcConfig Update** <br />
Create config json object with following parameters to and set it to IrisRtcConfig.
```sh
-----------------------------------------------------------------------------
Property Type Description
-----------------------------------------------------------------------------
routingId string (MANDATORY) Unique Id of the user
irisToken string (MANDATORY) iris JWT token
domain string (MANDATORY) Domain name e.g. "iris.comcast.com"
type string (MANDATORY) Call type e.g. "video", "audio", "pstn" or "chat"
sessionType string (MANDATORY) Session type "create" or "join"
roomId string (MANDATORY) Unique room identifier received from EVM.
useBridge boolean (MANDATORY) For videobridge call "true" for peer to peer call "false"
stream string (OPTIONAL) By default call is "sendrecv". User can set "sendonly" or "recvonly"
fromTN TN (MANDATORY) Caller telephone number mandatory for PSTN calls only
toTN TN (MANDATORY) Callee telephone number mandatory for PSTN calls only
videoCodec string (OPTIONAL) Optional parameter to set vide codec. Default if H264
urls json (MANDATORY) JSON object with the eventManager urls as mentioned below
urls.eventManager string (MANDATORY) "eventManagerUrl"
useAnonymousLogin boolean (OPTIONAL) true for anonymous calls
roomName string (MANDATORY for ANONYMOUS) a random string, its a mandatory for anonymous calls
logLevel integer (OPTIONAL) Log level required by user
name string (OPTIONAL) Name of the participant
publicId string (OPTIONAL) Public Id of the participant
useUnifiedPlan boolean (OPTIONAL) true for using unified plan for sdp or false for using plan-b
```
* **Example** <br />
```javascript
IrisRtcConfig.updateConfig(userConfig);
```
* Initialize Iris Rtc configuration with above mentioned parameters.
**Notes:** Check [How to use IrisRtcSdk](#how-to-use-irisrtcsdk) for more information on parameters
**Create Connection**
----
This API is called to create new IrisRtcConnection which is used to make a connection with rtc server.
It accepts irisToken and rouitngId of the user which are required to create connection. On successful
connection this will subscribe for notification based on topic like video or audio, user will be
notified based on subscription topic.
* **API Name** <br />
```javascript
IrisRtcConnection.connect()
```
* **Parameters** <br />
Pass the following parameters with connect API:
```sh
-----------------------------------------------------------------------------
Property Type Description
-----------------------------------------------------------------------------
irisToken string (MANDATORY) Authorization token
routingId string (MANDATORY) Unique participant id.
e.g. "routingId@appdomain.com"
eventManagerUrl string (MANDATORY) Event Manager url to make iris connection
```
* **Example** <br />
```javascript
var irisRtcConnection = new IrisRtcConnection();
irisRtcConnection.connect(irisToken, routingId, eventManagerUrl);
```
* Initialize Iris Rtc Connection object
* Call connect API of Iris connection with irisToken and rouitngId of user
* Wait for irisRtcConnection.onConnected callback if connection is successful or irisRtcConnection.onConnectionFailed callback if connection fails with error.
* **Events** <br/>
* **onConnected** event is triggered when the connection has been successfully established. Upon onConnected callback
notification subscription is done.
* **onConnectionFailed** event is triggered when failed to establish a connection
**Create Stream**
----
This API is called to create local media streams based on type of call,
like audio call or video call. Client will receive local media streams. These streams are used
to provide a local preview to user and used to create a iris rtc session.
* **API Name** <br />
```javascript
IrisRtcStream.createStream()
```
* **Parameters** <br />
Pass the following parameters in object:
```sh
-----------------------------------------------------------------------------
Property Type Description
-----------------------------------------------------------------------------
streamConfig object (MANDATORY) Type of stream based on video call or audio call, resolution, contraints(OPTIONAL)
e.g. {"streamType": streamType, "resolution": resolution, "constraints": constraints}
```
* **Example** <br />
```javascript
var irisRtcStream = new IrisRtcStream();
var streamConfig = {
streamType : video,
resolution : "hd",
constraints : { video : false, audio: false }
}
irisRtcStream.createStream(streamConfig);
```
* Initialize Iris Rtc Stream object
* Call createStream API of Iris stream with streamType like 'video', 'audio'
* Wait for Stream.onLocalStream callback to receive a local media stream
* **Event**<br />
* **onLocalStream** event is triggered when the local video and audio tracks are successfully created.
**Create Session**
----
This API is called to create the rtc session. Manages differet types of calls like
video call, audio call, PSTN/Sip call, chat messages and picture share. This API is used for
creating a new session. Stream object received as parameter will be added to the conference.
* **API Name** <br />
```javascript
IrisRtcSession.createSession()
```
* **Parameters** <br />
Pass the following parameter in createSession API call:
```sh
-----------------------------------------------------------------------------
Property Type Description
-----------------------------------------------------------------------------
userConfig json (MANDATORY) Same as the userConfig defined above should have
type, irisToken, routingId and userData
type is call type like "video" or "audio"
roomId - Room id received from create room call
userData - Data and Notification payload to be sent to the createrootevent API
connection object (MANDATORY) IrisRtcConnection object
irisRtcStream object (MANDATORY) Instance of IrisRtcStream after createStream API is called
and stream is created.
```
* **Example** <br />
```javascript
var irisRtcSession = new IrisRtcSession();
irisRtcSession.createSession(userConfig, connection, irisRtcStream);
```
* Initialize Iris Rtc Session object.
* Call createSession API of Iris Session with streamObject which has local meida tracks which are received in onLocalStream, participants to whom user is calling, user data that is to be sent for the createrootevent request and notification payload in case of incoming call.
* Wait for irisRtcSession.onSessionCreated and irisRtcSession.onSessionConnected to receive on successfull session creatd notifications.
* **Events** <br />
* **onSessionCreated** event is triggered when the session is successfully created.
* **onSessionConnected** event is triggered when the user joins the session.
**Join Session**
----
This API is called to join the rtc session. Manages differet types of calls like
video call, audio call, PSTN/Sip call, chat messages and picture share. This API is used for
joining a new session. Stream object received as parameter will be added to the conference.
* **API Name** <br />
```javascript
IrisRtcSession.joinSession
```
* **Parameters** <br />
Pass the following parameter in joinSession API call:
```sh
-----------------------------------------------------------------------------
Property Type Description
-----------------------------------------------------------------------------
userConfig json (MANDATORY) Same as the userConfig defined above should have
type, irisToken and userData.
type is call type like "video" or "audio"
roomId - Room id received from create room call
userData - Data and Notification payload to be sent to the createrootevent API
connection object (MANDATORY) IrisRtcConnection object
irisRtcStream object (MANDATORY) Instance of IrisRtcStream after createStream API is called
and stream is created.
notificationPayload json (MANDATORY) This is the notification payload received through onNotifcation event
pass this notification as received - DONT ALTER ANY PARAMETERS
```
* **Example** <br />
```javascript
var irisRtcSession = new IrisRtcSession();
irisRtcSession.joinSession(config, connection, irisRtcStream, notificationPayload);
```
* Initialize Iris Rtc Session object.
* Call joinSession API of Iris RTC Session with Instance of IrisRtcStream once the stream is created after calling createStream, userConfig with callType and notification payload in case of incoming call.
* Wait for irisRtcSession.onSessionCreated and irisRtcSession.onSessionConnected to receive on successfull session creatd notifications.
* **Events** <br />
* **onSessionCreated** event is triggered when the session is successfully created.
* **onSessionConnected** event is triggered when the user joins the session.
**Reject Session**
----
This API is called to reject an incoming PSTN/Sip session. The notification object received in the incoming call notification will be used to reject the incoming PSTN call .
* **API Name** <br />
```javascript
IrisRtcSession.rejectSession
```
* **Parameters** <br />
Pass the following parameter in joinSession API call:
```sh
-----------------------------------------------------------------------------
Property Type Description
-----------------------------------------------------------------------------
notificationPayload json (MANDATORY) This is the notification payload received through onNotifcation event
Pass this notification as received - DON'T ALTER ANY PARAMETERS
```
* **Example** <br />
```javascript
irisRtcConnection.rejectSession(notificationPayload);
```
* Call rejectSession API of Iris RTC Connection with notification payload of the incoming call.
**Create Chat Session**
----
This API is called to create a new chat ONLY iris rtc session. provides option for group chat messages
* **API Name** <br />
```javascript
IrisRtcSession.createChatSession
```
* **Parameters** <br />
Pass the following parameter in createChatSession API call:
```sh
-----------------------------------------------------------------------------
Property Type Description
-----------------------------------------------------------------------------
userConfig json (MANDATORY) Same as the userConfig defined above should have
type and userData.
type is call type like "chat"
roomId - Room id received from create room call
userData - Data and Notification payload to be sent to the createrootevent API
connection object (MANDATORY) IrisRtcConnection object
```
* **Example** <br />
```javascript
var irisRtcSession = new IrisRtcSession();
irisRtcSession.createChatSession(userConfig, connection);
```
* Initialize Iris Rtc Session object.
* Call createChatSession API of Iris RTC Session withnuserConfig with callType and roomId
* Wait for irisRtcSession.onSessionCreated and irisRtcSession.onSessionConnected to receive on successfull session created events.
* **Events** <br />
* **onSessionCreated** event is triggered when the session is successfully created.
* **onSessionConnected** event is triggered when the user joins the session.
**Join Chat Session**
----
This API is called to join the chat rtc session. Manages group chat messages. This API is used for
joining a chat session. Stream object received as parameter will be added to the conference.
* **API Name** <br />
```javascript
IrisRtcSession.joinChatSession
```
* **Parameters** <br />
Pass the following parameter in joinChatSession API call:
```sh
-----------------------------------------------------------------------------
Property Type Description
-----------------------------------------------------------------------------
userConfig json (MANDATORY) Same as the userConfig defined above should have
type and userData.
type is call type like "chat"
roomId - Room id received from create room call
userData - Data and Notification payload to be sent to the createrootevent API
connection object (MANDATORY) IrisRtcConnection object
notificationPayload json (MANDATORY) This is the notification payload received through onNotifcation event
pass this notification as received - DONT ALTER ANY PARAMETERS
```
* **Example** <br />
```javascript
var irisRtcSession = new IrisRtcSession();
irisRtcSession.joinChatSession(userConfig, connection, notification);
```
* Initialize Iris Rtc Session object.
* Call joinChatSession API of Iris RTC Session with userConfig which has callType and notification payload received through onNotification.
* Wait for irisRtcSession.onSessionCreated and irisRtcSession.onSessionConnected to receive on successfull session creatd notifications.
* **Events** <br />
* **onSessionCreated** event is triggered when the session is successfully created.
* **onSessionConnected** event is triggered when the user joins the session.
**Send Chat Messages**
----
This API allows user to send group chat messages.
* **API Name** <br />
```javascript
IrisRtcSession.sendChatMessage
```
* **Parameters** <br />
Pass the following parameter in sendChatMessage api call:
```sh
-----------------------------------------------------------------------------
Property Type Description
-----------------------------------------------------------------------------
roomId string (MANDATORY) Unique id of the room
message String (MANDATORY) Message to be sent
id string (MANDATORY) Unique id for the message
```
* **Example** <br />
```javascript
irisRtcSession.sendChatMessage(roomId, id, message)
```
* Call sendChatMessage API of Iris Rtc Session to send messages.
**Receive Chat Messages**
----
This API allows user to receive group chat messages.
* **API Name** <br />
```javascript
IrisRtcSession.onChatMessage
```
* **Parameters** <br />
Parameter in onChatMessage api call are roomId and chatMsgJson which will have:
```sh
-----------------------------------------------------------------------------
Property Type Description
-----------------------------------------------------------------------------
message string Message received
from string Remote participant id
rootNodeId string Root node id for the message
childNodeId string Child node id for the meesage
```
* **Example** <br />
```javascript
irisRtcSession.onChatMessage = function(roomId, chatMsgJson){}
```
* Call onChatMessage API of Iris Rtc Session to receive messages.
**Receive Chat Message Acknowledgement**
----
This API allows user to receive acknowledgement for group chat messages.
* **API Name** <br />
```javascript
IrisRtcSession.onChatAck
```
* **Parameters** <br />
Parameter in onChatAck api call are roomId and chatAckJson which will have :
```sh
-----------------------------------------------------------------------------
Property Type Description
-----------------------------------------------------------------------------
id string Unique id for the message sent
statusCode string Status of the sent message
200 : Messages is sent
400 : Failed to send
0 : Evm is not available
statusMessage string Status message above codes "Sucess", "Failed" and "Evm is down"
rootNodeId string Tiemebased v1 uuid
childNodeId string Timebased v1 uuid
```
* **Example** <br />
```javascript
irisRtcSession.onChatAck = function(roomId, chatAckJson){}
```
* Listen to onChatAck callback of Iris Rtc Session to receive ack messages.
**Audio Mute**
----
This API allows user to mute local audio.
* **API Name** <br />
```javascript
IrisRtcSession.audioMuteToggle
```
* **Example** <br />
```javascript
irisRtcSession.audioMuteToggle(roomId)
```
* Call audioMuteToggle API of Iris Session when you want to mute audio.
**Video Mute**
----
This API allows user to mute local video.
* **API Name** <br />
```javascript
IrisRtcSession.videoMuteToggle
```
* **Example** <br />
```javascript
irisRtcSession.videoMuteToggle(roomId)
```
* Call videoMuteToggle API of Iris Session when you want to mute video
**Mute Remote Participant Audio**
----
This API allows user to mute remote participant audio.
* **API Name** <br />
```javascript
IrisRtcSession.muteParticipantAudio
```
* **Example** <br />
```javascript
irisRtcSession.muteParticipantAudio(roomId, jid, mute)
```
* Call muteParticipantAudio API of Iris Session when you want to mute participant audio.
**Mute Remote Participant Video**
----
This API allows user to mute remote participant video.
* **API Name** <br />
```javascript
IrisRtcSession.muteParticipantVideo
```
* **Example** <br />
```javascript
irisRtcSession.muteParticipantVideo(roomId, jid, mute)
```
* Call muteParticipantVideo API of Iris Session when you want to mute participant video
**Set Display Name**
----
This API allows user to set the display name.
* **API Name** <br />
```javascript
IrisRtcSession.setDisplayName
```
* **Example** <br />
```javascript
irisRtcSession.setDisplayName(roomId, name)
```
* Call setDisplayName API of Iris Session to set the display name
**End the Call**
----
This API allows user to disconnect or end a call or session.
* **API Name** <br />
```javascript
IrisRtcSession.endSession
```
* **Example:** <br />
```javascript
irisRtcSession.endSession(roomId);
```
* Call endSession API of Iris Session to end the call.
* **Events** <br />
* **onSessionEnd** event is triggered when session is closed.
**Disconnect Rtc Connection**
----
This API allows user to close connection with rtc server.
* **API Name** <br />
```javascript
IrisRtcConnection.close
```
* **Example** <br />
```javascript
irisRtcConnection.close();
```
* Call close API of Iris Connection to end the connection.
* **Event** <br />
* **onClose** event is triggered when the session is closed.
**Hold PSTN Call**
----
This API allows user to put call on hold.
* **API Name** <br />
IrisRtcSession.pstnHold()
* **Example** <br />
```javascript
irisRtcSession.pstnHold(roomId, participnatJid)
```
* Call pstnHold API of Iris session to put a call on hold.
**Unhold PSTN Call**
----
This API allows user to unhold the call.
* **API Name** <br />
```javascript
IrisRtcSession.pstnUnHold
```
* **Example** <br />
```javascript
irisRtcSession.pstnUnHold(roomId, participantJid)
```
* Call pstnUnHold API of Iris session to come back to call again.
**Merge PSTN Call**
----
This API allows user to merge two pstn calls.
* **API Name** <br />
```javascript
IrisRtcSession.pstnMerge
```
* **Example** <br />
```javascript
irisRtcSession.pstnMerge(roomId, firstParticipantJid, secondSession, secondParticipantJid)
```
* Call pstnMerge API of Iris session to merge two pstn calls
**Switch Streams**
----
This API allows user to switch streams between the cameras, can be used for screen share as well
* **API Name** <br />
```javascript
IrisRtcSession.switchStream
```
* **Example** <br />
```javascript
//irisRtcStream is an IrisRtcStream object to listen to local streams
var streamConfig = {
streamType : video,
resolution : "hd",
constraints : { video : false, audio: false }
}
irisRtcSession.switchStream(roomId, irisRtcStream, streamConfig);
```
* Call switchStream API of to change the stream user is streaming
**Kick Participant**
----
This API allows room moderator to kick other participants out of the room. Kicked out pariticpant won't be able to rejoin the current session.
And only a moderator can kick participants.
* **API Name** <br />
```javascript
IrisRtcSession.kickParticipant
```
* **Example** <br />
```javascript
irisRtcSession.kickParticipant(roomId, participantJid, participantName);
```
* Call kickParticipant API to evict a participant from ongoing session.
**Lock Room**
----
This API allows room moderator to lock the room with exitsing number of participants in an ongoing sesison.
Once room is locked no new participants are allowed to join the room.
During a session if any participant gets disconnected because of some reason, moderator can
control whether or not disconnected participant to be allowed to join the room again by setting rejoin
attribute to true/false while calling this API.
* **API Name** <br />
```javascript
IrisRtcSession.lockRoom
```
* **Example** <br />
```javascript
irisRtcSession.lockRoom(roomId, rejoin);
```
* Call lockRoom API to lock an ongoing session with existing number of participants.
**Unlock Room**
----
This API allows room moderator to unlock the already locked room, Once room is unlocked new participants can join the room.
* **API Name** <br />
```javascript
IrisRtcSession.unlockRoom
```
* **Example** <br />
```javascript
irisRtcSession.unlockRoom(roomId);
```
* Call lockRoom API to unlock an already locked session.
# Callback Event Handlers
**onConnected**
----
Client should implement this callback function to receive an event when connection is successfully established.
* **Callback Name** <br />
```javascript
IrisRtcConnection.onConnected
```
* **Usage:** <br />
```javascript
irisRtcConnection.onConnected = function() {
// Rtc connection established
}
```
**onConnectionFailed**
----
Client should implement this callback function to receive an event when connection fails due to an error
* **Callback Name** <br />
```javascript
IrisRtcConnection.onConnectionFailed
```
* **Usage:** <br />
```javascript
irisRtcConnection.onConnectionFailed = function(error){
// Rtc connection failed
}
```
**Receive LocalStream**
----
To display the local preview of the client, client has to implement this callback function. This allows user to receive local video tracks and audio tracks.
* **Callback Name** <br />
```javascript
IrisRtcStream.onLocalStream
```
* **Usage:** <br />
```javascript
IrisRtcStream.onLocalStream = function(stream) {
// Local stream is received
}
```
* **Parameters** <br />
Following parameters are received through callback function:
```sh
---------------------------------------------------------------------------
Property Type Description
---------------------------------------------------------------------------
stream object (MANDATORY) An object with audio and video streams
```
**Receive RemoteStream**
----
To display the remote video of the participant, client has to implement this callback function. This allows user to receive remote video tracks and audio tracks.
* **Callback Name** <br />
```javascript
IrisRtcSession.onRemoteStream
```
* **Usage:** <br />
```javascript
irisRtcSession.onRemoteStream = function(roomId, remoteStream) {
// Remote particpants stream is received
}
```
* **Parameters** <br />
Following parameters are received through callback function:
```sh
---------------------------------------------------------------------------
Property Type Description
---------------------------------------------------------------------------
roomId string (MANDATORY) Unique id of the room
remoteStream object (MANDATORY) An object with remote audio and video streams
```
**Session Created**
----
Client should implement this callback function to receive an event when a session is successfully created.
* **Callback Name** <br />
```javascript
onSessionCreated
```
* **Usage:** <br />
```javascript
IrisRtcSession.onSessionCreated = function(roomID) {
// Room is created and user has joined
// roomId - unique id of the room
}
```
* **Parameters** <br />
Following parameters are received through callback function:
```sh
---------------------------------------------------------------------------
Property Type Description
---------------------------------------------------------------------------
roomId string Unique id of the room
```
**Session Connected**
----
Client should implement this callback function to receive an event when the user joins session.
* **Callback Name** <br />
```javascript
onSessionJoined
```
* **Usage:** <br />
```javascript
// Listen on session object
irisRtcSession.onSessionConnected = function(roomId) {
// Connection is established between particpants
}
```
* **Parameters** <br />
Following parameters are received through callback function:
```sh
---------------------------------------------------------------------------
Property Type Description
---------------------------------------------------------------------------
roomId string Unique id for the room
```
**Remote Participant Joined**
----
Client should implement this callback function to receive an event when the user joins session.
* **Callback Name** <br />
```javascript
onSessionParticipantJoined
```
* **Usage:** <br />
```javascript
// Listen on session object
irisRtcSession.onSessionParticipantJoined = function(roomId, participantJid) {
// Remote participant has joined the conference
}
```
* **Parameters** <br />
Following parameters are received through callback function:
```sh
---------------------------------------------------------------------------
Property Type Description
---------------------------------------------------------------------------
roomId string Unique id of the room
participantJid string Remote particpant's unique id
```
**Session Connection Error**
----
Client should implement this callback function to receive an event when there is an error in establishing connection between particpants in a session.
* **Callback Name** <br />
```javascript
onConnectionError
```
* **Usage:** <br />
```javascript
// Listen on session object
irisRtcSession.onError = function(roomId, error) {
// Session creation is failed with an error
}
```
**Participant Leaves Session**
----
Client should implement this callback function to receive an event when a remote participant leaves the session.
* **Callback Name** <br />
```javascript
onSessionParticipantLeft
```
* **Usage:** <br />
```javascript
// Listen on session object
irisRtcSession.onSessionParticipantLeft = function(roomId, participantJid, closeSession) {
// Remote participant has left the room
}
```
* **Parameters** <br />
Following parameters are received through callback function:
```sh
---------------------------------------------------------------------------
Property Type Description
---------------------------------------------------------------------------
roomId string Unique id for room
participantJid string Remote particpant's unique id
closeSession boolean This boolean is true when last particpant is left the room
```
**Dominant Speaker Change**
----
Client should implement this callback function to receive an event about dominant speaker change in the conference.
* **Callback Name** <br />
```javascript
onDominantSpeakerChanged
```
* **Usage:** <br />
```javascript
// Listen to event on session object
irisRtcSession.onDominantSpeakerChanged = function(roomId, id) {
// Dominant speaker in conference is changed
}
```
* **Parameters** <br />
Following parameters are received through callback function:
```sh
---------------------------------------------------------------------------
Property Type Description
---------------------------------------------------------------------------
roomId string Unique id of the room
id string "id" of the dominant speaker
```
***
# How to use IrisRtcSdk
### Install SDK
Install Iris JavaScript SDK using npm
```sh
npm install iris-js-sdk
```
or include iris-js-sdk as script tag in html using
```html
<script src="https://unpkg.com/iris-js-sdk/dist/iris-js-sdk.min.js"></script>
```
### Example for Using API's
```javascript
// Require iris-js-sdk in client. This will load IrisRtcConnection,
// IrisRtcSession and IrisRtcStream
var IrisRtcSDK = require(iris-js-sdk);
var IrisRtcConnection = IrisRtcSDK.IrisRtcConnection;
var IrisRtcStream = IrisRtcSDK.IrisRtcStream;
var IrisRtcSession = IrisRtcSDK.IrisRtcSession;
// Initializing Iris Rtc Sdk
// Initialize configuration with below mentioned parameters.
var config = {};
// Unique routingId of the particpant
config.routingId = ""
// Iris JWT token
config.irisToken = ""
// application is domain
config.domain = "xxxxxxxx.xxxxxxx.com";
// Type of call user wants to make
// "video" - call with both video and audio
// "audio" - call with only audio
// "pstn" - call with audio for PSTN
// "chat" - call with only chat messages
config.type = "video";
// Session type create session or join session
config.sessionType = "create" // "join"
// A boolean value
// "true" - Uses videobridge
// "false" - Uses P2P
config.useBridge = true;
// A boolean value
// "true" - enables user to join an anonymous session
// "false" - Non-anonymous call user has to provide username and password to login
config.useAnonymousLogin = true;
// Any alphanumeric string can be a roomName or session name to join anonymous session
config.roomName = "room";
// Make two way or one way call
// "sendrecv" - Two way call
// "sendonly" - Caller sends his media and wont receive any media from remote participant
// "recvonly" - Caller receives remote participants media and doesn't share is media.
// It is an optional parameter by default it will be "sendrecv"
config.stream = "sendonly"
// Telephone number of the participant
config.fromTN = 1234567890
// Telephone number of the remote participant
config.toTN = 1234567890
// SDK log levels
// 0 : ERROR; 1 : WARNING; 2 : INFO; 3 : VERBOSE
config.logLevel = 3
// Set name for the user
config.name = "Shiva"
// URLs required
config.urls.eventManager = "url";
// Initialize IrisRtcSdk with init by passing config
IrisRtcConfig.updateConfig(config);
// Create Iris Rtc Connection
//
// Initialize Iris Rtc Connection object
// Call connect API of Iris connection with irisToken and routingId of user
// Wait for IrisRtcConnection.onConnected callback if connection is successful or
// IrisRtcConnection.onConnectionFailed callback if connection fails with error.
var irisRtcConnection = new IrisRtcConnection();
irisRtcConnection.connect(irisToken, routingId);
irisRtcConnection.onConnected = function() {
// Connection is successful with rtc server.
// Subscribed to receive incoming call notification
// Now do Iris create stream
}
irisRtcConnection.onConnectionFailed = function(){
// Connection failed
}
// Create Iris Rtc Stream
//
// Initialize Iris Rtc Stream object
// Call createStream API of Iris stream with json streamConfig which has
// streamType - 'video', 'audio'
// constraints - Media constraints
// resolution - "hd" or "sd"
// Wait for IrisRtcStream.onLocalStream callback to receive local video and audio tracks
// These tracks previewed to the user and also these are passed as agrument to create a
// new iris rtc session.
var irisRtcStream = new IrisRtcStream();
// set stream type as video or audio and video resolution
var streamConfig = {
"streamType": "video", // audio, pstn
"resolution": "hd", //640, 320
}
// Set media constraints, this is optional if you are setting streamType above
// It is an optional parameter
var constraints = {
video : { mandatory: {}, optional: [] },
audio : { mandatory: {}, optional: [] }
}
streamConfig.constraints = constraints;
// User can either set streamType or constraints
var localStream = irisRtcStream.createStream(streamConfig);
irisRtcStream.onLocalStream = function(localStream) {
// Render local video and audio to user
// Pass these tracks to createSession API of IriRtcSession to create session
}
// Create Iris Rtc Session
//
// Call createSession API of Iris Session with
// "userConfig" userConfig object created above with type, roomId and userData
// "connection" Iris rtc connection object
// "irisRtcStream" - Instance of IrisRtcStream after creating stream using createStream API
// Session manages audio call, video call, pstn calls, chat messages
var irisRtcSession = new IrisRtcSession();
irisRtcSession.createSession(userConfig, connection, irisRtcStream);
// Wait for irisRtcSession.onSessionCreated callback event
irisRtcSession.onSessionCreated = function(roomId) {
// Session is created
}
// Wait for irisRtcSession.onSessionJoined callback event
irisRtcSession.onSessionJoined = function(roomId, myJid) {
// User joined the session
}
// Wait for irisRtcSession.onSessionJoined callback event.
irisRtcSession.onSessionConnected = function(roomId) {
// User joined the session
}
// Wait for irisRtcSession.onSessionParticipantJoined callback event
irisRtcSession.onSessionParticipantJoined = function(roomId, participantJid) {
// Remote participant joined the session
}
// On remote stream received from remote participant
irisRtcSession.onRemoteStream = function(roomId, remoteStream) {
// Render remote media tracks to user
}
irisRtcSession.onError = function(error) {
// Error while joining the session
}
irisRtcSession.onSessionParticipantLeft = function(roomId, participantJid, closeSession) {
// Remote participant left the conference.
// Remove local tracks from conference
// end the session
}
// To set display name
// Call this API to set display name
irisRtcSession.setDisplayName(roomId, name);
// To Send and Receive chat messages
// To send chat message call sendChatMessage
// message - text message to be sent
// id - Unique Id for the message
irisRtcSession.sendChatMessage(roomId, id, message);
// To receive chat message
// Listen to onChatMessage on session object
irisRtcSession.onChatMessage = function(roomId, chatMsgJson){
// Text message is received from a participant
}
// Listen to this callback for Chat message acknowledgement
irisRtcSession.onChatAck = function(roomId, chatAckJson){
// This event is recieved for every message sent out
// chatAckJson will id, statusCode, statusMessage, rootNodeId
// and childNodeId paramaeters
}
// Screen Share or Switch Streams
//
// To switch streams between two camera devices
// This API also used for screen share with constraints in streamConfig
// irisRtcStream is an object of IrisRtcStream to listen to onLocalStream
irisRtcSession.switchStream(irisRtcStream, streamConfig){
// Switches the stream from one camera or other
// can share screen as well
}
// Call toggleAudioMute API of Iris Stream when you want to mute audio.
irisRtcSession.audioMuteToggle(roomId)
// Call toggleVideoMute API of Iris Stream when you want to mute video.
irisRtcSession.videoMuteToggle(roomId)
// Call muteParticipantAudio API of Iris Stream when you want to mute participant audio.
irisRtcSession.muteParticipantAudio(roomId, jid, mute)
// Call muteParticipantVideo API of Iris Stream when you want to mute participant video.
irisRtcSession.muteParticipantVideo(roomId, jid, mute)
// End Iris Rtc Session
// Call endSession API of Iris Session to end the call
irisRtcSession.endSession(roomId);
// Disconnect rtc connection.
irisRtcConnection.close();
```
[npm-image]: https://badgen.net/npm/v/iris-js-sdk
[npm-url]: https://www.npmjs.com/package/iris-js-sdk
[drone-url]: https://drone-server.555.systems/555platform/rtc-js-sdk
[drone-badge]: https://drone-server.555.systems/api/badges/555platform/rtc-js-sdk/status.svg?branch=master