Skylink Class
Defined in: source/template/header.js:120
Available since 0.5.0
Prerequisites on using Skylink
Before using any Skylink functionalities, you will need to authenticate your App Key using theinit()
method.
To manage or create App Keys, you may access the Skylink Developer Portal here.
To view the list of supported browsers, visit the list here.
Here are some articles to help you get started:
Here are some demos you may use to aid your development:
- Getaroom.io [Demo / Source code]
- Creating a component [Link]
You may see the example below in the Constructor tab to have a general idea how event subscription
and the ordering of init()
and
joinRoom()
methods should be called.
If you have any issues, you may find answers to your questions in the FAQ section on our support portal, asks questions, request features or raise bug tickets as well.
If you would like to contribute to our SkylinkJS codebase, see the contributing README.
Skylink
()
Example:
// Here's a simple example on how you can start using Skylink. var skylinkDemo = new Skylink();
// Subscribe all events first as a general guideline skylinkDemo.on("incomingStream", function (peerId, stream, peerInfo, isSelf) { if (isSelf) { attachMediaStream(document.getElementById("selfVideo"), stream); } else { var peerVideo = document.createElement("video"); peerVideo.id = peerId; peerVideo.autoplay = "autoplay"; document.getElementById("peersVideo").appendChild(peerVideo); attachMediaStream(peerVideo, stream); } });
skylinkDemo.on("peerLeft", function (peerId, peerInfo, isSelf) { if (!isSelf) { var peerVideo = document.getElementById(peerId); // do a check if peerVideo exists first if (peerVideo) { document.getElementById("peersVideo").removeChild(peerVideo); } else { console.error("Peer video for " + peerId + " is not found."); } } });
// init() should always be called first before other methods other than event methods like on() or off(). skylinkDemo.init("YOUR_APP_KEY_HERE", function (error, success) { if (success) { skylinkDemo.joinRoom("my_room", { userData: "My Username", audio: true, video: true }); } });
Events Sequence:
There is no event sequence for this method._ACKProtocolHandler
()
Function that handles the "ACK" data transfer protocol.
Events Sequence:
There is no event sequence for this method._addIceCandidateFromQueue
()
Function that adds all the Peer connection buffered ICE candidates received. This should be called only after the remote session description is received and set.
Events Sequence:
There is no event sequence for this method._addIceCandidateToQueue
()
Function that buffers the Peer connection ICE candidate when received before remote session description is received and set.
Events Sequence:
There is no event sequence for this method._addLocalMediaStreams
()
Function that sets User's Stream to send to Peer connection.
Priority for shareScreen()
Stream over getUserMedia()
Stream.
Events Sequence:
There is no event sequence for this method._addPeer
()
Function that starts the Peer connection session. Remember to remove previous method of reconnection (re-creating the Peer connection - destroy and create connection).
Events Sequence:
There is no event sequence for this method._addSDPSsrcFirefoxAnswer
()
Function that modifies the SessionDescription string to set with the correct MediaStream ID and MediaStreamTrack IDs that is not provided from Firefox connection to Chromium connection.
Events Sequence:
There is no event sequence for this method._addSDPStereo
()
Function that modifies the SessionDescription string to enable OPUS stereo.
Events Sequence:
There is no event sequence for this method._answerHandler
()
Function that handles the "answer" socket message received.
See confluence docs for the "answer" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._approachEventHandler
()
Function that handles the "approach" socket message received.
See confluence docs for the "approach" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._assembleDataURL
()
Function that assembles the data string chunks into a large string.
Events Sequence:
There is no event sequence for this method._base64ToBlob
()
Function that converts Base64 string into Blob object. This is referenced from devnull69@stackoverflow.com #6850276.
Events Sequence:
There is no event sequence for this method._blobToBase64
()
Function that converts a Blob object into Base64 string.
Events Sequence:
There is no event sequence for this method._byeHandler
()
Function that handles the "bye" socket message received.
See confluence docs for the "bye" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._CANCELProtocolHandler
()
Function that handles the "CANCEL" data transfer protocol.
Events Sequence:
There is no event sequence for this method._candidateHandler
()
Function that handles the "candidate" socket message received.
See confluence docs for the "candidate" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._chunkBlobData
()
Function that chunks Blob object based on the data chunk size provided.
If provided Blob object size is lesser than or equals to the chunk size, it should return an array
of length of 1
.
Events Sequence:
There is no event sequence for this method._chunkDataURL
()
Function that chunks large string into string chunks based on the data chunk size provided.
If provided string length is lesser than or equals to the chunk size, it should return an array
of length of 1
.
Events Sequence:
There is no event sequence for this method._clearAllStoredLogsFn
()
Function that clears the stored logs.
Events Sequence:
There is no event sequence for this method._clearDataChannelTimeout
()
Function that stops and clears the data transfer "wait-for-response" timeout.
Events Sequence:
There is no event sequence for this method._closeChannel
()
Function that stops the socket connection to the Signaling.
Events Sequence:
There is no event sequence for this method._closeDataChannel
()
Function that stops the Datachannel connection and removes object references.
Events Sequence:
There is no event sequence for this method._condition
()
Function that checks if the current state condition is met before subscribing event handler to wait for condition to be fulfilled.
Events Sequence:
There is no event sequence for this method._createDataChannel
()
Function that starts a Datachannel connection with Peer.
Events Sequence:
There is no event sequence for this method._createPeerConnection
()
Function that creates the Peer connection.
Events Sequence:
There is no event sequence for this method._createSocket
()
Function that creates and opens a socket connection to the Signaling.
Events Sequence:
There is no event sequence for this method._dataChannelProtocolHandler
()
Function that handles the data received from Datachannel and routes to the relevant data transfer protocol handler.
Events Sequence:
There is no event sequence for this method._DATAProtocolHandler
()
Function that handles the data transfer chunk received.
Events Sequence:
There is no event sequence for this method._doAnswer
()
Function that creates the Peer connection answer session description. This comes after receiving and setting the offer session description.
Events Sequence:
There is no event sequence for this method._doOffer
()
Function that creates the Peer connection offer session description.
Events Sequence:
There is no event sequence for this method._enterHandler
()
Function that handles the "enter" socket message received.
See confluence docs for the "enter" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._ERRORProtocolHandler
()
Function that handles the "ERROR" data transfer protocol.
Events Sequence:
There is no event sequence for this method._getStoredLogsFn
()
Function that gets the stored logs.
Events Sequence:
There is no event sequence for this method._initSelectedRoom
()
Starts initialising for Room credentials for room name provided in joinRoom()
method.
Events Sequence:
There is no event sequence for this method._inRoomHandler
()
Function that handles the "inRoom" socket message received.
See confluence docs for the "inRoom" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._introduceErrorEventHandler
()
Function that handles the "introduceError" socket message received.
See confluence docs for the "introduceError" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._loadInfo
()
Loads and checks the dependencies if they are loaded correctly.
Events Sequence:
There is no event sequence for this method._logFn
()
Function that handles the logs received and prints in the Web Console interface according to the log level set.
Events Sequence:
There is no event sequence for this method._MESSAGEProtocolHandler
()
Function that handles the "MESSAGE" data transfer protocol.
Events Sequence:
There is no event sequence for this method._muteAudioEventHandler
()
Function that handles the "muteAudioEvent" socket message received.
See confluence docs for the "muteAudioEvent" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._muteLocalMediaStreams
()
Function that handles the muting of Stream audio and video tracks.
Events Sequence:
There is no event sequence for this method._muteVideoEventHandler
()
Function that handles the "muteVideoEvent" socket message received.
See confluence docs for the "muteVideoEvent" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._offerHandler
()
Function that handles the "offer" socket message received.
See confluence docs for the "offer" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._onAddIceCandidateFailure
()
Function that handles when the Peer connection received ICE candidate has failed adding or processing. Separated in a function to prevent jshint errors.
Events Sequence:
There is no event sequence for this method._onAddIceCandidateSuccess
()
Function that handles when the Peer connection received ICE candidate has been added or processed successfully. Separated in a function to prevent jshint errors.
Events Sequence:
There is no event sequence for this method._onIceCandidate
()
Function that handles the Peer connection gathered ICE candidate to be sent.
Events Sequence:
There is no event sequence for this method._onRemoteStreamAdded
()
Function that handles the RTCPeerConnection.onaddstream
remote MediaStream received.
Events Sequence:
There is no event sequence for this method._onUserMediaError
()
Function that handles the native navigator.getUserMedia()
API failure callback result.
Events Sequence:
There is no event sequence for this method._onUserMediaSuccess
()
Function that handles the native navigator.getUserMedia()
API success callback result.
Events Sequence:
There is no event sequence for this method._openChannel
()
Function that starts the socket connection to the Signaling. This starts creating the socket connection and called at first not when requiring to fallback.
Events Sequence:
There is no event sequence for this method._parseAudioStreamSettings
()
Function that parses the getUserMedia()
audio settings provided.
This parses correctly for the native navigator.getUserMedia()
API audio constraints and
sets any missing values to default.
Events Sequence:
There is no event sequence for this method._parseBandwidthSettings
()
Function that parses the joinRoom()
bandwidth settings provided.
This parses and sets any missing values to default.
Events Sequence:
There is no event sequence for this method._parseDefaultMediaStreamSettings
()
Function that parses the getUserMedia()
default settings received from the API result.
Events Sequence:
There is no event sequence for this method._parseInfo
()
Parses the Room credentials information retrieved from API server.
Events Sequence:
There is no event sequence for this method._parseMediaStreamSettings
()
Function that parses the getUserMedia()
settings provided.
Events Sequence:
There is no event sequence for this method._parseMutedSettings
()
Function that parses the getUserMedia()
audio/video mute settings provided.
This parses and sets any missing values to default.
Events Sequence:
There is no event sequence for this method._parseUserData
()
Function that parses the User custom data provided.
Events Sequence:
There is no event sequence for this method._parseVideoStreamSettings
()
Function that parses the getUserMedia()
video settings provided.
This parses correctly for the native navigator.getUserMedia()
API video constraints and
sets any missing values to default.
Events Sequence:
There is no event sequence for this method._peerListEventHandler
()
Function that handles the "peerList" socket message received.
See confluence docs for the "peerList" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._printAllStoredLogsFn
()
Function that prints in the Web Console interface the stored logs.
Events Sequence:
There is no event sequence for this method._privateMessageHandler
()
Function that handles the "private" socket message received.
See confluence docs for the "private" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._processingSingleMessage
()
Function that handles and processes the socket message received.
Events Sequence:
There is no event sequence for this method._processSigMessage
()
Function that process and parses the socket message string received from the Signaling.
Events Sequence:
There is no event sequence for this method._publicMessageHandler
()
Function that handles the "public" socket message received.
See confluence docs for the "public" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._redirectHandler
()
Function that handles the "redirect" socket message received.
See confluence docs for the "redirect" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._removePeer
()
Function that ends the Peer connection session.
Events Sequence:
There is no event sequence for this method._removeSDPFirefoxH264Pref
()
Function that modifies the SessionDescription string to remove the experimental H264 Firefox flag that is breaking connections. To evaluate removal of this change once we roll out H264 codec interop.
Events Sequence:
There is no event sequence for this method._requestServerInfo
()
Starts retrieving Room credentials information from API server.
Events Sequence:
There is no event sequence for this method._restartHandler
()
Function that handles the "restart" socket message received.
See confluence docs for the "restart" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._restartMCUConnection
()
Function that handles the _restartPeerConnection
scenario
for MCU enabled Peer connections.
This is implemented currently by making the user leave and join the Room again.
The Peer ID will not stay the same though.
Events Sequence:
There is no event sequence for this method._restartPeerConnection
()
Function that re-negotiates a Peer connection. We currently do not implement the ICE restart functionality. Remember to remove previous method of reconnection (re-creating the Peer connection - destroy and create connection).
Events Sequence:
There is no event sequence for this method._roomLockEventHandler
()
Function that handles the "roomLockEvent" socket message received.
See confluence docs for the "roomLockEvent" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._sendBlobDataToPeer
()
Function that starts a data transfer to Peer. This will open a new data type of Datachannel connection with Peer if simultaneous data transfers is supported by Peer.
Events Sequence:
There is no event sequence for this method._sendChannelMessage
()
Function that sends a socket message over the socket connection to the Signaling.
Events Sequence:
There is no event sequence for this method._sendDataChannelMessage
()
Function that sends data over the Datachannel connection.
Events Sequence:
There is no event sequence for this method._setDataChannelTimeout
()
Function that sets the data transfer "wait-for-response" timeout. When there is not response after timeout, the data transfer will be terminated.
Events Sequence:
There is no event sequence for this method._setIceServers
()
Function that filters and configures the ICE servers received from Signaling
based on the init()
configuration and returns the updated
list of ICE servers to be used when constructing Peer connection.
Events Sequence:
There is no event sequence for this method._setLocalAndSendMessage
()
Function that sets the local session description and sends to Peer. If trickle ICE is disabled, the local session description will be sent after ICE gathering has been completed.
Events Sequence:
There is no event sequence for this method._setSDPAudioCodec
()
Function that modifies the SessionDescription string to set the preferred sending audio codec.
Events Sequence:
There is no event sequence for this method._setSDPBitrate
()
Function that modifies the SessionDescription string to set the sending bandwidth. Setting this may not necessarily work in Firefox.
Events Sequence:
There is no event sequence for this method._setSDPVideoCodec
()
Function that modifies the SessionDescription string to set the preferred sending video codec.
Events Sequence:
There is no event sequence for this method._setSDPVideoResolution
()
Function that modifies the SessionDescription string to set the video resolution. This is not even supported in the specs, and we should re-evalute it to be removed.
Events Sequence:
There is no event sequence for this method._startDataTransfer
()
Function that start the data transfer with the list of targeted Peer IDs provided. At this stage, it will open a new Datachannel connection if simultaneous data transfers is supported by Peer, or it will using the messaging type Datachannel connection. Note that 1 data transfer can occur at a time in 1 Datachannel connection.
Events Sequence:
There is no event sequence for this method._startPeerConnectionHealthCheck
()
Function that starts the Peer connection health timer. To count as a "healthy" successful established Peer connection, the ICE connection state has to be "connected" or "completed", messaging Datachannel type state has to be "opened" (if Datachannel is enabled) and Signaling state has to be "stable". Should consider dropping of counting messaging Datachannel type being opened as it should not involve the actual Peer connection for media (audio/video) streaming.
Events Sequence:
There is no event sequence for this method._stopLocalMediaStreams
()
Function that handles stopping the Stream streaming.
Events Sequence:
There is no event sequence for this method._stopPeerConnectionHealthCheck
()
Function that stops the Peer connection health timer. This happens when Peer connection has been successfully established or when Peer leaves the Room.
Events Sequence:
There is no event sequence for this method._streamEventHandler
()
Function that handles the "stream" socket message received.
See confluence docs for the "stream" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._throttle
()
Function that throttles a method function to prevent multiple invokes over a specified amount of time.
Returns a function to be invoked ._throttle(fn, 1000)()
to make throttling functionality work.
Events Sequence:
There is no event sequence for this method._trigger
()
Function that triggers an event.
The rest of the parameters after the eventName
parameter is considered as the event parameter payloads.
Events Sequence:
There is no event sequence for this method._updateUserEventHandler
()
Function that handles the "updateUserEvent" socket message received.
See confluence docs for the "updateUserEvent" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._wait
()
Function that starts an interval check to wait for a condition to be resolved.
Events Sequence:
There is no event sequence for this method._waitForLocalMediaStream
()
Function that waits for Stream to be retrieved before firing callback.
Events Sequence:
There is no event sequence for this method._waitForOpenChannel
()
Function that waits for Socket connection to Signaling to be opened.
Events Sequence:
There is no event sequence for this method._welcomeHandler
()
Function that handles the "welcome" socket message received.
See confluence docs for the "welcome" expected properties to be received
based on the current SM_PROTOCOL_VERSION
.
Events Sequence:
There is no event sequence for this method._WRQProtocolHandler
()
Function that handles the "WRQ" data transfer protocol.
Events Sequence:
There is no event sequence for this method.acceptDataTransfer
peerId
,
transferId
,
[accept=false]
,
)
Function that accepts or rejects an upload data transfer request from Peer to User.
Example:
// Example 1: Accept Peer upload data transfer request skylinkDemo.on("incomingDataRequest", function (transferId, peerId, transferInfo, isSelf) { if (!isSelf) { skylinkDemo.acceptDataTransfer(peerId, transferId, true); } });
// Example 2: Reject Peer upload data transfer request skylinkDemo.on("incomingDataRequest", function (transferId, peerId, transferInfo, isSelf) { if (!isSelf) { skylinkDemo.acceptDataTransfer(peerId, transferId, false); } });
Events Sequence:
- When User accepts the uploading data transfer request from Peer,
dataTransferState
event triggers parameter payloadstate
asDOWNLOAD_STARTED
. - When User rejects the uploading data transfer request from Peer,
dataTransferState
event triggers parameter payloadstate
asREJECTED
Parameters:
-
peerId
{String}The Peer ID.
-
transferId
{String}The data transfer ID.
-
accept
{Boolean} OptionalDEFAULT:false
The flag if User accepts the upload data transfer request from Peer.
cancelBlobTransfer
()
Deprecation Warning! This method has been deprecated, please use
method_cancelDataTransfer()
method instead.
Function that terminates a currently uploading / downloading data transfer from / to Peer.
Parameter signature follows
cancelDataTransfer()
method.
Example:
// Example 1: Cancel Peer data transfer var transferSessions = {};
skylinkDemo.on("dataTransferState", function (state, transferId, peerId) { if ([skylinkDemo.DATA_TRANSFER_STATE.DOWNLOAD_STARTED, skylinkDemo.DATA_TRANSFER_STATE.UPLOAD_STARTED].indexOf(state) > -1) { if (!Array.isArray(transferSessions[transferId])) { transferSessions[transferId] = []; } transferSessions[transferId].push(peerId); } else { transferSessions[transferId].splice(transferSessions[transferId].indexOf(peerId), 1); } });
function cancelTransfer (peerId, transferId) { skylinkDemo.cancelBlobTransfer(peerId, transferId); }
Events Sequence:
Event sequence followscancelDataTransfer()
method.
cancelDataTransfer
peerId
,
transferId
,
)
Function that terminates a currently uploading / downloading data transfer from / to Peer.
Example:
// Example 1: Cancel Peer data transfer var transferSessions = {};
skylinkDemo.on("dataTransferState", function (state, transferId, peerId) { if ([skylinkDemo.DATA_TRANSFER_STATE.DOWNLOAD_STARTED, skylinkDemo.DATA_TRANSFER_STATE.UPLOAD_STARTED].indexOf(state) > -1) { if (!Array.isArray(transferSessions[transferId])) { transferSessions[transferId] = []; } transferSessions[transferId].push(peerId); } else { transferSessions[transferId].splice(transferSessions[transferId].indexOf(peerId), 1); } });
function cancelTransfer (peerId, transferId) { skylinkDemo.cancelDataTransfer(peerId, transferId); }
Events Sequence:
dataTransferState
event triggers parameter payloadstate
asCANCEL
.
Parameters:
-
peerId
{String}The Peer ID.
-
transferId
{String}The data transfer ID.
disableAudio
()
Deprecation Warning!
This method has been deprecated. Use muteStream()
method instead.
Function that mutes both getUserMedia()
Stream and
shareScreen()
Stream audio tracks.
Example:
function muteAudio () { skylinkDemo.disableAudio(); }
Events Sequence:
- Invokes
muteStream()
method withoptions.audioMuted
value astrue
.
enableAudio
()
Deprecation Warning!
This method has been deprecated. Use muteStream()
method instead.
Function that unmutes both getUserMedia()
Stream and
shareScreen()
Stream audio tracks.
Example:
function unmuteAudio () { skylinkDemo.enableAudio(); }
Events Sequence:
- Invokes
muteStream()
method withoptions.audioMuted
value asfalse
.
enableVideo
()
Deprecation Warning!
This method has been deprecated. Use muteStream()
method instead.
Function that unmutes both getUserMedia()
Stream and
shareScreen()
Stream video tracks.
Example:
function unmuteVideo () { skylinkDemo.enableVideo(); }
Events Sequence:
- Invokes
muteStream()
method withoptions.videoMuted
value asfalse
.
generateUUID
()
Function that generates an UUID (Unique ID).
Events Sequence:
There is no event sequence for this method.Returns:
Returns a generated UUID (Unique ID).
getConnectionStatus
[targetPeerId]
,
[callback]
,
)
Function that retrieves Peer connection bandwidth and ICE connection stats.
Example:
// Example 1: Retrieve a Peer connection stats function startBWStatsInterval (peerId) { setInterval(function () { skylinkDemo.getConnectionStatus(peerId, function (error, success) { if (error) return; var sendVideoBytes = success.connectionStats[peerId].video.sending.bytes; var sendAudioBytes = success.connectionStats[peerId].audio.sending.bytes; var recvVideoBytes = success.connectionStats[peerId].video.receiving.bytes; var recvAudioBytes = success.connectionStats[peerId].audio.receiving.bytes; var localCandidate = success.connectionStats[peerId].selectedCandidate.local; var remoteCandidate = success.connectionStats[peerId].selectedCandidate.remote; console.log("Sending audio (" + sendAudioBytes + "bps) video (" + sendVideoBytes + ")"); console.log("Receiving audio (" + recvAudioBytes + "bps) video (" + recvVideoBytes + ")"); console.log("Local candidate: " + localCandidate.ipAddress + ":" + localCandidate.portNumber + "?transport=" + localCandidate.transport + " (type: " + localCandidate.candidateType + ")"); console.log("Remote candidate: " + remoteCandidate.ipAddress + ":" + remoteCandidate.portNumber + "?transport=" + remoteCandidate.transport + " (type: " + remoteCandidate.candidateType + ")"); }); }, 1000); }
// Example 2: Retrieve a list of Peer connection stats function printConnStats (peerId, data) { if (!data.connectionStats[peerId]) return; var sendVideoBytes = data.connectionStats[peerId].video.sending.bytes; var sendAudioBytes = data.connectionStats[peerId].audio.sending.bytes; var recvVideoBytes = data.connectionStats[peerId].video.receiving.bytes; var recvAudioBytes = data.connectionStats[peerId].audio.receiving.bytes; var localCandidate = data.connectionStats[peerId].selectedCandidate.local; var remoteCandidate = data.connectionStats[peerId].selectedCandidate.remote; console.log(peerId + " - Sending audio (" + sendAudioBytes + "bps) video (" + sendVideoBytes + ")"); console.log(peerId + " - Receiving audio (" + recvAudioBytes + "bps) video (" + recvVideoBytes + ")"); console.log(peerId + " - Local candidate: " + localCandidate.ipAddress + ":" + localCandidate.portNumber + "?transport=" + localCandidate.transport + " (type: " + localCandidate.candidateType + ")"); console.log(peerId + " - Remote candidate: " + remoteCandidate.ipAddress + ":" + remoteCandidate.portNumber + "?transport=" + remoteCandidate.transport + " (type: " + remoteCandidate.candidateType + ")"); }
function startBWStatsInterval (peerIdA, peerIdB) { setInterval(function () { skylinkDemo.getConnectionStatus([peerIdA, peerIdB], function (error, success) { if (error) { printConnStats(peerIdA, error.connectionStats); printConnStats(peerIdB, error.connectionStats); } else { printConnStats(peerIdA, success.connectionStats); printConnStats(peerIdB, success.connectionStats); } }); }, 1000); }
// Example 3: Retrieve all Peer connection stats function printConnStats (listOfPeers, data) { listOfPeers.forEach(function (peerId) { if (!data.connectionStats[peerId]) return; var sendVideoBytes = data.connectionStats[peerId].video.sending.bytes; var sendAudioBytes = data.connectionStats[peerId].audio.sending.bytes; var recvVideoBytes = data.connectionStats[peerId].video.receiving.bytes; var recvAudioBytes = data.connectionStats[peerId].audio.receiving.bytes; var localCandidate = data.connectionStats[peerId].selectedCandidate.local; var remoteCandidate = data.connectionStats[peerId].selectedCandidate.remote; console.log(peerId + " - Sending audio (" + sendAudioBytes + "bps) video (" + sendVideoBytes + ")"); console.log(peerId + " - Receiving audio (" + recvAudioBytes + "bps) video (" + recvVideoBytes + ")"); console.log(peerId + " - Local candidate: " + localCandidate.ipAddress + ":" + localCandidate.portNumber + "?transport=" + localCandidate.transport + " (type: " + localCandidate.candidateType + ")"); console.log(peerId + " - Remote candidate: " + remoteCandidate.ipAddress + ":" + remoteCandidate.portNumber + "?transport=" + remoteCandidate.transport + " (type: " + remoteCandidate.candidateType + ")"); }); }
function startBWStatsInterval (peerIdA, peerIdB) { setInterval(function () { skylinkDemo.getConnectionStatus(function (error, success) { if (error) { printConnStats(error.listOfPeers, error.connectionStats); } else { printConnStats(success.listOfPeers, success.connectionStats); } }); }, 1000); }
Events Sequence:
getConnectionStatusStateChange
event triggers parameter payloadstate
value asRETRIEVING
.- When retrieval of Peer connection stats is successful,
getConnectionStatusStateChange
event triggers parameter payloadstate
value asRETRIEVE_SUCCESS
. - When retrieval of Peer connection stats had failed,
getConnectionStatusStateChange
event triggers parameter payloadstate
value asRETRIEVE_ERROR
.
- When retrieval of Peer connection stats is successful,
Parameters:
-
targetPeerId
{String | Array} OptionalThe target Peer ID to retrieve connection stats from.
- When provided as an Array, it will retrieve all connection stats from all the Peer IDs provided.
- When not provided, it will retrieve all connection stats from the currently connected Peers in the Room.
-
callback
{Function} OptionalThe callback function fired when request has completed. Function parameters signature is
function (error, success)
Function request completion is determined by thegetConnectionStatusStateChange
event triggeringstate
parameter payload value asRETRIEVE_SUCCESS
for all Peers targeted for request success. [Rel: Skylink.GET_CONNECTION_STATUS_STATE]-
error
{JSON}The error result in request. Defined as
null
when there are no errors in request-
listOfPeers
{Array}The list of Peer IDs targeted. -
retrievalErrors
{JSON}The list of Peer connection stats retrieval errors. -
retrievalErrors.#peerId
{Error | String}The Peer connection stats retrieval error associated with the Peer ID defined in#peerId
property. If#peerId
value is"self"
, it means that it is the error when there are no Peer connections to refresh with. -
connectionStats
{JSON}The list of Peer connection stats. These are the Peer connection stats that has been managed to be successfully retrieved. -
connectionStats.#peerId
{JSON}The Peer connection stats associated with the Peer ID defined in#peerId
property. Object signature matches thestats
parameter payload received in thegetConnectionStatusStateChange
event.
-
-
success
{JSON}The success result in request. Defined as
null
when there are errors in request-
listOfPeers
{Array}The list of Peer IDs targeted. -
connectionStats
{JSON}The list of Peer connection stats. -
connectionStats.#peerId
{JSON}The Peer connection stats associated with the Peer ID defined in#peerId
property. Object signature matches thestats
parameter payload received in thegetConnectionStatusStateChange
event.
-
-
getPeerInfo
[peerId]
,
)
Function that returns the User / Peer current session information.
Example:
// Example 1: Get Peer current session information var peerPeerInfo = skylinkDemo.getPeerInfo(peerId);
// Example 2: Get User current session information var userPeerInfo = skylinkDemo.getPeerInfo();
Events Sequence:
There is no event sequence for this method.Parameters:
-
peerId
{String} OptionalThe Peer ID to return the current session information from.
- When not provided or that the Peer ID is does not exists, it will return the User current session information.
Returns:
The User / Peer current session information.
Object signature matches the peerInfo
parameter payload received in the
peerJoined
event.
getPeers
[showAll=false]
,
[callback]
,
)
Note that this feature requiresFunction that retrieves the list of Peer IDs from Rooms within the same App space."isPrivileged"
flag to be enabled for the App Key provided in theinit()
method, as only Users connecting using the App Key with this flag enabled (which we call privileged Users / Peers) can retrieve the list of Peer IDs from Rooms within the same App space. Read more about privileged App Key feature here.
Example:
// Example 1: Retrieving the un-privileged Peers skylinkDemo.joinRoom(function (jRError, jRSuccess) { if (jRError) return; skylinkDemo.getPeers(function (error, success) { if (error) return; console.log("The list of only un-privileged Peers in the same App space ->", success); }); });
// Example 2: Retrieving the all Peers (privileged or un-privileged) skylinkDemo.joinRoom(function (jRError, jRSuccess) { if (jRError) return; skylinkDemo.getPeers(true, function (error, success) { if (error) return; console.log("The list of all Peers in the same App space ->", success); }); });
Events Sequence:
getPeersStateChange
event triggers parameter payloadstate
value asENQUIRED
.- When retrieval of the list of Peer IDs from Rooms within the same App space is successful,
getPeersStateChange
event triggers parameter payloadstate
value asRECEIVED
.
- When retrieval of the list of Peer IDs from Rooms within the same App space is successful,
Parameters:
-
showAll
{Boolean} OptionalDEFAULT:false
The flag if Signaling server should also return the list of privileged Peer IDs. By default, the Signaling server does not include the list of privileged Peer IDs in the return result.
-
callback
{Function} OptionalThe callback function fired when request has completed. Function parameters signature is
function (error, success)
Function request completion is determined by thegetPeersStateChange
event triggeringstate
parameter payload value asRECEIVED
for request success. [Rel: Skylink.GET_PEERS_STATE]-
error
{Error | String}The error result in request. Defined as
null
when there are no errors in request Object signature is thegetPeers()
error when retrieving list of Peer IDs from Rooms within the same App space. -
success
{JSON}The success result in request. Defined as
null
when there are errors in request Object signature matches thepeerList
parameter payload received in thegetPeersStateChange
event.
-
getUserData
[peerId]
,
)
Function that returns the User / Peer current custom data.
Example:
// Example 1: Get Peer current custom data var peerUserData = skylinkDemo.getUserData(peerId);
// Example 2: Get User current custom data var userUserData = skylinkDemo.getUserData();
Events Sequence:
There is no event sequence for this method.Parameters:
-
peerId
{String} OptionalThe Peer ID to return the current custom data from.
- When not provided or that the Peer ID is does not exists, it will return the User current custom data.
Returns:
The User / Peer current custom data.
getUserMedia
[options]
,
[callback]
,
)
Function that retrieves camera Stream.
Example:
// Example 1: Get both audio and video. skylinkDemo.getUserMedia(function (error, success) { if (error) return; attachMediaStream(document.getElementById("my-video"), success); });
// Example 2: Get only audio. skylinkDemo.getUserMedia({ audio: true }, function (error, success) { if (error) return; attachMediaStream(document.getElementById("my-audio"), success); });
// Example 3: Configure resolution for video skylinkDemo.getUserMedia({ audio: true, video: { resolution: skylinkDemo.VIDEO_RESOLUTION.HD } }, function (error, success) { if (error) return; attachMediaStream(document.getElementById("my-video"), success); });
// Example 4: Configure stereo flag for OPUS codec audio (OPUS is always used by default) skylinkDemo.init({ appKey: "xxxxxx", audioCodec: skylinkDemo.AUDIO_CODEC.OPUS }, function (initErr, initSuccess) { skylinkDemo.getUserMedia({ audio: { stereo: true }, video: true }, function (error, success) { if (error) return; attachMediaStream(document.getElementById("my-video"), success); }); });
// Example 5: Configure frameRate for video skylinkDemo.getUserMedia({ audio: true, video: { frameRate: 50 } }, function (error, success) { if (error) return; attachMediaStream(document.getElementById("my-video"), success); });
// Example 6: Configure video and audio based on selected sources. Does not work for Firefox currently. var sources = { audio: [], video: [] };
function selectStream (audioSourceId, videoSourceId) { skylinkDemo.getUserMedia({ audio: { optional: [{ sourceId: audioSourceId }] }, video: { optional: [{ sourceId: videoSourceId }] } }, function (error, success) { if (error) return; attachMediaStream(document.getElementById("my-video"), success); }); }
navigator.mediaDevices.enumerateDevices().then(function(devices) { var selectedAudioSourceId = ""; var selectedVideoSourceId = ""; devices.forEach(function(device) { console.log(device.kind + ": " + device.label + " source ID = " + device.deviceId); if (device.kind === "audio") { selectedAudioSourceId = device.deviceId; } else { selectedVideoSourceId = device.deviceId; } }); selectStream(selectedAudioSourceId, selectedVideoSourceId); }).catch(function (error) { console.error("Failed", error); });
Events Sequence:
- When retrieval of camera Stream is successful,
mediaAccessSuccess
event triggers parameter payloadisScreensharing
value asfalse
.- When there are missing required audio or video tracks,
mediaAccessFallback
event triggers parameter payloadstate
asFALLBACKED
,isScreensharing
value asfalse
,isAudioFallback
asfalse
anderror
is defined.
- When there are missing required audio or video tracks,
- When retrieval of camera Stream has failed
- If
audioFallback
is enabled in theinit()
method configuration, andoptions.video
andoptions.audio
is requestedmediaAccessFallback
event is triggers parameter payloadstate
value asFALLBACKING
,isScreensharing
value asfalse
,isAudioFallback
astrue
anderror
is defined.- Invokes
getUserMedia()
withoptions.audio
value astrue
andoptions.video
value asfalse
.- When retrieval of camera Stream (fallbacked audio only) is successful
mediaAccessFallback
event triggers parameter payloadstate
asFALLBACKED
,isScreensharing
value asfalse
andisAudioFallback
astrue
.mediaAccessSuccess
event triggers parameter payloadisScreensharing
value asfalse
- When retrieval of camera Stream (fallbacked audio only) has failed
mediaAccessFallback
event triggers parameter payloadstate
asERROR
,isScreensharing
value asfalse
andisAudioFallback
astrue
.mediaAccessError
event triggers parameter payloadisScreensharing
value asfalse
andisAudioFallbackError
astrue
.
- When retrieval of camera Stream (fallbacked audio only) is successful
- Else,
mediaAccessError
event triggers parameter payloadisScreensharing
value asfalse
andisAudioFallbackError
asfalse
- If
Parameters:
-
options
{JSON} OptionalThe camera Stream configuration options.
- When not provided, the value is set to
{ audio: true, video: true }
. To fallback to retrieve audio track only when retrieving of audio and video tracks failed, enable theaudioFallback
flag in theinit()
method.
-
audio
{Boolean | JSON} OptionalDEFAULT:false
The audio configuration options.
-
stereo
{Boolean} OptionalDEFAULT:false
The flag if stereo band should be configured when encoding audio codec isOPUS
for sending audio data. -
mute
{Boolean} OptionalDEFAULT:false
The flag if audio tracks should be muted upon receiving them. -
optional
{Array} OptionalThenavigator.getUserMedia()
APIaudio: { optional [..] }
property.
-
-
video
{Boolean | JSON} OptionalDEFAULT:false
The video configuration options.
-
mute
{Boolean} OptionalDEFAULT:false
The flag if video tracks should be muted upon receiving them. -
resolution
{JSON} OptionalNote that currently
The video resolution. By default,getUserMedia()
method only configures the maximum resolution of the camera Stream due to browser interopability and support.VGA
resolution option is selected when not provided. [Rel: Skylink.VIDEO_RESOLUTION] -
resolution.width
{Number} OptionalThe video resolution width. -
resolution.height
{Number} OptionalThe video resolution height. -
frameRate
{Number} OptionalDEFAULT:50
Note that currently
The video frameRate per second (fps).getUserMedia()
method only configures the maximum frameRate of the camera Stream due to browser interopability and support. For Safari and IE browsers (plugin-enabled), the maximum frameRate is not configured due to the lack of support. -
optional
{Array} OptionalThenavigator.getUserMedia()
APIvideo: { optional [..] }
property.
-
- When not provided, the value is set to
-
callback
{Function} OptionalThe callback function fired when request has completed. Function parameters signature is
function (error, success)
Function request completion is determined by themediaAccessSuccess
event triggeringisScreensharing
parameter payload value asfalse
for request success.-
error
{Error | String}The error result in request. Defined as
null
when there are no errors in request Object signature is thegetUserMedia()
error when retrieving camera Stream. -
success
{MediaStream}The success result in request. Defined as
null
when there are errors in request Object signature is the camera Stream object.
-
init
options
,
[callback]
,
)
Function that authenticates and initialises App Key used for Room connections.
Example:
// Example 1: Using CORS authentication and connection to default Room skylinkDemo(appKey, function (error, success) { if (error) return; skylinkDemo.joinRoom(); // Goes to default Room });
// Example 2: Using CORS authentication and connection to a different Room skylinkDemo(appKey, function (error, success) { skylinkDemo.joinRoom("testxx"); // Goes to "testxx" Room });
// Example 3: Using credentials authentication and connection to only default Room var defaultRoom = "test", startDateTime = (new Date()).toISOString(), duration = 1, // Allows only User session to stay for 1 hour appKeySecret = "xxxxxxx", hash = CryptoJS.HmacSHA1(defaultRoom + "" + duration + "" + startDateTime, appKeySecret); credentials = encodeURIComponent(hash.toString(CryptoJS.enc.Base64));
skylinkDemo({ defaultRoom: defaultRoom, appKey: appKey, credentials: { duration: duration, startDateTime: startDateTime, credentials: credentials } }, function (error, success) { if (error) return; skylinkDemo.joinRoom(); // Goes to default Room (switching to different Room is not allowed for credentials authentication) });
Events Sequence:
readyStateChange
event triggers parameter payloadstate
value asLOADING
.- When authentication is successful,
readyStateChange
event triggers parameter payloadstate
value asCOMPLETED
. Room session token will be retrieved and will be required byjoinRoom()
method to start Room connection. - When authentication fails,
readyStateChange
event triggers parameter payloadstate
value asERROR
.
- When authentication is successful,
Parameters:
-
options
{JSON | String}The configuration options.
- When provided as a string, it's configured as
options.appKey
.
-
appKey
{String}The App Key. By default,
init()
uses HTTP CORS authentication. For credentials based authentication, see theoptions.credentials
configuration below. You can know more about the in the authentication methods article here for more details on the various authentication methods. If you are using the Persistent Room feature for scheduled meetings, you will require to use the credential based authentication. See the Persistent Room article here for more information. -
defaultRoom
{String} OptionalThe default Room to connect to when no
room
parameter is provided injoinRoom()
method.- When not provided, its value is
options.appKey
. Note that switching Rooms is not available when usingoptions.credentials
based authentication. The Room that User will be connected to is thedefaultRoom
provided.
- When not provided, its value is
-
roomServer
{String} OptionalThe Auth server. Note that this is a debugging feature and is only used when instructed for debugging purposes.
-
region
{String} OptionalDeprecation Warning! This option has been deprecated.
The Auth server in the various regions to connect to for better connectivity. [Rel: Skylink.REGIONAL_SERVER]
Automatic nearest regional server has been implemented on the platform. -
enableIceTrickle
{Boolean} OptionalDEFAULT:true
The flag if Peer connections should trickle ICE for faster connectivity.
-
enableDataChannel
{Boolean} OptionalDEFAULT:true
The flag if Datachannel connections should be enabled. This is required to be enabled for
sendBlobData()
method,sendURLData()
method andsendP2PMessage()
method. -
enableTURNServer
{Boolean} OptionalDEFAULT:true
The flag if TURN ICE servers should be used when constructing Peer connections to allow TURN connections when required and enabled for the App Key.
-
enableSTUNServer
{Boolean} OptionalDEFAULT:true
The flag if STUN ICE servers should be used when constructing Peer connections to allow TURN connections when required.
-
forceTURN
{Boolean} OptionalDEFAULT:false
The flag if Peer connections should enforce connections over the TURN server. This sets
options.enableTURNServer
value totrue
andoptions.enableSTUNServer
value tofalse
. During Peer connections, it filters out non"relay"
ICE candidates to ensure that TURN connections is enforced. -
usePublicSTUN
{Boolean} OptionalDEFAULT:true
The flag if publicly available STUN ICE servers should be used if
options.enableSTUNServer
is enabled. -
TURNServerTransport
{Boolean} OptionalNote that configuring the protocol may not necessarily result in the desired network transports protocol used in the actual TURN network traffic as it depends which protocol the browser selects and connects with. This simply configures the TURN ICE server urls
The option to configure thequery option when constructing the Peer connection. When all protocols are selected, the ICE servers urls are duplicated with all protocols.
?transport=
query parameter in TURN ICE servers when constructing a Peer connections.- When not provided, its value is
ANY
. [Rel: Skylink.TURN_TRANSPORT]
- When not provided, its value is
-
credentials
{JSON} OptionalThe credentials used for authenticating App Key with credentials to retrieve the Room session token used for connection in
joinRoom()
method. Note that switching of Rooms is not allowed when using credentials based authentication, unlessinit()
is invoked again with a different set of credentials followed by invoking thejoinRoom()
method.-
startDateTime
{String}The credentials User session in Room starting DateTime in ISO 8601 format. -
duration
{Number}The credentials User session in Room duration in hours. -
credentials
{String}The generated credentials used to authenticate the provided App Key with its"secret"
property.To generate the credentials:
- Concatenate a string that consists of the Room name you provide in the
options.defaultRoom
, theoptions.credentials.duration
and theoptions.credentials.startDateTime
. Example:var concatStr = defaultRoom + "_" + duration + "_" + startDateTime;
- Hash the concatenated string with the App Key
"secret"
property using SHA-1. Example:var hash = CryptoJS.HmacSHA1(concatStr, appKeySecret);
See theCryptoJS.HmacSHA1
library. - Encode the hashed string using base64
Example:
var b64Str = hash.toString(CryptoJS.enc.Base64);
See the CryptoJS.enc.Base64 library. - Encode the base64 encoded string to replace special characters using UTF-8 encoding.
Example:
var credentials = encodeURIComponent(base64String);
See encodeURIComponent() API.
- Concatenate a string that consists of the Room name you provide in the
-
-
audioFallback
{Boolean} OptionalDEFAULT:false
The flag if
getUserMedia()
method should fallback to retrieve only audio Stream when retrieving audio and video Stream fails. -
forceSSL
{Boolean} OptionalDEFAULT:false
The flag if HTTPS connections should be enforced during request to Auth server and socket connections to Signaling server when accessing
window.location.protocol
value is"http:"
. By default,"https:"
protocol connections uses HTTPS connections. -
audioCodec
{String} OptionalNote that if the audio codec is not supported, the SDK will not configure the local
The option to configure the preferred audio codec to use to encode sending audio data when available for Peer connection."offer"
or"answer"
session description to prefer the codec.- When not provided, its value is
AUTO
. [Rel: Skylink.AUDIO_CODEC]
- When not provided, its value is
-
videoCodec
{String} OptionalNote that if the video codec is not supported, the SDK will not configure the local
The option to configure the preferred video codec to use to encode sending video data when available for Peer connection."offer"
or"answer"
session description to prefer the codec.- When not provided, its value is
AUTO
. [Rel: Skylink.VIDEO_CODEC]
- When not provided, its value is
-
socketTimeout
{Number} OptionalDEFAULT:20000
The timeout for each attempts for socket connection with the Signaling server to indicate that connection has timed out and has failed to establish. Note that the mininum timeout value is
5000
. If less, this value will be5000
. -
forceTURNSSL
{Boolean} OptionalDEFAULT:false
Note that currently Firefox does not support the TURNS protocol, and that if TURNS is required, TURN ICE servers using port
The flag if TURNS protocol should be used when443
will be used instead.options.enableTURNServer
is enabled. By default,"https:"
protocol connections uses TURNS protocol.
- When provided as a string, it's configured as
-
callback
{Function} OptionalThe callback function fired when request has completed. Function parameters signature is
function (error, success)
Function request completion is determined by thereadyStateChange
eventstate
parameter payload value asCOMPLETED
for request success. [Rel: Skylink.READY_STATE_CHANGE]-
error
{JSON | String}The error result in request.
- When defined as string, it's the error when required App Key is not provided.
Defined as
null
when there are no errors in request
-
errorCode
{Number}ThereadyStateChange
eventerror.errorCode
parameter payload value. [Rel: Skylink.READY_STATE_CHANGE_ERROR] -
error
{Object}ThereadyStateChange
eventerror.content
parameter payload value. -
status
{Number}ThereadyStateChange
eventerror.status
parameter payload value.
- When defined as string, it's the error when required App Key is not provided.
Defined as
-
success
{JSON}The success result in request. Defined as
null
when there are errors in request-
serverUrl
{String}The constructed REST URL requested to Auth server. -
readyState
{String}The current ready state. [Rel: Skylink.READY_STATE_CHANGE] -
selectedRoom
{String}The Room based on the current Room session token retrieved for. -
appKey
{String}The configured value of theoptions.appKey
. -
defaultRoom
{String}The configured value of theoptions.defaultRoom
. -
roomServer
{String}The configured value of theoptions.roomServer
. -
enableIceTrickle
{Boolean}The configured value of theoptions.enableIceTrickle
. -
enableDataChannel
{Boolean}The configured value of theoptions.enableDataChannel
. -
enableTURNServer
{Boolean}The configured value of theoptions.enableTURNServer
. -
enableSTUNServer
{Boolean}The configured value of theoptions.enableSTUNServer
. -
TURNTransport
{Boolean}The configured value of theoptions.TURNServerTransport
. -
serverRegion
{String}The configured value of theoptions.region
. -
audioFallback
{Boolean}The configured value of theoptions.audioFallback
. -
forceSSL
{Boolean}The configured value of theoptions.forceSSL
. -
audioCodec
{String}The configured value of theoptions.audioCodec
. -
videoCodec
{String}The configured value of theoptions.videoCodec
. -
socketTimeout
{Number}The configured value of theoptions.socketTimeout
. -
forceTURNSSL
{Boolean}The configured value of theoptions.forceTURNSSL
. -
forceTURN
{Boolean}The configured value of theoptions.forceTURN
. -
usePublicSTUN
{Boolean}The configured value of theoptions.usePublicSTUN
.
-
-
introducePeer
sendingPeerId
,
receivingPeerId
,
)
Note that this feature requiresFunction that selects and introduces a pair of Peers to start connection with each other."isPrivileged"
flag to be enabled and"autoIntroduce"
flag to be disabled for the App Key provided in theinit()
method, as only Users connecting using the App Key with this flag enabled (which we call privileged Users / Peers) can retrieve the list of Peer IDs from Rooms within the same App space. Read more about privileged App Key feature here.
Example:
// Example 1: Introduce a pair of Peers skylinkDemo.on("introduceStateChange", function (state, privilegedPeerId, sendingPeerId, receivingPeerId) { if (state === skylinkDemo.INTRODUCE_STATE.INTRODUCING) { console.log("Peer '" + sendingPeerId + "' has been introduced to '" + receivingPeerId + "'"); } });
skylinkDemo.joinRoom(function (jRError, jRSuccess) { if (jRError) return; skylinkDemo.getPeers(function (gPError, gPSuccess) { if (gPError) return; skylinkDemo.introducePeer(gPSuccess.roomName[0], gPSuccess.roomName[1]); }); });
Events Sequence:
- When introduction request for the selected pair of Peers has been made to the Signaling server,
introduceStateChange
event triggers parameter payloadstate
value asINTRODUCING
. - When introduction request made for the selected pair of Peers to the Signaling server has failed,
introduceStateChange
event triggers parameter payloadstate
value asERROR
.
- When introduction request for the selected pair of Peers has been made to the Signaling server,
Parameters:
-
sendingPeerId
{String}The Peer ID to be connected with
receivingPeerId
. -
receivingPeerId
{String}The Peer ID to be connected with
sendingPeerId
.
joinRoom
[room]
,
[options]
,
[callback]
,
)
Function that starts the Room session.
Example:
// Example 1: Connecting to the default Room without Stream skylinkDemo.joinRoom(function (error, success) { if (error) return; console.log("User connected."); });
// Example 2: Connecting to Room "testxx" with Stream skylinkDemo.joinRoom("testxx", { audio: true, video: true }, function (error, success) { if (error) return; console.log("User connected with getUserMedia() Stream.") });
// Example 3: Connecting to default Room with Stream retrieved earlier skylinkDemo.getUserMedia(function (gUMError, gUMSuccess) { if (gUMError) return; skylinkDemo.joinRoom(function (error, success) { if (error) return; console.log("User connected with getUserMedia() Stream."); }); });
// Example 4: Connecting to "testxx" Room with shareScreen() Stream retrieved manually skylinkDemo.on("mediaAccessRequired", function () { skylinkDemo.shareScreen(function (sSError, sSSuccess) { if (sSError) return; }); });
skylinkDemo.joinRoom("testxx", { manualGetUserMedia: true }, function (error, success) { if (error) return; console.log("User connected with shareScreen() Stream."); });
// Example 5: Connecting to "testxx" Room with User custom data var data = { username: "myusername" }; skylinkDemo.joinRoom("testxx", { userData: data }, function (error, success) { if (error) return; console.log("User connected with correct user data?", success.peerInfo.userData.username === data.username); });
Events Sequence:
- Invokes
init()
method to retrieve Room session token. - Starts a socket connection with the Signaling server.
- When socket connection to Signaling server is successfully established,
channelOpen
event triggers. - When socket connection to Signaling server is fails to establish,
socketError
event triggers. TriggerschannelRetry
event if there are still existing fallback ports and transport to attempt to establish a successful socket connection with the Signaling server.
- When socket connection to Signaling server is successfully established,
channelMessage
event triggers.peerJoined
event triggers parameter payloadisSelf
value astrue
. If MCU is enabled for the App Key, theserverPeerJoined
event will be triggered when MCU is present in the Room, and then Peer connections can commence.IfshareScreen()
Stream is available despite havinggetUserMedia()
Stream available, theshareScreen()
Stream is sent instead of thegetUserMedia()
Stream to Peers.
Parameters:
-
room
{String} OptionalThe Room name.
- When not provided, its value is the
options.defaultRoom
provided in theinit()
method. Note that if you are using credentials based authentication, you cannot switch the Room that is not the same as theoptions.defaultRoom
defined in theinit()
method.
- When not provided, its value is the
-
options
{JSON} OptionalThe Room session configuration options.
-
userData
{JSON | String} OptionalThe User custom data. This can be set after Room session has started using the
setUserData()
method. -
audio
{Boolean | JSON} OptionalThe
getUserMedia()
methodoptions.audio
parameter settings. When value is defined astrue
or an object,getUserMedia()
method to be invoked to retrieve new Stream. Ifoptions.video
is not defined, it will be defined asfalse
. Object signature matches theoptions.audio
parameter in thegetUserMedia()
method. -
video
{Boolean | JSON} OptionalThe
getUserMedia()
methodoptions.video
parameter settings. When value is defined astrue
or an object,getUserMedia()
method to be invoked to retrieve new Stream. Ifoptions.audio
is not defined, it will be defined asfalse
. Object signature matches theoptions.video
parameter in thegetUserMedia()
method. -
bandwidth
{JSON} OptionalNote that this currently does not work with Firefox browsers.
The configuration to set the maximum streaming bandwidth sent to Peers.-
audio
{Number} OptionalThe maximum audio streaming bandwidth sent to Peers. -
video
{Number} OptionalThe maximum video streaming bandwidth sent to Peers. -
data
{Number} OptionalThe maximum data streaming bandwidth sent to Peers. This affects the P2P messaging insendP2PMessage()
method, and data transfers insendBlobData()
method andsendURLData()
method.
-
-
manualGetUserMedia
{Boolean} OptionalThe flag if
joinRoom()
should triggermediaAccessRequired
event in which thegetUserMedia()
Stream orshareScreen()
Stream must be retrieved as a requirement before Room session may begin. This ignores theoptions.audio
andoptions.video
configuration.
-
-
callback
{Function} OptionalThe callback function fired when request has completed. Function parameters signature is
function (error, success)
Function request completion is determined by thepeerJoined
event triggeringisSelf
parameter payload value astrue
for request success.-
error
{JSON}The error result in request. Defined as
null
when there are no errors in request-
error
{Error | String}The error received when starting Room session has failed. -
errorCode
{Number}The currentinit()
method ready state. [Rel: Skylink.READY_STATE_CHANGE] -
room
{String}The Room name.
-
-
success
{JSON}The success result in request. Defined as
null
when there are errors in request-
room
{String}The Room name. -
peerId
{String}The User's Room session Peer ID. -
peerInfo
{JSON}The User's current Room session information. Object signature matches thepeerInfo
parameter payload received in thepeerJoined
event.
-
-
leaveRoom
[stopMediaOptions=true]
,
[callback]
,
)
Function that stops Room session.
Events Sequence:
- When
stopMediaOptions.userMedia
istrue
, thestopStream()
method is invoked. - When
stopMediaOptions.screenshare
istrue
, thestopScreen()
method is invoked. - Stops the socket connection with the Signaling server.
- When socket connection to Signaling server is closed,
channelClose
event triggers.
- When socket connection to Signaling server is closed,
peerLeft
event triggers for Peers in the Room and User. If MCU is enabled for the App Key, theserverPeerLeft
event will be triggered when Room session has ended.
Parameters:
-
stopMediaOptions
{Boolean | JSON} OptionalDEFAULT:true
The flag if
leaveRoom()
should stop bothshareScreen()
Stream andgetUserMedia()
Stream.- When provided as a boolean, this sets both
stopMediaOptions.userMedia
andstopMediaOptions.screenshare
to its boolean value.
-
userMedia
{Boolean} OptionalDEFAULT:true
The flag if
leaveRoom()
should stopgetUserMedia()
Stream. This invokesstopStream()
method. -
screenshare
{Boolean} OptionalDEFAULT:true
The flag if
leaveRoom()
should stopshareScreen()
Stream. This invokesstopScreen()
method.
- When provided as a boolean, this sets both
-
callback
{Function} OptionalThe callback function fired when request has completed. Function parameters signature is
function (error, success)
Function request completion is determined by thepeerLeft
event triggeringisSelf
parameter payload value astrue
for request success.-
error
{Error | String}The error result in request. Defined as
null
when there are no errors in request Object signature is theleaveRoom()
error when stopping Room session. -
success
{JSON}The success result in request. Defined as
null
when there are errors in request-
peerId
{String}The User's Room session Peer ID. -
previousRoom
{String}The Room name.
-
-
lockRoom
()
Function that locks the current Room when in session to prevent other Peers from joining the Room.
Events Sequence:
roomLock
event triggers parameter payloadisLocked
value astrue
.
muteStream
options
,
)
Function that mutes both getUserMedia()
Stream and
shareScreen()
Stream audio or video tracks.
Example:
// Example 1: Mute both audio and video tracks in all Streams skylinkDemo.muteStream({ audioMuted: true, videoMuted: true });
// Example 2: Mute only audio tracks in all Streams skylinkDemo.muteStream({ audioMuted: true, videoMuted: false });
// Example 3: Mute only video tracks in all Streams skylinkDemo.muteStream({ audioMuted: false, videoMuted: true });
Events Sequence:
- If User is in the Room,
streamMuted
event triggers parameter payloadisSelf
value astrue
, andpeerUpdated
event triggers parameter payloadisSelf
value astrue
.
Parameters:
-
options
{JSON}The Streams muting options.
-
audioMuted
{Boolean} OptionalDEFAULT:true
The flag if all Streams audio tracks should be muted or not.
-
videoMuted
{Boolean} OptionalDEFAULT:true
The flag if all Streams video tracks should be muted or not.
-
off
eventName
,
[callback]
,
)
Function that unsubscribes listeners from an event.
Example:
// Example 1: Unsubscribe all "peerJoined" event skylinkDemo.off("peerJoined");
// Example 2: Unsubscribe only one listener from "peerJoined event" var pJListener = function (peerId, peerInfo, isSelf) { console.info("peerJoined event has been triggered with:", peerId, peerInfo, isSelf); };
skylinkDemo.off("peerJoined", pJListener);
Events Sequence:
There is no event sequence for this method.Parameters:
-
eventName
{String}The event.
-
callback
{Function} OptionalThe listener to unsubscribe.
- When not provided, all listeners associated to the event will be unsubscribed.
on
eventName
,
callback
,
)
Function that subscribes a listener to an event.
Example:
// Example 1: Subscribing to "peerJoined" event skylinkDemo.on("peerJoined", function (peerId, peerInfo, isSelf) { console.info("peerJoined event has been triggered with:", peerId, peerInfo, isSelf); });
Events Sequence:
There is no event sequence for this method.Parameters:
-
eventName
{String}The event.
-
callback
{Function}The listener. This will be invoked when event is triggered.
once
eventName
,
callback
,
[condition]
,
[fireAlways=false]
,
)
Function that subscribes a listener to an event once.
Example:
// Example 1: Subscribing to "peerJoined" event that triggers without condition skylinkDemo.once("peerJoined", function (peerId, peerInfo, isSelf) { console.info("peerJoined event has been triggered once with:", peerId, peerInfo, isSelf); });
// Example 2: Subscribing to "incomingStream" event that triggers with condition skylinkDemo.once("incomingStream", function (peerId, stream, isSelf, peerInfo) { console.info("incomingStream event has been triggered with User stream:", stream); }, function (peerId, peerInfo, isSelf) { return isSelf; });
// Example 3: Subscribing to "dataTransferState" event that triggers always only when condition is satisfied skylinkDemo.once("dataTransferState", function (state, transferId, peerId, transferInfo) { console.info("Received data transfer from Peer:", transferInfo.data); }, function (state, transferId, peerId) { if (state === skylinkDemo.DATA_TRANSFER_STATE.UPLOAD_REQUEST) { skylinkDemo.acceptDataTransfer(peerId, transferId); } return state === skylinkDemo.DATA_TRANSFER_STATE.DOWNLOAD_COMPLETED; }, true);
Events Sequence:
There is no event sequence for this method.Parameters:
-
eventName
{String}The event.
-
callback
{Function}The listener. This will be invoked once when event is triggered and conditional function is satisfied.
-
condition
{Function} OptionalThe conditional function that will be invoked when event is triggered. Return
true
when invoked to satisfy condition. When not provided, the conditional function will always returntrue
. -
fireAlways
{Boolean} OptionalDEFAULT:false
The flag that indicates if
once()
should act likeon()
but only invoke listener only when conditional function is satisfied.
refreshConnection
[targetPeerId]
,
[callback]
,
)
For MCU enabled Peer connections, the restart functionality may differ, you may learn more about how to workaround it in this article here.Function that refreshes Peer connections to update with the current streaming.
For restarts with Peers connecting from Android or iOS SDKs, restarts might not work as written in in this article here.
Note that this functionality should be used when Peer connection stream freezes during a connection, and is throttled when invoked many times in less than 3 seconds interval.
Example:
// Example 1: Refreshing a Peer connection function refreshFrozenVideoStream (peerId) { skylinkDemo.refreshConnection(peerId, function (error, success) { if (error) return; console.log("Refreshing connection for '" + peerId + "'"); }); }
// Example 2: Refreshing a list of Peer connections function refreshFrozenVideoStreamGroup (peerIdA, peerIdB) { skylinkDemo.refreshConnection([peerIdA, peerIdB], function (error, success) { if (error) { if (error.transferErrors[peerIdA]) { console.error("Failed refreshing connection for '" + peerIdA + "'"); } else { console.log("Refreshing connection for '" + peerIdA + "'"); } if (error.transferErrors[peerIdB]) { console.error("Failed refreshing connection for '" + peerIdB + "'"); } else { console.log("Refreshing connection for '" + peerIdB + "'"); } } else { console.log("Refreshing connection for '" + peerIdA + "' and '" + peerIdB + "'"); } }); }
// Example 3: Refreshing all Peer connections function refreshFrozenVideoStreamAll () { skylinkDemo.refreshConnection(function (error, success) { if (error) { for (var i = 0; i < error.listOfPeers.length; i++) { if (error.refreshErrors[error.listOfPeers[i]]) { console.error("Failed refreshing connection for '" + error.listOfPeers[i] + "'"); } else { console.info("Refreshing connection for '" + error.listOfPeers[i] + "'"); } } } else { console.log("Refreshing connection for all Peers", success.listOfPeers); } }); }
Events Sequence:
→ For Peer connections without MCU enabled:peerRestart
event triggers parameter payloadisSelfInitiateRestart
astrue
for all targeted Peer connections.
peerRestart
event triggers parameter payloadisSelfInitiateRestart
astrue
for all targeted Peer connections.serverPeerRestart
event triggers parameter payloadserverPeerType
asMCU
.
- Invokes
joinRoom()
method.refreshConnection
will retain the User session information except the Peer ID will be a different assigned ID due to restarting the Room session.
Parameters:
-
targetPeerId
{String | Array} OptionalThe target Peer ID to refresh connection with.
- When provided as an Array, it will refresh all connections with all the Peer IDs provided.
- When not provided, it will refresh all the currently connected Peers in the Room.
-
callback
{Function} OptionalThe callback function fired when request has completed. Function parameters signature is
function (error, success)
Function request completion is determined by thepeerRestart
event triggeringisSelfInitiateRestart
parameter payload value astrue
for all Peers targeted for request success.-
error
{JSON}The error result in request. Defined as
null
when there are no errors in request-
listOfPeers
{Array}The list of Peer IDs targeted. -
refreshErrors
{JSON}The list of Peer connection refresh errors. -
refreshErrors.#peerId
{Error | String}The Peer connection refresh error associated with the Peer ID defined in#peerId
property. If#peerId
value is"self"
, it means that it is the error when there is no Peer connections to refresh with.
-
-
success
{JSON}The success result in request. Defined as
null
when there are errors in request-
listOfPeers
{Array}The list of Peer IDs targeted.
-
-
respondBlobRequest
()
Deprecation Warning! This method has been deprecated, please use
acceptDataTransfer()
method instead.
Function that accepts or rejects an upload data transfer request from Peer to User.
Parameter signature follows
acceptDataTransfer()
method.
Example:
// Example 1: Accept Peer upload data transfer request skylinkDemo.on("incomingDataRequest", function (transferId, peerId, transferInfo, isSelf) { if (!isSelf) { skylinkDemo.respondBlobRequest(peerId, transferId, true); } });
// Example 2: Reject Peer upload data transfer request skylinkDemo.on("incomingDataRequest", function (transferId, peerId, transferInfo, isSelf) { if (!isSelf) { skylinkDemo.respondBlobRequest(peerId, transferId, false); } });
Events Sequence:
Event sequence followsacceptDataTransfer()
method.
sendBlobData
data
,
[timeout=60]
,
[targetPeerId]
,
[callback]
,
)
Note that Android and iOS SDKs do not support simultaneous data transfers.Function that starts an uploading data transfer from User to Peers.
Example:
<body> <input type="radio" name="timeout" onchange="setTransferTimeout(0)"> 1s timeout (Default) <input type="radio" name="timeout" onchange="setTransferTimeout(120)"> 2s timeout <input type="radio" name="timeout" onchange="setTransferTimeout(300)"> 5s timeout <hr> <input type="file" onchange="uploadFile(this.Files[0], this.getAttribute('data'))" data="peerId"> <input type="file" onchange="uploadFileGroup(this.Files[0], this.getAttribute('data').split(',')))" data="peerIdA,peerIdB"> <input type="file" onchange="uploadFileAll(this.Files[0])" data=""> <script> var transferTimeout = 0;
function setTransferTimeout (timeout) { transferTimeout = timeout; }
// Example 1: Upload data to a Peer function uploadFile (file, peerId) { var cb = function (error, success) { if (error) return; console.info("File has been transferred to '" + peerId + "' successfully"); }; if (transferTimeout > 0) { skylinkDemo.sendBlobData(file, peerId, transferTimeout, cb); } else { skylinkDemo.sendBlobData(file, peerId, cb); } }
// Example 2: Upload data to a list of Peers function uploadFileGroup (file, peerIds) { var cb = function (error, success) { var listOfPeers = error ? error.listOfPeers : success.listOfPeers; var listOfPeersErrors = error ? error.transferErrors : {}; for (var i = 0; i < listOfPeers.length; i++) { if (listOfPeersErrors[listOfPeers[i]]) { console.error("Failed file transfer to '" + listOfPeers[i] + "'"); } else { console.info("File has been transferred to '" + listOfPeers[i] + "' successfully"); } } }; if (transferTimeout > 0) { skylinkDemo.sendBlobData(file, peerIds, transferTimeout, cb); } else { skylinkDemo.sendBlobData(file, peerIds, cb); } }
// Example 2: Upload data to a list of Peers function uploadFileAll (file) { var cb = function (error, success) { var listOfPeers = error ? error.listOfPeers : success.listOfPeers; var listOfPeersErrors = error ? error.transferErrors : {}; for (var i = 0; i < listOfPeers.length; i++) { if (listOfPeersErrors[listOfPeers[i]]) { console.error("Failed file transfer to '" + listOfPeers[i] + "'"); } else { console.info("File has been transferred to '" + listOfPeers[i] + "' successfully"); } } }; if (transferTimeout > 0) { skylinkDemo.sendBlobData(file, transferTimeout, cb); } else { skylinkDemo.sendBlobData(file, cb); } } </script> </body>
Events Sequence:
- When Peer supports simultaneous data transfers,
dataChannelState
event triggers parameter payloadstate
asCONNECTING
andchannelType
asDATA
.dataChannelState
event triggers parameter payloadstate
asOPEN
andchannelType
asDATA
.
dataChannelState
event must trigger parameter payloadstate
asOPEN
andchannelType
asMESSAGING
. incomingDataRequest
event triggers parameter payloadisSelf
value astrue
.- When Peers accepts the uploading data transfer request from User
dataTransferState
event triggers parameter payloadstate
asUPLOAD_STARTED
. For Peers, the parameter payloadstate
isDOWNLOAD_STARTED
.- When data transfer is still uploading,
dataTransferState
event triggers parameter payloadstate
asUPLOADING
. For Peers, the parameter payloadstate
isDOWNLOADING
. - When response has timed out from Peer (based on the
timeout
parameter configured in the method),dataTransferState
event triggers parameter payloadstate
asERROR
and data transfer has been terminated. dataTransferState
event triggers parameter payloadstate
asUPLOAD_COMPLETED
. For Peers, the parameter payloadstate
isDOWNLOAD_COMPLETED
.
- When Peers rejects the uploading data transfer request from User
dataTransferState
event triggers parameter payloadstate
asREJECTED
Parameters:
-
data
{Blob}The Blob object.
-
timeout
{Number} OptionalDEFAULT:60
The timeout to wait for response from Peer.
-
targetPeerId
{String | Array} OptionalThe target Peer ID to start data transfer with.
- When provided as an Array, it will start uploading data transfers with all connections with all the Peer IDs provided.
- When not provided, it will start uploading data transfers with all the currently connected Peers in the Room.
-
callback
{Function} OptionalThe callback function fired when request has completed. Function parameters signature is
function (error, success)
Function request completion is determined by thedataTransferState
event triggeringstate
parameter payload asUPLOAD_COMPLETED
for all Peers targeted for request success.-
error
{JSON}The error result in request. Defined as
null
when there are no errors in request-
transferId
{String}Deprecation Warning! This property has been deprecated. Please use
The data transfer ID. Defined only for single targeted Peer data transfer.callback.error.transferInfo.transferId
instead. -
state
{String}Deprecation Warning! This property has been deprecated. Please use
The data transfer state that resulted in error. Defined only for single targeted Peer data transfer. [Rel: Skylink.DATA_TRANSFER_STATE]dataTransferState
event instead. -
peerId
{String}Deprecation Warning! This property has been deprecated. Please use
The targeted Peer ID for data transfer. Defined only for single targeted Peer data transfer.callback.error.listOfPeers
instead. -
isPrivate
{Boolean}Deprecation Warning! This property has been deprecated. Please use
The flag if data transfer is targeted or not, basing off thecallback.error.transferInfo.isPrivate
instead.targetPeerId
parameter being defined. Defined only for single targeted Peer data transfer. -
error
{Error | String}Deprecation Warning! This property has been deprecated. Please use
The error received that resulted in error. Defined only for single targeted Peer data transfer.callback.error.transferErrors
instead. -
listOfPeers
{Array}The list Peer IDs targeted for the data transfer. -
transferErrors
{JSON}The list of data transfer errors. -
transferErrors.#peerId
{Error | String}The data transfer error associated with the Peer ID defined in#peerId
property. If#peerId
value is"self"
, it means that it is the error when there are no Peer connections to start data transfer with. -
transferInfo
{JSON}The data transfer information. Object signature matches thetransferInfo
parameter payload received in thedataTransferState
event.
-
-
success
{JSON}The success result in request. Defined as
null
when there are errors in request-
transferId
{String}Deprecation Warning! This property has been deprecated. Please use
The data transfer ID.callback.success.transferInfo.transferId
instead. -
state
{String}Deprecation Warning! This property has been deprecated. Please use
The data transfer state that resulted in error. Defined only for single targeted Peer data transfer. [Rel: Skylink.DATA_TRANSFER_STATE]dataTransferState
event instead. -
peerId
{String}Deprecation Warning! This property has been deprecated. Please use
The targeted Peer ID for data transfer. Defined only for single targeted Peer data transfer.callback.success.listOfPeers
instead. -
isPrivate
{Boolean}Deprecation Warning! This property has been deprecated. Please use
The flag if data transfer is targeted or not, basing off thecallback.success.transferInfo.isPrivate
instead.targetPeerId
parameter being defined. Defined only for single targeted Peer data transfer. -
listOfPeers
{Array}The list Peer IDs targeted for the data transfer. -
transferInfo
{JSON}The data transfer information. Object signature matches thetransferInfo
parameter payload received in thedataTransferState
event.
-
-
sendMessage
message
,
[targetPeerId]
,
)
Function that sends a message to Peers via the Signaling socket connection.
Example:
// Example 1: Broadcasting to all Peers skylinkDemo.sendMessage("Hi all!");
// Example 2: Sending to specific Peers var peersInExclusiveParty = [];
skylinkDemo.on("peerJoined", function (peerId, peerInfo, isSelf) { if (isSelf) return; if (peerInfo.userData.exclusive) { peersInExclusiveParty.push(peerId); } });
function updateExclusivePartyStatus (message) { skylinkDemo.sendMessage(message, peersInExclusiveParty); }
Events Sequence:
incomingMessage
event triggers parameter payloadmessage.isDataChannel
value asfalse
.
Parameters:
-
message
{String | JSON}The message.
-
targetPeerId
{String | Array} OptionalThe target Peer ID to send message to.
- When provided as an Array, it will send the message to only Peers which IDs are in the list.
- When not provided, it will broadcast the message to all connected Peers in the Room.
sendP2PMessage
message
,
[targetPeerId]
,
)
Function that sends a message to Peers via the Datachannel connection.
Consider using sendURLData()
method if you are
sending large strings to Peers.
Example:
// Example 1: Sending m skylinkDemo.on("dataChannelState", function (state, peerId, error, channelName, channelType) { if (state === skylinkDemo.DATA_CHANNEL_STATE.OPEN && channelType === skylinkDemo.DATA_CHANNEL_TYPE.MESSAGING) { skylinkDemo.sendP2PMessage("test", peerId); } });
// Example 1: Broadcasting to all Peers skylinkDemo.sendP2PMessage("Hi all!");
// Example 2: Sending to specific Peers var peersInExclusiveParty = [];
skylinkDemo.on("peerJoined", function (peerId, peerInfo, isSelf) { if (isSelf) return; if (peerInfo.userData.exclusive) { peersInExclusiveParty[peerId] = false; } });
skylinkDemo.on("dataChannelState", function (state, peerId, error, channelName, channelType) { if (state === skylinkDemo.DATA_CHANNEL_STATE.OPEN && channelType === skylinkDemo.DATA_CHANNEL_TYPE.MESSAGING) { peersInExclusiveParty[peerId] = true; } });
function updateExclusivePartyStatus (message) { skylinkDemo.sendP2PMessage(message, peersInExclusiveParty); }
Events Sequence:
incomingMessage
event triggers parameter payloadisSelf
value astrue
Note that thedataChannelState
event must trigger parameter payloadstate
asOPEN
andchannelType
asMESSAGING
for targeted Peers or the message will not be sent.
Parameters:
-
message
{String | JSON}The message.
-
targetPeerId
{String | Array} OptionalThe target Peer ID to send message to.
- When provided as an Array, it will send the message to only Peers which IDs are in the list.
- When not provided, it will broadcast the message to all connected Peers in the Room.
sendStream
options
,
[callback]
,
)
Note that ifFunction that sends a newshareScreen()
Stream is available despite havinggetUserMedia()
Stream available, theshareScreen()
Stream is sent instead of thegetUserMedia()
Stream to Peers.
getUserMedia()
Stream
to all connected Peers in the Room.
Example:
// Example 1: Send MediaStream object function retrieveStreamBySourceForFirefox (sourceId) { navigator.mediaDevices.getUserMedia({ audio: true, video: { sourceId: { exact: sourceId } } }).then(function (stream) { skylinkDemo.sendStream(stream, function (error, success) { if (err) return; if (stream === success) { console.info("Same MediaStream has been sent"); } console.log("Stream is now being sent to Peers"); attachMediaStream(document.getElementById("my-video"), success); }); }); }
// Example 2: Send video later var inRoom = false;
function sendVideo () { if (!inRoom) return; skylinkDemo.sendStream({ audio: true, video: true }, function (error, success) { if (error) return; console.log("getUserMedia() Stream with video is now being sent to Peers"); attachMediaStream(document.getElementById("my-video"), success); }); }
skylinkDemo.joinRoom({ audio: true }, function (jRError, jRSuccess) { if (jRError) return; inRoom = true; });
Events Sequence:
- Invokes
getUserMedia()
method. - Invokes
refreshConnection()
method. - If User is in the Room,
incomingStream
event triggers with parameter payloadisSelf
astrue
, andpeerUpdated
event triggers with parameter payloadisSelf
astrue
.
Parameters:
-
options
{JSON | MediaStream}The
getUserMedia()
methodoptions
parameter settings.- When provided as a
MediaStream
object, this configures theoptions.audio
andoptions.video
based on the tracks available in theMediaStream
object, and configures theoptions.audio.mute
andoptions.video.mute
based on the tracks.enabled
flags in the tracks provided in theMediaStream
object without invokinggetUserMedia()
method. Object signature matches theoptions
parameter in thegetUserMedia()
method.
- When provided as a
-
callback
{Function} OptionalThe callback function fired when request has completed. Function parameters signature is
function (error, success)
Function request completion is determined by thepeerRestart
event triggeringisSelfInitiateRestart
parameter payload value astrue
for all Peers currently in the Room targeted for request success.-
error
{Error | String}The error result in request. Defined as
null
when there are no errors in request Object signature is thegetUserMedia()
method error or when invalidoptions
is provided. -
success
{MediaStream}The success result in request. Defined as
null
when there are errors in request Object signature is thegetUserMedia()
method Stream object.
-
sendURLData
data
,
)
Currently, the Android and iOS SDKs do not support this type of data transfer.Function that starts an uploading string data transfer from User to Peers.
Example:
<body> <input type="radio" name="timeout" onchange="setTransferTimeout(0)"> 1s timeout (Default) <input type="radio" name="timeout" onchange="setTransferTimeout(120)"> 2s timeout <input type="radio" name="timeout" onchange="setTransferTimeout(300)"> 5s timeout <hr> <input type="file" onchange="showImage(this.Files[0], this.getAttribute('data'))" data="peerId"> <input type="file" onchange="showImageGroup(this.Files[0], this.getAttribute('data').split(',')))" data="peerIdA,peerIdB"> <input type="file" onchange="showImageAll(this.Files[0])" data=""> <image id="target-1" src=""> <image id="target-2" src=""> <image id="target-3" src=""> <script> var transferTimeout = 0;
function setTransferTimeout (timeout) { transferTimeout = timeout; }
function retrieveImageDataURL(file, cb) { var fr = new FileReader(); fr.onload = function () { cb(fr.result); }; fr.readAsDataURL(files[0]); }
// Example 1: Send image data URL to a Peer function showImage (file, peerId) { var cb = function (error, success) { if (error) return; console.info("Image has been transferred to '" + peerId + "' successfully"); }; retrieveImageDataURL(file, function (str) { if (transferTimeout > 0) { skylinkDemo.sendURLData(str, peerId, transferTimeout, cb); } else { skylinkDemo.sendURLData(str, peerId, cb); } document.getElementById("target-1").src = str; }); }
// Example 2: Send image data URL to a list of Peers function showImageGroup (file, peerIds) { var cb = function (error, success) { var listOfPeers = error ? error.listOfPeers : success.listOfPeers; var listOfPeersErrors = error ? error.transferErrors : {}; for (var i = 0; i < listOfPeers.length; i++) { if (listOfPeersErrors[listOfPeers[i]]) { console.error("Failed image transfer to '" + listOfPeers[i] + "'"); } else { console.info("Image has been transferred to '" + listOfPeers[i] + "' successfully"); } } }; retrieveImageDataURL(file, function (str) { if (transferTimeout > 0) { skylinkDemo.sendURLData(str, peerIds, transferTimeout, cb); } else { skylinkDemo.sendURLData(str, peerIds, cb); } document.getElementById("target-2").src = str; }); }
// Example 2: Send image data URL to a list of Peers function uploadFileAll (file) { var cb = function (error, success) { var listOfPeers = error ? error.listOfPeers : success.listOfPeers; var listOfPeersErrors = error ? error.transferErrors : {}; for (var i = 0; i < listOfPeers.length; i++) { if (listOfPeersErrors[listOfPeers[i]]) { console.error("Failed image transfer to '" + listOfPeers[i] + "'"); } else { console.info("Image has been transferred to '" + listOfPeers[i] + "' successfully"); } } }; retrieveImageDataURL(file, function (str) { if (transferTimeout > 0) { skylinkDemo.sendURLData(str, transferTimeout, cb); } else { skylinkDemo.sendURLData(str, cb); } document.getElementById("target-3").src = str; }); } </script> </body>
Events Sequence:
Event sequence followssendBlobData()
method.
Parameters:
-
data
{String}The data string to transfer to Peer. Parameter signature follows
sendBlobData()
method exceptdata
parameter.
setDebugMode
[options=false]
,
)
Function that configures the debugging mode of the SDK.
Example:
// Example 1: Enable both options.storeLogs and options.trace skylinkDemo.setDebugMode(true);
// Example 2: Enable only options.storeLogs skylinkDemo.setDebugMode({ storeLogs: true });
// Example 3: Disable debugging mode skylinkDemo.setDebugMode();
Events Sequence:
There is no event sequence for this method.Parameters:
-
options
{Boolean | JSON} OptionalDEFAULT:false
The debugging options.
- When provided as a boolean, this sets both
options.trace
andoptions.storeLogs
to its boolean value.
-
trace
{Boolean} OptionalDEFAULT:false
The flag if SDK
console
logs should output asconsole.trace()
logs for tracing theFunction
call stack. Note that theconsole.trace()
output logs is determined by the log level setsetLogLevel()
method. Ifconsole.trace()
API is not supported,setDebugMode()
will fallback to useconsole.log()
API. -
storeLogs
{Boolean} OptionalDEFAULT:false
The flag if SDK should store the
console
logs. This is required to be enabled forSkylinkLogs
API.
- When provided as a boolean, this sets both
setLogLevel
[logLevel]
,
)
Function that configures the level of console
API logs to be printed in the
Javascript Web Console.
Example:
// Example 1: Print all of the console.debug, console.log, console.info, console.warn and console.error logs. skylinkDemo.setLogLevel(skylinkDemo.LOG_LEVEL.DEBUG);
// Example 2: Print only the console.log, console.info, console.warn and console.error logs. skylinkDemo.setLogLevel(skylinkDemo.LOG_LEVEL.LOG);
// Example 3: Print only the console.info, console.warn and console.error logs. skylinkDemo.setLogLevel(skylinkDemo.LOG_LEVEL.INFO);
// Example 4: Print only the console.warn and console.error logs. skylinkDemo.setLogLevel(skylinkDemo.LOG_LEVEL.WARN);
// Example 5: Print only the console.error logs. This is done by default. skylinkDemo.setLogLevel(skylinkDemo.LOG_LEVEL.ERROR);
Events Sequence:
There is no event sequence for this method.Parameters:
-
logLevel
{Number} OptionalThe specific log level of logs to return.
- When not provided or that the level does not exists, it will not overwrite the current log level.
By default, the initial log level is
ERROR
. [Rel: Skylink.LOG_LEVEL]
- When not provided or that the level does not exists, it will not overwrite the current log level.
By default, the initial log level is
setUserData
userData
,
)
Function that overwrites the User current custom data.
Example:
// Example 1: Set/Update User custom data before joinRoom() var userData = "beforejoin";
skylinkDemo.setUserData(userData);
skylinkDemo.joinRoom(function (error, success) { if (error) return; if (success.peerInfo.userData === userData) { console.log("User data is sent"); } });
// Example 2: Update User custom data after joinRoom() var userData = "afterjoin";
skylinkDemo.joinRoom(function (error, success) { if (error) return; skylinkDemo.setUserData(userData); if (skylinkDemo.getPeerInfo().userData === userData) { console.log("User data is updated and sent"); } });
Events Sequence:
- If User is in Room,
peerUpdated
event triggers.
Parameters:
-
userData
{JSON | String}The updated custom data.
stopScreen
()
Function that stops shareScreen()
Stream.
Example:
function stopScreen () { skylinkDemo.stopScreen(); }
skylinkDemo.shareScreen();
Events Sequence:
mediaAccessStopped
event triggers parameter payloadisScreensharing
value astrue
.- If User is in the Room,
streamEnded
event triggers parameter payloadisScreensharing
value astrue
andisSelf
value astrue
, andpeerUpdated
event triggers parameter payloadisSelf
value astrue
. - If User has
getUserMedia()
Stream and is in the Room, the Stream will be sent to Peers andincomingStream
event triggers with parameter payloadisSelf
value astrue
using thegetUserMedia()
Stream. - Invokes
refreshConnection()
method.
stopStream
()
Function that stops getUserMedia()
Stream.
Example:
function stopStream () { skylinkDemo.stopStream(); }
skylinkDemo.getUserMedia();
Events Sequence:
mediaAccessStopped
event triggers parameter payloadisScreensharing
value asfalse
.- If User is in the Room,
streamEnded
event triggers parameter payloadisScreensharing
value asfalse
andisSelf
value astrue
, andpeerUpdated
event triggers parameter payloadisSelf
value astrue
.
unlockRoom
()
Function that unlocks the current Room when in session to allow other Peers to join the Room.
Events Sequence:
roomLock
event triggers parameter payloadisLocked
value asfalse
.
SkylinkLogs
()
To utilise and enable theThe object interface to manage the SDK Javascript Web Console logs.SkylinkLogs
API functionalities, thesetDebugMode()
methodoptions.storeLogs
parameter has to be enabled.
SkylinkLogs.clearAllLogs
()
Function that clears all the current stored SDK console
logs.
Example:
// Example 1: Clear all the logs SkylinkLogs.clearAllLogs();
SkylinkLogs.getLogs
()
Function that gets the current stored SDK console
logs.
Parameters:
-
logLevel
{Number} OptionalThe specific log level of logs to return.
- When not provided or that the level does not exists, it will return all logs of all levels. [Rel: Skylink.LOG_LEVEL]
Returns:
The array of stored logs.
<#index>
{Array}The stored log item.
0
{Date}The DateTime of when the log was stored.
1
{String}The log level. [Rel: Skylink.LOG_LEVEL]
2
{String}The log message.
3
{Any}OptionalThe log message object.
Example:
// Example 1: Get logs of specific level var debugLogs = SkylinkLogs.getLogs(skylinkDemo.LOG_LEVEL.DEBUG);
// Example 2: Get all the logs var allLogs = SkylinkLogs.getLogs();
SkylinkLogs.printAllLogs
()
Function that prints all the current stored SDK console
logs into the
Javascript Web Console.
Example:
// Example 1: Print all the logs SkylinkLogs.printAllLogs();
_audioFallback
Attribute Type: {Boolean}
Stores the flag that indicates if getUserMedia()
should fallback to retrieve
audio only Stream after retrieval of audio and video Stream had failed.
Default value:
false
_autoIntroduce
Attribute Type: {Boolean}
Stores the flag that indicates if "autoIntroduce" is enabled. If enabled, the Peers connecting the same Room will receive each others "enter" message ping.
Default value:
true
_channelOpen
Attribute Type: {Boolean}
Stores the flag that indicates if socket connection to the Signaling has opened.
_CHUNK_DATAURL_SIZE
Attribute Type: {Number}
Stores the data chunk size for data URI string transfers.
_dataChannels
Attribute Type: {JSON}
Stores the list of Peer Datachannel connections.
Keys:
-
(#peerId)
{JSON}The list of Datachannels associated with Peer ID.
-
<#channelLabel>
{RTCDataChannel}The Datachannel connection. The property name
"main"
is reserved for messaging Datachannel type.
-
_dataTransfersTimeout
Attribute Type: {JSON}
Stores the list of data transfer "wait-for-response" timeouts.
Keys:
-
<#transferId>
{Object}The data transfer session "wait-for-response" timeout.
_DC_PROTOCOL_TYPE
Attribute Type: {JSON}
Stores the list of data transfer protocols.
Keys:
-
WRQ
{String}The protocol to initiate data transfer.
-
ACK
{String}The protocol to request for data transfer chunk. Give
-1
to reject the request at the beginning and0
to accept the data transfer request. -
CANCEL
{String}The protocol to terminate data transfer.
-
ERROR
{String}The protocol when data transfer has errors and has to be terminated.
-
MESSAGE
{String}The protocol that is used to send P2P messages.
_defaultRoom
Attribute Type: {String}
Stores the default Room name to connect to when joinRoom()
does not provide a Room name.
_defaultStreamSettings
Attribute Type: {JSON}
Stores the default Stream settings for getUserMedia()
method.
Keys:
-
audio
{JSON}The default Stream audio settings.
-
video
{JSON}The default Stream video settings.
_downloadDataSessions
Attribute Type: {JSON}
Stores the list of downloading data transfer sessions to Peers.
Keys:
-
<#transferId>
{JSON}The downloading data transfer session.
_downloadDataTransfers
Attribute Type: {JSON}
Stores the list of downloading data transfers chunks to Peers.
Keys:
-
<#transferId>
{Array}The downloading data transfer chunks.
_enableDataChannel
Attribute Type: {Boolean}
Stores the flag if Peers should have any Datachannel connections.
Default value:
true
_enableDebugMode
Attribute Type: {Boolean}
Stores the flag if debugging mode is enabled. This manipulates the SkylinkLogs interface.
Default value:
false
_enableDebugStack
Attribute Type: {Boolean}
Stores the flag if logs should be stored in SkylinkLogs interface.
Default value:
false
_enableDebugTrace
Attribute Type: {Boolean}
Stores the flag if logs should trace if available.
This uses the console.trace
API.
Default value:
false
_enableIceTrickle
Attribute Type: {Boolean}
Stores the flag that indicates if Peer connections should trickle ICE.
Default value:
true
_enableSTUN
Attribute Type: {Boolean}
Stores the flag that indicates if STUN ICE servers should be used when constructing Peer connection.
Default value:
true
_enableTURN
Attribute Type: {Boolean}
Stores the flag that indicates if TURN ICE servers should be used when constructing Peer connection.
Default value:
true
_EVENTS
Attribute Type: {JSON}
Stores the list of on()
event handlers.
Keys:
-
<#event>
{Array}The list of event handlers associated with the event.
-
<#index>
{Function}The event handler function.
-
_forceSSL
Attribute Type: {Boolean}
Stores the flag if HTTPS connections should be enforced when connecting to the API or Signaling server if App is accessing from HTTP domain. HTTPS connections are enforced if App is accessing from HTTPS domains.
Default value:
false
_forceTURN
Attribute Type: {Boolean}
Stores the flag if TURN connections should be enforced when connecting to Peers. This filters all non "relay" ICE candidates to enforce connections via the TURN server.
Default value:
false
_forceTURNSSL
Attribute Type: {Boolean}
Stores the flag if TURNS connections should be enforced when connecting to the TURN server if App is accessing from HTTP domain. TURNS connections are enforced if App is accessing from HTTPS domains.
Default value:
false
_gatheredCandidates
Attribute Type: {JSON}
Stores the list of Peer connection ICE candidates.
Keys:
-
<#peerId>
{JSON}The list of the Peer connection ICE candidates.
-
sending
{JSON}The list of the Peer connection ICE candidates sent.
-
receiving
{JSON}The list of the Peer connection ICE candidates received.
-
_getUserMediaSettings
Attribute Type: {JSON}
Stores the native navigator.getUserMedia()
API constraints for
getUserMedia()
retrieval of Stream.
_groupMessageList
Attribute Type: {Array}
Stores the list of socket messaging protocol types to queue when sent less than a second interval.
_hasMCU
Attribute Type: {Boolean}
Stores the flag that indicates if MCU is available in the Room. If App Key enables MCU but this is false, this means likely there are problems connecting to the MCU server.
_ICEConnectionFailures
Attribute Type: {JSON}
Stores the list of Peer connections ICE failures counter.
Keys:
-
<#peerId>
{Number}The Peer connection ICE failures counter.
_INTEROP_MULTI_TRANSFERS
Attribute Type: {Array}
Stores the list of types of SDKs that do not support simultaneous data transfers.
_lastRestart
Attribute Type: {Object}
Stores the restart initiated timestamp to throttle the refreshConnection
functionality.
_logLevel
Attribute Type: {String}
Stores the current SDK log level.
Default is ERROR (0
).
Default value:
0
_mediaScreenClone
Attribute Type: {MediaStream}
Stores the User's shareScreen()
Stream clone for storing the video track.
Currently Chrome doesn't give us the audio track in the stream we receive, so we have to
make another getUserMedia() call to retrieve the audio track only.
_mediaStreamsStatus
Attribute Type: {JSON}
Stores the User's Stream (both getUserMedia()
and shareScreen()
) muted status.
Keys:
-
audioMuted
{Boolean}The flag that indicates if audio is muted or not available.
-
videoMuted
{Boolean}The flag that indicates if video is muted or not available.
_MOZ_CHUNK_FILE_SIZE
Attribute Type: {Number}
Stores the data chunk size for Blob transfers transferring from/to Firefox browsers due to limitation tested in the past in some PCs (linx predominatly).
_onceEvents
Attribute Type: {JSON}
Stores the list of once()
event handlers.
These events are only triggered once.
Keys:
-
<#event>
{Array}The list of event handlers associated with the event.
-
<#index>
{Array}The array of event handler function and its condition function.
-
_peerCandidatesQueue
Attribute Type: {JSON}
Stores the list of buffered ICE candidates that is received before remote session description is received and set.
Keys:
-
<#peerId>
{Array}The list of the Peer connection buffered ICE candidates received.
-
<#index>
{Object}The Peer connection buffered ICE candidate received.
-
_peerConnectionHealth
Attribute Type: {JSON}
Stores the list of Peer connection "healthy" flags, which indicates if Peer connection is successfully established, and when the health timers expires, it will clear the timer and not attempt to re-negotiate with the Peer connection again.
Keys:
-
<#peerId>
{Boolean}The flag that indicates if Peer connection has been successfully established.
_peerConnectionHealthTimers
Attribute Type: {JSON}
Stores the list of Peer connection health timers. This timers sets a timeout which checks and waits if Peer connection is successfully established, or else it will attempt to re-negotiate with the Peer connection again.
Keys:
-
<#peerId>
{Object}The Peer connection health timer.
_peerConnections
Attribute Type: {JSON}
Stores the list of the Peer connections.
Keys:
-
<#peerId>
{Object}The Peer connection.
_peerInformations
Attribute Type: {JSON}
Stores the list of Peers session information.
Keys:
-
<#peerId>
{JSON}The Peer session information.
-
userData
{JSON | String}The Peer custom data.
-
settings
{JSON}The Peer streaming information.
-
mediaStatus
{JSON}The Peer streaming muted status.
-
agent
{JSON}The Peer agent information.
-
_peerList
Attribute Type: {JSON}
Stores the list of Peers retrieved from the Signaling from getPeers()
method.
_peerPriorityWeight
Attribute Type: {Number}
Stores the User connection priority weight. If Peer has a higher connection weight, it will do the offer from its Peer connection first.
_receiveOnly
Attribute Type: {Boolean}
Stores the flag that indicates if User should only receive Stream from Peer connections but do not send User's Stream to Peer connections.
_retryCount
Attribute Type: {Number}
Stores the global number of Peer connection retries that would increase the wait-for-response timeout for the Peer connection health timer.
_room
Attribute Type: {JSON}
Stores the Room credentials information for joinRoom()
.
Keys:
-
id
{String}The "rid" for
joinRoom()
. -
token
{String}The "roomCred" for
joinRoom()
. -
startDateTime
{String}The "start" for
joinRoom()
. -
duration
{String}The "len" for
joinRoom()
. -
connection
{String}The RTCPeerConnection constraints and configuration. This is not used in the SDK except for the "mediaConstraints" property that sets the default
getUserMedia()
settings.
_roomStart
Attribute Type: {String}
Stores the init()
credentials starting DateTime stamp in ISO 8601.
_screenSharingAvailable
Attribute Type: {Boolean}
Stores the flag that indicates if screensharing is supported in the browser.
_screenSharingStreamSettings
Attribute Type: {JSON}
Stores the shareScreen()
Stream settings.
Keys:
-
audio
{JSON}The Stream audio settings.
-
video
{JSON}The Stream video settings.
_selectedAudioCodec
Attribute Type: {String}
Stores the preferred sending Peer connection streaming audio codec.
Default value:
"auto"
_selectedVideoCodec
Attribute Type: {String}
Stores the preferred sending Peer connection streaming video codec.
Default value:
"auto"
_serverRegion
Attribute Type: {String}
Stores the server region for the Signaling server to use. This is already deprecated an no longer useful. To discuss and remove.
_SIG_MESSAGE_TYPE
Attribute Type: {JSON}
Stores the list of socket messaging protocol types.
See confluence docs for the list based on the current SM_PROTOCOL_VERSION
.
_socketMessageQueue
Attribute Type: {Array}
Stores the queued socket messages. This is to prevent too many sent over less than a second interval that might cause dropped messages or jams to the Signaling connection.
_socketMessageTimeout
Attribute Type: {Object}
Stores the setTimeout
to sent queued socket messages.
_socketPorts
Attribute Type: {JSON}
Stores the list of socket ports to use to connect to the Signaling. These ports are defined by default which is commonly used currently by the Signaling. Should re-evaluate this sometime.
Keys:
-
http:
{Array}The list of HTTP socket ports.
-
https:
{Array}The list of HTTPS socket ports.
_socketTimeout
Attribute Type: {Number}
Stores the socket connection timeout when establishing connection to the Signaling.
_socketUseXDR
Attribute Type: {Boolean}
Stores the flag that indicates if XDomainRequest is used for IE 8/9.
_streamSettings
Attribute Type: {JSON}
Stores the getUserMedia()
Stream settings.
Keys:
-
audio
{JSON}The Stream audio settings.
-
video
{JSON}The Stream video settings.
_TRANSFER_DELIMITER
Attribute Type: {String}
Stores the fixed delimiter that concats the Datachannel label and actual transfer ID.
_TURNTransport
Attribute Type: {String}
Stores the option for the TURN protocols to use.
This should configure the TURN ICE servers urls ?transport=protocol
flag.
Default value:
"any"
_uploadDataSessions
Attribute Type: {JSON}
Stores the list of uploading data transfer sessions to Peers.
Keys:
-
<#transferId>
{JSON}The uploading data transfer session.
_uploadDataTransfers
Attribute Type: {JSON}
Stores the list of uploading data transfers chunks to Peers.
Keys:
-
<#transferId>
{Array}The uploading data transfer chunks.
_usePublicSTUN
Attribute Type: {Boolean}
Stores the flag that indicates if public STUN ICE servers should be used when constructing Peer connection.
Default value:
true
_user
Attribute Type: {JSON}
Stores the Signaling user credentials from the API response required for connecting to the Signaling server.
Keys:
-
uid
{String}The API result "username".
-
token
{String}The API result "userCred".
-
timeStamp
{String}The API result "timeStamp".
-
sid
{String}The Signaling server receive user Peer ID.
_userData
Attribute Type: {JSON | String}
Stores the User custom data.
By default, if no custom user data is set, it is an empty string ""
.
Default value:
""
AUDIO_CODEC
Attribute Type: {JSON}
Note that if the audio codec is not supported, the SDK will not configure the localThe list of available audio codecs to set as the preferred audio codec to use to encode sending audio data when available encoded audio codec for Peer connections configured in the"offer"
or"answer"
session description to prefer the codec.
init()
method.
Keys:
-
AUTO
{String}Value
"auto"
The value of the option to not prefer any audio codec but rather use the created local"offer"
/"answer"
session description audio codec preference. -
OPUS
{String}Value
"opus"
The value of the option to prefer the OPUS audio codec. -
ISAC
{String}Value
"ISAC"
The value of the option to prefer the ISAC audio codec.
CANDIDATE_GENERATION_STATE
Attribute Type: {JSON}
Learn more about how ICE works in this article here.The list of Peer connection ICE gathering states.
Keys:
-
GATHERING
{String}Value
"gathering"
The value of the state when Peer connection is gathering ICE candidates. These ICE candidates are sent to Peer for its connection to check for a suitable matching pair of ICE candidates to establish an ICE connection for stream audio, video and data. SeeiceConnectionState
event for ICE connection status. This state cannot happen until Peer connection remote"offer"
/"answer"
session description is set. SeepeerConnectionState
event for session description exchanging status. -
COMPLETED
{String}Value
"completed"
The value of the state when Peer connection gathering of ICE candidates has completed.
DATA_CHANNEL_STATE
Attribute Type: {JSON}
The list of Datachannel connection states.
Keys:
-
CONNECTING
{String}Value
"connecting"
The value of the state when Datachannel is attempting to establish a connection. -
OPEN
{String}Value
"open"
The value of the state when Datachannel has established a connection. -
CLOSING
{String}Value
"closing"
The value of the state when Datachannel connection is closing. -
CLOSED
{String}Value
"closed"
The value of the state when Datachannel connection has closed. -
ERROR
{String}Value
"error"
The value of the state when Datachannel connection has errors.
DATA_CHANNEL_TYPE
Attribute Type: {JSON}
The list of Datachannel types.
Keys:
-
MESSAGING
{String}Value
"messaging"
The value of the Datachannel type that is used only for messaging insendP2PMessage()
method. However for Peers that do not support simultaneous data transfers, this Datachannel type will be used to do data transfers (1 at a time). Each Peer connections will only have one of this Datachannel type and the connection will only close when the Peer connection is closed. -
DATA
{String}Value
"data"
The value of the Datachannel type that is used only for a data transfer insendURLData()
method andsendBlobData()
method. The connection will close after the data transfer has been completed or terminated.
DATA_TRANSFER_DATA_TYPE
Attribute Type: {JSON}
Currently, we do not support Blob or ArrayBuffer data type of transfers, but we will look into implementing it in the future.The list of supported data transfer data types.
Keys:
-
BINARY_STRING
{String}Value
"binaryString"
The value of the transfer type that sends all data packets as string (or converts them into string) when transferring data over the Datachannel connection.
DATA_TRANSFER_SESSION_TYPE
Attribute Type: {JSON}
The list of data transfers session types.
Keys:
-
BLOB
{String}Value
"blob"
The value of the session type forsendURLData()
method data transfer. -
DATA_URL
{String}Value
"dataURL"
The value of the session type formethod_sendBlobData()
method data transfer.
DATA_TRANSFER_STATE
Attribute Type: {JSON}
The list of data transfer states.
Keys:
-
UPLOAD_REQUEST
{String}Value
"request"
The value of the state when receiving an upload data transfer request from Peer to User. At this stage, the upload data transfer request from Peer may be accepted or rejected with theacceptDataTransfer()
method. -
UPLOAD_STARTED
{String}Value
"uploadStarted"
The value of the state when the data transfer request has been accepted and data transfer will start uploading data to Peer. At this stage, the data transfer may be terminated with thecancelDataTransfer()
method. -
DOWNLOAD_STARTED
{String}Value
"downloadStarted"
The value of the state when the data transfer request has been accepted and data transfer will start downloading data from Peer. At this stage, the data transfer may be terminated with thecancelDataTransfer()
method. -
REJECTED
{String}Value
"rejected"
The value of the state when upload data transfer request to Peer has been rejected and terminated. -
UPLOADING
{String}Value
"uploading"
The value of the state when data transfer is uploading data to Peer. -
DOWNLOADING
{String}Value
"downloading"
The value of the state when data transfer is downloading data from Peer. -
UPLOAD_COMPLETED
{String}Value
"uploadCompleted"
The value of the state when data transfer has uploaded successfully to Peer. -
DOWNLOAD_COMPLETED
{String}Value
"downloadCompleted"
The value of the state when data transfer has downloaded successfully from Peer. -
CANCEL
{String}Value
"cancel"
The value of the state when data transfer has been terminated from / to Peer. -
ERROR
{String}Value
"error"
The value of the state when data transfer has errors and has been terminated.
DATA_TRANSFER_TYPE
Attribute Type: {JSON}
The list of data transfers directions.
Keys:
-
UPLOAD
{String}Value
"upload"
The value of the data transfer direction when User is uploading data to Peer. -
DOWNLOAD
{String}Value
"download"
The value of the data transfer direction when User is downloading data from Peer.
DT_PROTOCOL_VERSION
Attribute Type: {String}
Note that this is used only for SDK developer purposes.The value of the current version of the data transfer protocol.
Current version:0.1.0
GET_CONNECTION_STATUS_STATE
Attribute Type: {JSON}
The list of getConnectionStatus()
method retrieval states.
Keys:
-
RETRIEVING
{Number}Value
0
The value of the state whengetConnectionStatus()
is retrieving the Peer connection stats. -
RETRIEVE_SUCCESS
{Number}Value
1
The value of the state whengetConnectionStatus()
has retrieved the Peer connection stats successfully. -
RETRIEVE_ERROR
{Number}Value
-1
The value of the state whengetConnectionStatus()
has failed retrieving the Peer connection stats.
GET_PEERS_STATE
Attribute Type: {JSON}
Note that this feature requiresThe list of"isPrivileged"
flag to be enabled for the App Key provided in theinit()
method, as only Users connecting using the App Key with this flag enabled (which we call privileged Users / Peers) can retrieve the list of Peer IDs from Rooms within the same App space. Read more about privileged App Key feature here.
getPeers()
method retrieval states.
Keys:
-
ENQUIRED
{String}Value
"enquired"
The value of the state whengetPeers()
is retrieving the list of Peer IDs from Rooms within the same App space from the Signaling server. -
RECEIVED
{String}Value
"received"
The value of the state whengetPeers()
has retrieved the list of Peer IDs from Rooms within the same App space from the Signaling server successfully.
HANDSHAKE_PROGRESS
Attribute Type: {JSON}
The list of Peer connection states.
Keys:
-
ENTER
{String}Value
"enter"
The value of the connection state when Peer has just entered the Room. At this stage,peerJoined
event is triggered. -
WELCOME
{String}Value
"welcome"
The value of the connection state when Peer is aware that User has entered the Room. At this stage,peerJoined
event is triggered and Peer connection may commence. -
OFFER
{String}Value
"offer"
The value of the connection state when Peer connection has set the local / remote"offer"
session description to start streaming connection. -
ANSWER
{String}Value
"answer"
The value of the connection state when Peer connection has set the local / remote"answer"
session description to establish streaming connection. -
ERROR
{String}Value
"error"
The value of the connection state when Peer connection has failed to establish streaming connection. This happens when there are errors that occurs in creating local"offer"
/"answer"
, or when setting remote / local"offer"
/"answer"
.
ICE_CONNECTION_STATE
Attribute Type: {JSON}
Learn more about how ICE works in this article here.The list of Peer connection ICE connection states.
Keys:
-
CHECKING
{String}Value
"checking"
The value of the state when Peer connection is checking for a suitable matching pair of ICE candidates to establish ICE connection. ICE candidates are exchanged fromcandidateGenerationState
event. -
CONNECTED
{String}Value
"connected"
The value of the state when Peer connection has found a suitable matching pair of ICE candidates to establish ICE connection but is still checking for a better suitable matching pair of ICE candidates for the best ICE connectivity. At this state, ICE connection is already established and audio, video and data streaming has already started. -
COMPLETED
{String}Value
"completed"
The value of the state when Peer connection has found the best suitable matching pair of ICE candidates to establish ICE connection and checking has stopped. At this state, ICE connection is already established and audio, video and data streaming has already started. This may happpen afterCONNECTED
. -
FAILED
{String}Value
"failed"
The value of the state when Peer connection ICE connection has failed. -
DISCONNECTED
{String}Value
"disconnected"
The value of the state when Peer connection ICE connection is disconnected. At this state, the Peer connection may attempt to revive the ICE connection. This may happen due to flaky network conditions. -
CLOSED
{String}Value
"closed"
The value of the state when Peer connection ICE connection has closed. This happens when Peer connection is closed and no streaming can occur at this stage. -
TRICKLE_FAILED
{String}Value
"trickeFailed"
The value of the state when Peer connection ICE connection has failed during trickle ICE. Trickle ICE is enabled ininit()
methodenableIceTrickle
option.
INTRODUCE_STATE
Attribute Type: {}
Note that this feature requiresThe list of"isPrivileged"
flag to be enabled and"autoIntroduce"
flag to be disabled for the App Key provided in theinit()
method, as only Users connecting using the App Key with this flag enabled (which we call privileged Users / Peers) can retrieve the list of Peer IDs from Rooms within the same App space. Read more about privileged App Key feature here.
introducePeer
method Peer introduction request states.
Keys:
-
INTRODUCING
{String}Value
"enquired"
The value of the state when introduction request for the selected pair of Peers has been made to the Signaling server. -
ERROR
{String}Value
"error"
The value of the state when introduction request made to the Signaling server for the selected pair of Peers has failed.
isPrivileged
Attribute Type: {Boolean}
Stores the flag that indicates if "isPrivileged" is enabled.
If enabled, the User has Privileged features which has the ability to retrieve the list of
Peers in the same App space with getPeers()
method
and introduce Peers to each other with introducePeer
method.
Default value:
false
log
Attribute Type: {JSON}
Stores the logging functions.
Keys:
-
debug
{Function}The function that handles the DEBUG level logs.
-
log
{Function}The function that handles the LOG level logs.
-
info
{Function}The function that handles the INFO level logs.
-
warn
{Function}The function that handles the WARN level logs.
-
error
{Function}The function that handles the ERROR level logs.
LOG_LEVEL
Attribute Type: {JSON}
The list of the SDK console
API log levels.
Keys:
-
DEBUG
{Number}Value
4
The value of the log level that displaysconsole
debug
,log
,info
,warn
anderror
logs. -
LOG
{Number}Value
3
The value of the log level that displays onlyconsole
log
,info
,warn
anderror
logs. -
INFO
{Number}Value
2
The value of the log level that displays onlyconsole
info
,warn
anderror
logs. -
WARN
{Number}Value
1
The value of the log level that displays onlyconsole
warn
anderror
logs. -
ERROR
{Number}Value
0
The value of the log level that displays onlyconsole
error
logs.
MEDIA_ACCESS_FALLBACK_STATE
Attribute Type: {}
The list of getUserMedia()
method Stream fallback states.
Keys:
-
FALLBACKING
{JSON}Value
0
The value of the state whengetUserMedia()
will retrieve audio track only when retrieving audio and video tracks failed. This can be configured byinit()
methodaudioFallback
option. -
FALLBACKED
{JSON}Value
1
The value of the state whengetUserMedia()
retrieves camera Stream successfully but with missing originally required audio or video tracks. -
ERROR
{JSON}-1 The value of the state when
getUserMedia()
failed to retrieve audio track only after retrieving audio and video tracks failed.
PEER_CONNECTION_STATE
Attribute Type: {JSON}
Learn more about how ICE works in this article here.The list of Peer connection session description exchanging states.
Keys:
-
STABLE
{String}Value
"stable"
The value of the state when there is no session description being exchanged between Peer connection. -
HAVE_LOCAL_OFFER
{String}Value
"have-local-offer"
The value of the state when local"offer"
session description is set. This should transition toSTABLE
state after remote"answer"
session description is set. SeehandshakeProgress
event for a more detailed exchanging of session description states. -
HAVE_REMOTE_OFFER
{String}Value
"have-remote-offer"
The value of the state when remote"offer"
session description is set. This should transition toSTABLE
state after local"answer"
session description is set. SeehandshakeProgress
event for a more detailed exchanging of session description states. -
CLOSED
{String}Value
"closed"
The value of the state when Peer connection is closed and no session description can be exchanged and set.
READY_STATE_CHANGE
Attribute Type: {JSON}
The list of init()
method ready states.
Keys:
-
INIT
{Number}Value
0
The value of the state wheninit()
has just started. -
LOADING
{Number}Value
1
The value of the state wheninit()
is authenticating App Key provided (and with credentials if provided as well) with the Auth server. -
COMPLETED
{Number}Value
2
The value of the state wheninit()
has successfully authenticated with the Auth server. Room session token is generated for joining thedefaultRoom
provided ininit()
. Room session token has to be generated each time User switches to a different Room injoinRoom()
method. -
ERROR
{Number}Value
-1
The value of the state wheninit()
has failed authenticating with the Auth server. [Rel: Skylink.READY_STATE_CHANGE_ERROR]
READY_STATE_CHANGE_ERROR
Attribute Type: {JSON}
The list of init()
method ready state failure codes.
Keys:
-
API_INVALID
{Number}Value
4001
The value of the failure code when provided App Key ininit()
does not exists. To resolve this, check that the provided App Key exists in the Developer Console. -
API_DOMAIN_NOT_MATCH
{Number}Value
4002
The value of the failure code when"domainName"
property in the App Key does not match the accessing server IP address. To resolve this, contact our support portal. -
API_CORS_DOMAIN_NOT_MATCH
{Number}Value
4003
The value of the failure code when"corsurl"
property in the App Key does not match accessing CORS. To resolve this, configure the App Key CORS in the Developer Console. -
API_CREDENTIALS_INVALID
{Number}Value
4004
The value of the failure code when there is no CORS present in the HTTP headers during the request to the Auth server present noroptions.credentials.credentials
configuration provided in theinit()
. To resolve this, ensure that CORS are present in the HTTP headers during the request to the Auth server. -
API_CREDENTIALS_NOT_MATCH
{Number}Value
4005
The value of the failure code when theoptions.credentials.credentials
configuration provided in theinit()
does not match up with theoptions.credentials.startDateTime
,options.credentials.duration
or that the"secret"
used to generateoptions.credentials.credentials
does not match the App Key's"secret
property provided. To resolve this, check that theoptions.credentials.credentials
is generated correctly and that the"secret"
used to generate it is from the App Key provided in theinit()
. -
API_INVALID_PARENT_KEY
{Number}Value
4006
The value of the failure code when the App Key provided does not belong to any existing App. To resolve this, check that the provided App Key exists in the Developer Console. -
API_NO_MEETING_RECORD_FOUND
{Number}Value
4010
The value of the failure code when providedoptions.credentials
does not match any scheduled meetings available for the "Persistent Room" enabled App Key provided. See the Persistent Room article to learn more. -
API_OVER_SEAT_LIMIT
{Number}Value
4020
The value of the failure code when App Key has reached its current concurrent users limit. To resolve this, use another App Key. To create App Keys dynamically, see the Application REST API docs for more information. -
API_RETRIEVAL_FAILED
{Number}Value
4021
The value of the failure code when App Key retrieval of authentication token fails. If this happens frequently, contact our support portal. -
API_WRONG_ACCESS_DOMAIN
{Number}Value
5005
The value of the failure code when App Key makes request to the incorrect Auth server. To resolve this, ensure that theroomServer
is not configured. If this persists even withoutroomServer
configuration, contact our support portal. -
XML_HTTP_REQUEST_ERROR
{Number}Value
-1
The value of the failure code when requesting to Auth server has timed out. -
NO_SOCKET_IO
{Number}Value
1
The value of the failure code when dependency Socket.IO client is not loaded. To resolve this, ensure that the Socket.IO client dependency is loaded before the Skylink SDK. You may use the provided Socket.IO client CDN here. -
NO_XMLHTTPREQUEST_SUPPORT
{Number}Value
2
The value of the failure code when XMLHttpRequest API required to make request to Auth server is not supported. To resolve this, display in the Web UI to ask clients to switch to the list of supported browser as listed in here. -
NO_WEBRTC_SUPPORT
{Number}Value
3
The value of the failure code when RTCPeerConnection API required for Peer connections is not supported. To resolve this, display in the Web UI to ask clients to switch to the list of supported browser as listed in here. For plugin supported browsers, if the clients does not have the plugin installed, there will be an installation toolbar that will prompt for installation to support the RTCPeerConnection API. -
NO_PATH
{Number}Value
4
The value of the failure code when providedinit()
configuration has errors. -
ADAPTER_NO_LOADED
{Number}
REGIONAL_SERVER
Attribute Type: {JSON}
Deprecation Warning! This constant has been deprecated.The list of available Auth servers in these regions configured in the
Automatic nearest regional server has been implemented on the platform.
init()
method.
Keys:
-
APAC1
{String}Value
"sg"
The value of the option to use the Auth server in Asia Pacific (APAC). -
US1
{String}Value
"us2"
The value of the option to use the Auth server in United States (US).
SERVER_PEER_TYPE
Attribute Type: {JSON}
As there are more features getting implemented, there will be eventually more different types of server Peers.The list of available types of server Peer connections.
Keys:
-
MCU
{String}Value
"mcu"
The value of the server Peer type that is used for MCU connection.
SM_PROTOCOL_VERSION
Attribute Type: {String}
Note that this is used only for SDK developer purposes.The value of the current version of the Signaling socket message protocol.
Current version:0.1.1
SOCKET_ERROR
Attribute Type: {JSON}
The list of joinRoom()
method socket connection failure states.
Keys:
-
CONNECTION_FAILED
{Number}Value
0
The value of the failure state whenjoinRoom()
socket connection failed to establish with the Signaling server at the first attempt. -
RECONNECTION_FAILED
{Number}Value
-1
The value of the failure state whenjoinRoom()
socket connection failed to establish the Signaling server after the first attempt. -
CONNECTION_ABORTED
{Number}Value
-2
The value of the failure state whenjoinRoom()
socket connection will not attempt to reconnect after the failure of the first attempt inCONNECTION_FAILED
as there are no more ports or transports to attempt for reconnection. -
RECONNECTION_ABORTED
{Number}Value
-3
The value of the failure state whenjoinRoom()
socket connection will not attempt to reconnect after the failure of several attempts inRECONNECTION_FAILED
as there are no more ports or transports to attempt for reconnection. -
RECONNECTION_ATTEMPT
{Number}Value
-4
The value of the failure state whenjoinRoom()
socket connection is attempting to reconnect with a new port or transport after the failure of attempts inCONNECTION_FAILED
orRECONNECTED_FAILED
.
SOCKET_FALLBACK
Attribute Type: {JSON}
The list of joinRoom()
method socket connection reconnection states.
Keys:
-
NON_FALLBACK
{String}Value
"nonfallback"
The value of the reconnection state whenjoinRoom()
socket connection is at its initial state without transitioning to any new socket port or transports yet. -
FALLBACK_PORT
{String}Value
"fallbackPortNonSSL"
The value of the reconnection state whenjoinRoom()
socket connection is reconnecting with another new HTTP port using WebSocket transports to attempt to establish connection with Signaling server. -
FALLBACK_PORT_SSL
{String}Value
"fallbackPortSSL"
The value of the reconnection state whenjoinRoom()
socket connection is reconnecting with another new HTTPS port using WebSocket transports to attempt to establish connection with Signaling server. -
LONG_POLLING
{String}Value
"fallbackLongPollingNonSSL"
The value of the reconnection state whenjoinRoom()
socket connection is reconnecting with another new HTTP port using Polling transports to attempt to establish connection with Signaling server. -
LONG_POLLING
{String}Value
"fallbackLongPollingSSL"
The value of the reconnection state whenjoinRoom()
socket connection is reconnecting with another new HTTPS port using Polling transports to attempt to establish connection with Signaling server.
SYSTEM_ACTION
Attribute Type: {JSON}
The list of Signaling server reaction states during joinRoom()
method.
Keys:
-
WARNING
{String}Value
"warning"
The value of the state when Room session is about to end. -
REJECT
{String}Value
"reject"
The value of the state when Room session has failed to start or has ended.
SYSTEM_ACTION_REASON
Attribute Type: {JSON}
The list of Signaling server reaction states reason of action code during
joinRoom()
method.
Keys:
-
CREDENTIALS_EXPIRED
{String}Value
"oldTimeStamp"
The value of the reason code when Room session token has expired. Happens duringjoinRoom()
method request. Results with:REJECT
-
CREDENTIALS_ERROR
{String}Value
"credentialError"
The value of the reason code when Room session token provided is invalid. Happens duringjoinRoom()
method request. -
DUPLICATED_LOGIN
{String}Value
"duplicatedLogin"
The value of the reason code when Room session token has been used already. Happens duringjoinRoom()
method request. Results with:REJECT
-
ROOM_NOT_STARTED
{String}Value
"notStart"
The value of the reason code when Room session has not started. Happens duringjoinRoom()
method request. Results with:REJECT
-
EXPIRED
{String}Value
"expired"
The value of the reason code when Room session has ended already. Happens duringjoinRoom()
method request. Results with:REJECT
-
ROOM_LOCKED
{String}Value
"locked"
The value of the reason code when Room is locked. Happens duringjoinRoom()
method request. Results with:REJECT
-
FAST_MESSAGE
{String}Value
"fastmsg"
The value of the reason code when User is flooding socket messages to the Signaling server that is sent too quickly within less than a second interval. Happens after Room session has started. This can be caused by various methods likesendMessage()
method,setUserData()
method,muteStream()
method,enableAudio()
method,enableVideo()
method,disableAudio()
method anddisableVideo()
method Results with:WARNING
-
ROOM_CLOSING
{String}Value
"toClose"
The value of the reason code when Room session is ending. Happens after Room session has started. This serves as a prerequisite warning beforeROOM_CLOSED
occurs. Results with:WARNING
-
ROOM_CLOSED
{String}Value
"roomclose"
The value of the reason code when Room session has just ended. Happens after Room session has started. Results with:REJECT
-
SERVER_ERROR
{String}Value
"serverError"
The value of the reason code when Room session fails to start due to some technical errors. Happens duringjoinRoom()
method request. Results with:REJECT
-
KEY_ERROR
{String}Value
"keyFailed"
The value of the reason code when Room session fails to start due to some technical error pertaining to App Key initialization. Happens duringjoinRoom()
method request. Results with:REJECT
TURN_TRANSPORT
Attribute Type: {JSON}
Note that configuring the protocol may not necessarily result in the desired network transports protocol
used in the actual TURN network traffic as it depends which protocol the browser selects and connects with.
This simply configures the TURN ICE server urls query option when constructing
the Peer connection. When all protocols are selected, the ICE servers urls are duplicated with all protocols.
The list of TURN network transport protocols options when constructing Peer connections
configured in the init()
method.
Example .urls
inital input: ["turn:server.com?transport=tcp"
,
"turn:server1.com:3478"
, "turn:server.com?transport=udp"
]
Keys:
-
TCP
{String}Value
"tcp"
The value of the option to configure using only TCP network transport protocol. Example.urls
output: ["turn:server.com?transport=tcp"
,"turn:server1.com:3478?transport=tcp"
] -
UDP
{String}Value
"udp"
The value of the option to configure using only UDP network transport protocol. Example.urls
output: ["turn:server.com?transport=udp"
,"turn:server1.com:3478?transport=udp"
] -
ANY
{String}Value
"any"
The value of the option to configure using any network transport protocols configured from the Signaling server. Example.urls
output: ["turn:server.com?transport=tcp"
,"turn:server1.com:3478"
,"turn:server.com?transport=udp"
] -
NONE
{String}Value
"none"
The value of the option to not configure using any network transport protocols. Example.urls
output: ["turn:server.com"
,"turn:server1.com:3478"
] Configuring this does not mean that no protocols will be used, but rather removing?transport=(protocol)
query option in the TURN ICE server.urls
when constructing the Peer connection. -
ALL
{String}Value
"all"
The value of the option to configure using both TCP and UDP network transport protocols. Example.urls
output: ["turn:server.com?transport=tcp"
,"turn:server.com?transport=udp"
,"turn:server1.com:3478?transport=tcp"
,"turn:server1.com:3478?transport=udp"
]
VIDEO_CODEC
Attribute Type: {JSON}
Note that if the video codec is not supported, the SDK will not configure the localThe list of available video codecs to set as the preferred video codec to use to encode sending video data when available encoded video codec for Peer connections configured in the"offer"
or"answer"
session description to prefer the codec.
init()
method.
Keys:
-
AUTO
{String}Value
"auto"
The value of the option to not prefer any video codec but rather use the created local"offer"
/"answer"
session description video codec preference. -
VP8
{String}Value
"VP8"
The value of the option to prefer the VP8 video codec. -
H264
{String}Value
"H264"
The value of the option to prefer the H264 video codec.
VIDEO_RESOLUTION
Attribute Type: {JSON}
Note that currently getUserMedia()
method only configures
the maximum resolution of the Stream due to browser interopability and support.
The list of
video resolutions sets configured in the getUserMedia()
method.
Keys:
-
QQVGA
{JSON}Value
{ width: 160, height: 120 }
The value of the option to configure QQVGA resolution. Aspect ratio:4:3
Note that configurating this resolution may not be supported. -
HQVGA
{JSON}Value
{ width: 240, height: 160 }
The value of the option to configure HQVGA resolution. Aspect ratio:3:2
Note that configurating this resolution may not be supported. -
QVGA
{JSON}Value
{ width: 320, height: 240 }
The value of the option to configure QVGA resolution. Aspect ratio:4:3
-
WQVGA
{JSON}Value
{ width: 384, height: 240 }
The value of the option to configure WQVGA resolution. Aspect ratio:16:10
Note that configurating this resolution may not be supported. -
HVGA
{JSON}Value
{ width: 480, height: 320 }
The value of the option to configure HVGA resolution. Aspect ratio:3:2
Note that configurating this resolution may not be supported. -
VGA
{JSON}Value
{ width: 640, height: 480 }
The value of the option to configure VGA resolution. Aspect ratio:4:3
-
WVGA
{JSON}Value
{ width: 768, height: 480 }
The value of the option to configure WVGA resolution. Aspect ratio:16:10
Note that configurating this resolution may not be supported. -
FWVGA
{JSON}Value
{ width: 854, height: 480 }
The value of the option to configure FWVGA resolution. Aspect ratio:16:9
Note that configurating this resolution may not be supported. -
SVGA
{JSON}Value
{ width: 800, height: 600 }
The value of the option to configure SVGA resolution. Aspect ratio:4:3
Note that configurating this resolution may not be supported. -
DVGA
{JSON}Value
{ width: 960, height: 640 }
The value of the option to configure DVGA resolution. Aspect ratio:3:2
Note that configurating this resolution may not be supported. -
WSVGA
{JSON}Value
{ width: 1024, height: 576 }
The value of the option to configure WSVGA resolution. Aspect ratio:16:9
-
HD
{JSON}Value
{ width: 1280, height: 720 }
The value of the option to configure HD resolution. Aspect ratio:16:9
-
HDPLUS
{JSON}Value
{ width: 1600, height: 900 }
The value of the option to configure HDPLUS resolution. Aspect ratio:16:9
Note that configurating this resolution may not be supported. -
FHD
{JSON}Value
{ width: 1920, height: 1080 }
The value of the option to configure FHD resolution. Aspect ratio:16:9
Note that configurating this resolution may not be supported. -
QHD
{JSON}Value
{ width: 2560, height: 1440 }
The value of the option to configure QHD resolution. Aspect ratio:16:9
Note that configurating this resolution may not be supported. -
WQXGAPLUS
{JSON}Value
{ width: 3200, height: 1800 }
The value of the option to configure WQXGAPLUS resolution. Aspect ratio:16:9
Note that configurating this resolution may not be supported. -
UHD
{JSON}Value
{ width: 3840, height: 2160 }
The value of the option to configure UHD resolution. Aspect ratio:16:9
Note that configurating this resolution may not be supported. -
UHDPLUS
{JSON}Value
{ width: 5120, height: 2880 }
The value of the option to configure UHDPLUS resolution. Aspect ratio:16:9
Note that configurating this resolution may not be supported. -
FUHD
{JSON}Value
{ width: 7680, height: 4320 }
The value of the option to configure FUHD resolution. Aspect ratio:16:9
Note that configurating this resolution may not be supported. -
QUHD
{JSON}Value
{ width: 15360, height: 8640 }
The value of the option to configure QUHD resolution. Aspect ratio:16:9
Note that configurating this resolution may not be supported.
candidateGenerationState
Event triggered when a Peer connection ICE gathering state has changed.
Event Payload:
-
state
{String}The current Peer connection ICE gathering state. [Rel: Skylink.CANDIDATE_GENERATION_STATE]
-
peerId
{String}The Peer ID.
channelClose
Event triggered when socket connection to Signaling server has closed.
channelError
This may be caused by Javascript errors in the event listener when subscribing to events.Event triggered when socket connection encountered exception.
It may be resolved by checking for code errors in your Web App in the event subscribing listener.
skylinkDemo.on("eventName", function () { // Errors here });
Event Payload:
-
error
{Error | String}The error object.
channelMessage
Note that this is used only for SDK developer purposes.Event triggered when receiving socket message from the Signaling server.
Event Payload:
-
message
{JSON}The socket message object.
channelOpen
Event triggered when socket connection to Signaling server has opened.
channelRetry
Event triggered when attempting to establish socket connection to Signaling server when failed.
Event Payload:
-
fallbackType
{String}The current fallback state. [Rel: Skylink.SOCKET_FALLBACK]
-
currentAttempt
{Number}The current reconnection attempt.
dataChannelState
Event triggered when a Datachannel connection state has changed.
Event Payload:
-
state
{String}The current Datachannel connection state. [Rel: Skylink.DATA_CHANNEL_STATE]
-
peerId
{String}The Peer ID.
-
error
{Error} OptionalThe error object. Defined only when
state
payload isERROR
. -
channelName
{String}The DataChannel ID.
-
channelType
{String}The DataChannel type. [Rel: Skylink.DATA_CHANNEL_TYPE]
dataTransferState
Event triggered when a data transfer state has changed.
Event Payload:
-
state
{String}The current data transfer state. [Rel: Skylink.DATA_TRANSFER_STATE]
-
transferId
{String}The data transfer ID.
-
peerId
{String}The Peer ID.
-
transferInfo
{JSON}The data transfer information.
-
data
{Blob | String} OptionalThe data object. Defined only when
state
payload isUPLOAD_STARTED
orDOWNLOAD_COMPLETED
. -
name
{String}The data transfer name.
-
size
{Number}The data transfer data object original size.
-
dataType
{String}The data transfer session type. [Rel: Skylink.DATA_TRANSFER_SESSION_TYPE]
-
timeout
{Number}The flag if message is targeted or not, basing off the
targetPeerId
parameter being defined insendURLData()
method orsendBlobData()
method. -
isPrivate
{Boolean}The flag if data transfer
-
-
error
{JSON} OptionalThe error result. Defined only when
state
payload isERROR
orCANCEL
.-
message
{Error | String}The error object.
-
transferType
{String}The data transfer direction from where the error occurred. [Rel: Skylink.DATA_TRANSFER_TYPE]
-
getConnectionStatusStateChange
Event triggered when getConnectionStatus()
method
retrieval state changes.
Event Payload:
-
state
{Number}The current
getConnectionStatus()
retrieval state. [Rel: Skylink.GET_CONNECTION_STATUS_STATE] -
peerId
{String}The Peer ID.
-
stats
{JSON} OptionalThe Peer connection current stats. Defined only when
state
payload isRETRIEVE_SUCCESS
.-
raw
{JSON}The Peer connection raw stats before parsing.
-
audio
{JSON}The Peer connection audio streaming stats.
-
sending
{JSON}The Peer connection sending audio streaming stats. -
sending.bytes
{Number}The Peer connection sending audio streaming bytes. -
sending.packets
{Number}The Peer connection sending audio streaming packets. -
sending.packetsLost
{Number}The Peer connection sending audio streaming packets lost. -
sending.ssrc
{Number}The Peer connection sending audio streaming RTP packets SSRC. -
sending.rtt
{Number}The Peer connection sending audio streaming RTT (Round-trip delay time). Defined as0
if it's not present in original raw stats before parsing. -
receiving
{JSON}The Peer connection receiving audio streaming stats. -
receiving.bytes
{Number}The Peer connection sending audio streaming bytes. -
receiving.packets
{Number}The Peer connection receiving audio streaming packets. -
receiving.packetsLost
{Number}The Peer connection receiving audio streaming packets lost. -
receiving.ssrc
{Number}The Peer connection receiving audio streaming RTP packets SSRC.
-
-
video
{JSON}The Peer connection video streaming stats.
-
sending
{JSON}The Peer connection sending video streaming stats. -
sending.bytes
{Number}The Peer connection sending video streaming bytes. -
sending.packets
{Number}The Peer connection sending video streaming packets. -
sending.packetsLost
{Number}The Peer connection sending video streaming packets lost. -
sending.ssrc
{JSON}The Peer connection sending video streaming RTP packets SSRC. -
sending.rtt
{Number}The Peer connection sending video streaming RTT (Round-trip delay time). Defined as0
if it's not present in original raw stats before parsing. -
receiving
{JSON}The Peer connection receiving video streaming stats. -
receiving.bytes
{Number}The Peer connection receiving video streaming bytes. -
receiving.packets
{Number}The Peer connection receiving video streaming packets. -
receiving.packetsLost
{Number}The Peer connection receiving video streaming packets lost. -
receiving.ssrc
{Number}The Peer connection receiving video streaming RTP packets SSRC.
-
-
selectedCandidate
{JSON}The Peer connection selected ICE candidate pair stats.
-
local
{JSON}The Peer connection selected local ICE candidate. -
local.ipAddress
{String}The Peer connection selected local ICE candidate IP address. -
local.portNumber
{Number}The Peer connection selected local ICE candidate port number. -
local.transport
{String}The Peer connection selected local ICE candidate IP transport type. -
local.candidateType
{String}The Peer connection selected local ICE candidate type. -
remote
{JSON}The Peer connection selected remote ICE candidate. -
remote.ipAddress
{String}The Peer connection selected remote ICE candidate IP address. -
remote.portNumber
{Number}The Peer connection selected remote ICE candidate port number. -
remote.transport
{String}The Peer connection selected remote ICE candidate IP transport type. -
remote.candidateType
{String}The Peer connection selected remote ICE candidate type.
-
-
connection
{JSON}The Peer connection object stats.
-
iceConnectionState
{String}The Peer connection ICE connection state. -
iceGatheringState
{String}The Peer connection ICE gathering state. -
signalingState
{String}The Peer connection signaling state. -
localDescription
{JSON}The Peer connection local session description. -
localDescription.type
{String}The Peer connection local session description type. -
localDescription.sdp
{String}The Peer connection local session description SDP. -
remoteDescription
{JSON}The Peer connection remote session description. -
remoteDescription.type
{String}The Peer connection remote session description type. -
remoteDescription.sdp
{String}The Peer connection remote session description sdp. -
candidates
{JSON}The Peer connection list of ICE candidates sent or received. -
candidates.sending
{JSON}The Peer connection list of local ICE candidates sent. -
candidates.sending.host
{Array}The Peer connection list of local"host"
ICE candidates sent. -
candidates.sending.srflx
{Array}The Peer connection list of local"srflx"
ICE candidates sent. -
candidates.sending.relay
{Array}The Peer connection list of local"relay"
candidates sent. -
candidates.receiving
{JSON}The Peer connection list of remote ICE candidates received. -
candidates.receiving.host
{Array}The Peer connection list of remote"host"
ICE candidates received. -
candidates.receiving.srflx
{Array}The Peer connection list of remote"srflx"
ICE candidates received. -
candidates.receiving.relay
{Array}The Peer connection list of remote"relay"
ICE candidates received.
-
-
-
error
{Error}The error object received. Defined only when
state
payload isRETRIEVE_ERROR
.
getPeersStateChange
Event triggered when getPeers()
method retrieval state changes.
Event Payload:
-
state
{String}The current
getPeers()
retrieval state. [Rel: Skylink.GET_PEERS_STATE] -
privilegedPeerId
{String}The User's privileged Peer ID.
-
peerList
{JSON}The list of Peer IDs Rooms within the same App space.
-
#room
{Array}The list of Peer IDs associated with the Room defined in
#room
property.
-
handshakeProgress
Event triggered when a Peer connection establishment state has changed.
Event Payload:
-
state
{String}The current Peer connection establishment state. [Rel: Skylink.HANDSHAKE_PROGRESS]
-
peerId
{String}The Peer ID.
-
error
{Error | String} OptionalThe error object. Defined only when
state
isERROR
.
iceConnectionState
Event triggered when a Peer connection ICE connection state has changed.
Event Payload:
-
state
{String}The current Peer connection ICE connection state. [Rel: Skylink.ICE_CONNECTION_STATE]
-
peerId
{String}The Peer ID.
incomingData
Event triggered when receiving completed data transfer from Peer.
Event Payload:
-
data
{Blob | String}The data.
-
transferId
{String}The data transfer ID.
-
peerId
{String}The Peer ID.
-
transferInfo
{JSON}The data transfer information. Object signature matches the
transferInfo
parameter payload received in thedataTransferState
event. -
isSelf
{Boolean}The flag if Peer is User.
incomingDataRequest
Event triggered when receiving upload data transfer from Peer.
Event Payload:
-
transferId
{String}The transfer ID.
-
peerId
{String}The Peer ID.
-
transferInfo
{String}The data transfer information. Object signature matches the
transferInfo
parameter payload received in thedataTransferState
event. -
isSelf
{Boolean}The flag if Peer is User.
incomingMessage
Event triggered when receiving message from Peer.
Event Payload:
-
message
{JSON}The message result.
-
content
{JSON | String}The message object.
-
senderPeerId
{String}The sender Peer ID.
-
targetPeerId
{String | Array} OptionalThe value of the
targetPeerId
defined insendP2PMessage()
method orsendMessage()
method. -
isPrivate
{Boolean}The flag if message is targeted or not, basing off the
targetPeerId
parameter being defined insendP2PMessage()
method orsendMessage()
method. -
isDataChannel
{Boolean}The flag if message is sent from
sendP2PMessage()
method.
-
-
peerInfo
{JSON}The Peer session information. Object signature matches the
peerInfo
parameter payload received in thepeerJoined
event. -
isSelf
{Boolean}The flag if Peer is User.
incomingStream
Event triggered when receiving Peer Stream.
Event Payload:
-
peerId
{String}The Peer ID.
-
stream
{MediaStream}The Stream object. To attach it to an element:
attachMediaStream(videoElement, stream);
. -
isSelf
{Boolean}The flag if Peer is User.
-
peerInfo
{JSON}The Peer session information. Object signature matches the
peerInfo
parameter payload received in thepeerJoined
event.
introduceStateChange
Event triggered when introducePeer()
method
introduction request state changes.
Event Payload:
-
state
{String}The current
introducePeer()
introduction request state. [Rel: Skylink.INTRODUCE_STATE] -
privilegedPeerId
{String}The User's privileged Peer ID.
-
sendingPeerId
{String}The Peer ID to be connected with
receivingPeerId
. -
receivingPeerId
{String}The Peer ID to be connected with
sendingPeerId
. -
reason
{String} OptionalThe error object. Defined only when
state
payload isERROR
.
mediaAccessError
Event triggered when retrieval of Stream failed.
Event Payload:
-
error
{Error | String}The error object.
-
isScreensharing
{Boolean}The flag if event occurred during
shareScreen()
method and notgetUserMedia()
method. -
isAudioFallbackError
{Boolean}The flag if event occurred during retrieval of audio tracks only when
getUserMedia()
method had failed to retrieve both audio and video tracks.
mediaAccessFallback
Event triggered when Stream retrieval fallback state has changed.
Event Payload:
-
error
{JSON}The error result.
-
error
{Error | String}The error object.
-
diff
{JSON} OptionalThe list of excepted but received audio and video tracks in Stream. Defined only when
state
payload isFALLBACKED
.-
video
{JSON}The expected and received video tracks. -
video.expected
{Number}The expected video tracks. -
video.received
{Number}The received video tracks. -
audio
{JSON}The expected and received audio tracks. -
audio.expected
{Number}The expected audio tracks. -
audio.received
{Number}The received audio tracks.
-
-
-
state
{Number}The fallback state. [Rel: Skylink.MEDIA_ACCESS_FALLBACK_STATE]
-
isScreensharing
{Boolean}The flag if event occurred during
shareScreen()
method and notgetUserMedia()
method. -
isAudioFallback
{Boolean}The flag if event occurred during retrieval of audio tracks only when
getUserMedia()
method had failed to retrieve both audio and video tracks.
mediaAccessRequired
Event triggered when retrieval of Stream is required to complete
joinRoom()
method request.
mediaAccessStopped
Event triggered when Stream has stopped streaming.
Event Payload:
-
isScreensharing
{Boolean}The flag if event occurred during
shareScreen()
method and notgetUserMedia()
method.
mediaAccessSuccess
Event triggered when retrieval of Stream is successful.
Event Payload:
-
stream
{MediaStream}The Stream object. To attach it to an element:
attachMediaStream(videoElement, stream);
. -
isScreensharing
{Boolean}The flag if event occurred during
shareScreen()
method and notgetUserMedia()
method.
peerConnectionState
Event triggered when a Peer connection session description exchanging state has changed.
Event Payload:
-
state
{String}The current Peer connection session description exchanging state. [Rel: Skylink.PEER_CONNECTION_STATE]
-
peerId
{String}The Peer ID.
peerJoined
Event triggered when a Peer joins the room.
Event Payload:
-
peerId
{String}The Peer ID.
-
peerInfo
{JSON}The Peer session information.
-
userData
{JSON | String}The Peer current custom data.
-
settings
{JSON}The Peer sending Stream settings.
-
audio
{Boolean | JSON}The Peer Stream audio settings. When defined asfalse
, it means there is no audio being sent from Peer. -
audio.stereo
{Boolean} OptionalThe flag if stereo band is configured when encoding audio codec isOPUS
for receiving audio data. -
video
{Boolean | JSON}The Peer Stream video settings. When defined asfalse
, it means there is no video being sent from Peer. -
video.resolution
{JSON}The Peer Stream video resolution. [Rel: Skylink.VIDEO_RESOLUTION] -
video.resolution.width
{Number} OptionalThe Peer Stream video resolution width. -
video.resolution.height
{Number} OptionalThe Peer Stream video resolution height. -
video.frameRate
{Number} OptionalThe Peer Stream video frameRate per second (fps). -
video.screenshare
{Boolean} OptionalThe flag if Peer Stream is a screensharing Stream. -
bandwidth
{JSON} OptionalThe maximum streaming bandwidth sent from Peer. -
bandwidth.audio
{Number} OptionalThe maximum audio streaming bandwidth sent from Peer. -
bandwidth.video
{Number} OptionalThe maximum video streaming bandwidth sent from Peer. -
bandwidth.data
{Number} OptionalThe maximum data streaming bandwidth sent from Peer.
-
-
mediaStatus
{JSON}The Peer Stream muted settings.
-
audioMuted
{Boolean}The flag if Peer Stream audio tracks is muted or not. If PeerpeerInfo.settings.audio
is false, this will be defined astrue
. -
videoMuted
{Boolean}The flag if Peer Stream audio tracks is muted or not. If PeerpeerInfo.settings.video
is false, this will be defined astrue
.
-
-
agent
{JSON}The Peer agent information.
-
name
{String}The Peer agent name. Data may be accessing browser or non-Web SDK name. -
version
{Number}The Peer agent version. Data may be accessing browser or non-Web SDK version. -
os
{String} OptionalThe Peer platform name. Data may be accessing OS platform version from Web SDK.
-
-
room
{String}The Room Peer is from.
-
-
isSelf
{Boolean}The flag if Peer is User.
peerLeft
Event triggered when a Peer leaves the room.
Event Payload:
-
peerId
{String}The Peer ID.
-
peerInfo
{JSON}The Peer session information. Object signature matches the
peerInfo
parameter payload received in thepeerJoined
event. -
isSelf
{Boolean}The flag if Peer is User.
peerRestart
Event triggered when a Peer connection has been refreshed.
Event Payload:
-
peerId
{String}The Peer ID.
-
peerInfo
{JSON}The Peer session information. Object signature matches the
peerInfo
parameter payload received in thepeerJoined
event. -
isSelfInitiateRestart
{Boolean}The flag if User is initiating the Peer connection refresh.
peerUpdated
Event triggered when a Peer session information has been updated.
Event Payload:
-
peerId
{String}The Peer ID.
-
peerInfo
{JSON}The Peer session information. Object signature matches the
peerInfo
parameter payload received in thepeerJoined
event. -
isSelf
{Boolean}The flag if Peer is User.
readyStateChange
Event triggered when init()
method ready state changes.
Event Payload:
-
readyState
{String}The current
init()
ready state. [Rel: Skylink.READY_STATE_CHANGE] -
error
{JSON} OptionalThe error result. Defined only when
state
isERROR
.-
status
{Number}The HTTP status code when failed.
-
errorCode
{Number}The ready state change failure code. [Rel: Skylink.READY_STATE_CHANGE_ERROR]
-
content
{Error}The error object.
-
-
room
{String}The Room to The Room to retrieve session token for.
roomLock
Event triggered when Room locked status has changed.
Event Payload:
-
isLocked
{Boolean}The flag if Room is locked.
-
peerInfo
{JSON}The Peer session information. Object signature matches the
peerInfo
parameter payload received in thepeerJoined
event. -
isSelf
{Boolean}The flag if User changed the Room locked status.
serverPeerJoined
Event triggered when a server Peer joins the room.
Event Payload:
-
peerId
{String}The Peer ID.
-
serverPeerType
{String}The server Peer type [Rel: Skylink.SERVER_PEER_TYPE]
serverPeerLeft
Event triggered when a server Peer leaves the room.
Event Payload:
-
peerId
{String}The Peer ID.
-
serverPeerType
{String}The server Peer type [Rel: Skylink.SERVER_PEER_TYPE]
serverPeerRestart
Event triggered when a server Peer connection has been refreshed.
Event Payload:
-
peerId
{String}The Peer ID.
-
serverPeerType
{String}The server Peer type [Rel: Skylink.SERVER_PEER_TYPE]
sessionDisconnect
Event triggered when Room session has ended abruptly due to network disconnections.
Event Payload:
-
peerId
{String}The User's Room session Peer ID.
-
peerInfo
{JSON}The User's Room session information. Object signature matches the
peerInfo
parameter payload received in thepeerJoined
event.
socketError
Event triggered when attempt to establish socket connection to Signaling server has failed.
Event Payload:
-
errorCode
{String}The socket connection error code. [Rel: Skylink.SOCKET_ERROR]
-
error
{Error | String | Number}The error object.
-
type
{String}The fallback state of the socket connection attempt. [Rel: Skylink.SOCKET_FALLBACK]
streamEnded
Event triggered when Peer Stream streaming has stopped.
Event Payload:
-
peerId
{String}The Peer ID.
-
peerInfo
{JSON}The Peer session information. Object signature matches the
peerInfo
parameter payload received in thepeerJoined
event. -
isSelf
{Boolean}The flag if Peer is User.
-
isScreensharing
{Boolean}The flag if Peer Stream is a screensharing Stream.
streamMuted
Event triggered when Peer Stream audio or video tracks has been muted.
Event Payload:
-
peerId
{String}The Peer ID.
-
peerInfo
{JSON}The Peer session information. Object signature matches the
peerInfo
parameter payload received in thepeerJoined
event. -
isSelf
{Boolean}The flag if Peer is User.
-
isScreensharing
{Boolean}The flag if Peer Stream is a screensharing Stream.
systemAction
Event triggered when Signaling server reaction state has changed.
Event Payload:
-
action
{String}The current Signaling server reaction state. [Rel: Skylink.SYSTEM_ACTION]
-
message
{String}The message.
-
reason
{String}The Signaling server reaction state reason of action code. [Rel: Skylink.SYSTEM_ACTION_REASON]