Skylink Class   Defined in: source/template/header.js:49      Available since 0.5.0


Prerequisites on using Skylink

Before using any Skylink functionalities, you will need to authenticate your App Key using the init() 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:

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 Temasys Web SDK codebase, see the contributing README.

See License (Apache 2.0)




  Skylink ()   _ACKProtocolHandler   _addIceCandidate   _addIceCandidateFromQueue   _addIceCandidateToQueue   _addLocalMediaStreams   _addPeer   _addSDPMediaStreamTrackIDs   _answerHandler   _approachEventHandler   _base64ToBlob   _blobToArrayBuffer   _blobToBase64   _byeHandler   _CANCELProtocolHandler   _candidateHandler   _chunkBlobData   _chunkDataURL   _clearAllStoredLogsFn   _closeChannel   _closeDataChannel   _condition   _createDataChannel   _createPeerConnection   _createSocket   _DATAProtocolHandler   _doAnswer   _doOffer   _endOfCandidatesHandler   _enterHandler   _ERRORProtocolHandler   _getCodecsSupport   _getDataChannelBuffer   _getSDPEdgeVideoSupports   _getSDPFingerprint   _getSDPSelectedCodec   _getStoredLogsFn   _getTransferData   _getTransferInfo   _getUserInfo   _handleDataTransferTimeoutForPeer   _handleEndedStreams   _handleSDPConnectionSettings   _initSelectedRoom   _inRoomHandler   _introduceErrorEventHandler   _isLowerThanVersion   _loadInfo   _logFn   _MESSAGEProtocolHandler   _muteAudioEventHandler   _muteStreams   _muteVideoEventHandler   _offerHandler   _onIceCandidate   _onRemoteStreamAdded   _onStreamAccessError   _onStreamAccessSuccess   _openChannel   _parseConnectionStats   _parseInfo   _parseStreamSettings   _peerListEventHandler   _printAllStoredLogsFn   _privateMessageHandler   _processDataChannelData   _processSigMessage   _publicMessageHandler   _recordingEventHandler beta   _redirectHandler   _refreshPeerConnection   _removePeer   _removeSDPCodecs   _removeSDPFilteredCandidates   _removeSDPFirefoxH264Pref   _removeSDPREMBPackets   _removeSDPUnknownAptRtx   _requestServerInfo   _restartHandler   _restartMCUConnection   _restartPeerConnection   _retrieveStats   _roomLockEventHandler   _sendChannelMessage   _sendMessageToDataChannel   _setIceServers   _setLocalAndSendMessage   _setSDPBitrate   _setSDPCodec   _setSDPCodecParams   _signalingEndOfCandidates   _startDataTransfer   _startDataTransferToPeer   _stopStreams   _streamEventHandler   _throttle   _trigger   _updateUserEventHandler   _wait   _waitForOpenChannel   _welcomeHandler   _WRQProtocolHandler   acceptDataTransfer   cancelDataTransfer   disableAudio deprecated   disableVideo deprecated   enableAudio deprecated   enableVideo deprecated   generateUUID   getConnectionStatus   getCurrentDataStreamsSession   getCurrentDataTransfers   getPeerCustomSettings   getPeerInfo   getPeers   getPeersDatachannels   getPeersInRoom   getPeersStream   getRecordings beta   getUserData   getUserMedia   init   introducePeer   joinRoom   leaveRoom   lockRoom   muteStream   off   on   once   refreshConnection   sendBlobData   sendMessage   sendP2PMessage   sendStream   sendURLData   setDebugMode   setLogLevel   setUserData   shareScreen   startRecording beta   startStreamingData beta   stopRecording beta   stopScreen   stopStream   stopStreamingData beta   streamData beta   unlockRoom   SkylinkLogs   SkylinkLogs.clearAllLogs   SkylinkLogs.getLogs   SkylinkLogs.printAllLogs   _appKey   _appKeyOwner   _audioFallback   _autoIntroduce   _bandwidthAdjuster   _BINARY_FILE_SIZE   _binaryChunkType   _channelOpen   _CHUNK_DATAURL_SIZE   _CHUNK_FILE_SIZE   _currentCodecSupport   _currentRecordingId beta   _dataChannels   _dataStreams   _dataTransfers   _DC_PROTOCOL_TYPE   _defaultRoom   _disableComfortNoiseCodec   _disableREMB   _disableVideoFecCodecs   _enableDataChannel   _enableDebugMode   _enableDebugStack   _enableDebugTrace   _enableIceRestart   _enableIceTrickle   _enableSTUN   _enableTURN   _EVENTS   _filterCandidatesType   _forceSSL   _forceTURN   _forceTURNSSL   _gatheredCandidates   _groupMessageList   _hasMCU   _iceServer   _inRoom   _isUsingPlugin   _key   _LOG_KEY   _LOG_LEVELS   _logLevel   _mcuUseRenegoRestart   _MOZ_BINARY_FILE_SIZE   _MOZ_CHUNK_FILE_SIZE   _onceEvents   _parentId   _path   _peerBandwidth   _peerCandidatesQueue   _peerConnectionConfig   _peerConnectionConfig   _peerConnections   _peerConnStatus   _peerCustomConfigs   _peerEndOfCandidatesCounter   _peerInformations   _peerList   _peerMessagesStamps   _peerPriorityWeight   _peerStats   _priorityWeightScheme   _publishOnly   _readyState   _recordings beta   _recordingStartInterval beta   _retryCounters   _room   _roomCredentials   _roomDuration   _roomLocked   _roomServer   _roomStart   _sdpSessions   _sdpSettings   _selectedAudioCodec   _selectedRoom   _selectedVideoCodec   _SIG_MESSAGE_TYPE   _signalingServer   _signalingServerPort   _signalingServerProtocol   _socket   _socketMessageQueue   _socketMessageTimeout   _socketPorts   _socketServer   _socketSession   _socketTimeout   _socketUseXDR   _storedLogs   _streams   _streamsBandwidthSettings   _streamsDefaultSettings   _streamsMutedSettings   _streamsSession   _streamsStoppedCbs   _throttlingShouldThrowError   _throttlingTimeouts   _timestamp   _TURNTransport   _usePublicSTUN   _user   _userData   _voiceActivityDetection   AUDIO_CODEC   BUNDLE_POLICY   CANDIDATE_GENERATION_STATE   CANDIDATE_PROCESSING_STATE   DATA_CHANNEL_MESSAGE_ERROR   DATA_CHANNEL_STATE   DATA_CHANNEL_TYPE   DATA_STREAM_STATE   DATA_TRANSFER_DATA_TYPE   DATA_TRANSFER_SESSION_TYPE   DATA_TRANSFER_STATE   DATA_TRANSFER_TYPE   DT_PROTOCOL_VERSION   GET_CONNECTION_STATUS_STATE   GET_PEERS_STATE   HANDSHAKE_PROGRESS   ICE_CONNECTION_STATE   INTRODUCE_STATE   isPrivileged   log   LOG_LEVEL   MEDIA_ACCESS_FALLBACK_STATE   PEER_CERTIFICATE   PEER_CONNECTION_STATE   PRIORITY_WEIGHT_SCHEME   READY_STATE_CHANGE   READY_STATE_CHANGE_ERROR   RECORDING_STATE beta   REGIONAL_SERVER   RTCP_MUX_POLICY   SERVER_PEER_TYPE   SM_PROTOCOL_VERSION   SOCKET_ERROR   SOCKET_FALLBACK   SYSTEM_ACTION   SYSTEM_ACTION_REASON   TURN_TRANSPORT   VERSION   VIDEO_CODEC   VIDEO_RESOLUTION   candidateGenerationState   candidateProcessingState   candidatesGathered   channelClose   channelError   channelMessage   channelOpen   channelRetry   dataChannelState   dataStreamState beta   dataTransferState   getConnectionStatusStateChange   getPeersStateChange   handshakeProgress   iceConnectionState   incomingData   incomingDataRequest   incomingDataStream beta   incomingDataStreamStarted beta   incomingDataStreamStopped beta   incomingMessage   incomingStream   introduceStateChange   localMediaMuted   mediaAccessError   mediaAccessFallback   mediaAccessRequired   mediaAccessStopped   mediaAccessSuccess   peerConnectionState   peerJoined   peerLeft   peerRestart   peerUpdated   readyStateChange   recordingState beta   roomLock   serverPeerJoined   serverPeerLeft   serverPeerRestart   sessionDisconnect   socketError   streamEnded   streamMuted   systemAction
  Scroll to top

_ACKProtocolHandler

()
private
  Defined in: source/data-transfer.js:2748      Available since 0.5.2

Function that handles the "ACK" data transfer protocol.

Events Sequence:

There is no event sequence for this method.

_addIceCandidate

()
private
  Defined in: source/ice-candidate.js:248      Available since 0.6.16

Function that adds the ICE candidate to Peer connection.

Events Sequence:

There is no event sequence for this method.

_addIceCandidateFromQueue

()
private
  Defined in: source/ice-candidate.js:215      Available since 0.5.2

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

()
private
  Defined in: source/ice-candidate.js:191      Available since 0.5.2

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

()
private
  Defined in: source/stream-media.js:1958      Available since 0.5.2

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

()
private
  Defined in: source/peer-connection.js:1506      Available since 0.5.4

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.

_addSDPMediaStreamTrackIDs

()
private
  Defined in: source/stream-sdp.js:405      Available since 0.6.16

Function that modifies the session description to append the MediaStream and MediaStreamTrack IDs that seems to be missing from Firefox answer session description to Chrome connection causing freezes in re-negotiation.

Events Sequence:

There is no event sequence for this method.

_answerHandler

()
private
  Defined in: source/socket-message.js:1689      Available since 0.5.1

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

()
private
  Defined in: source/socket-message.js:578      Available since 0.6.1

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.

_base64ToBlob

()
private
  Defined in: source/data-process.js:91      Available since 0.1.0

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.

_blobToArrayBuffer

()
private
  Defined in: source/data-process.js:128      Available since 0.1.0

Function that converts a Blob object into ArrayBuffer object.

Events Sequence:

There is no event sequence for this method.

_blobToBase64

()
private
  Defined in: source/data-process.js:111      Available since 0.1.0

Function that converts a Blob object into Base64 string.

Events Sequence:

There is no event sequence for this method.

_byeHandler

()
private
  Defined in: source/socket-message.js:792      Available since 0.1.0

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

()
private
  Defined in: source/data-transfer.js:2922      Available since 0.5.0

Function that handles the "CANCEL" data transfer protocol.

Events Sequence:

There is no event sequence for this method.

_candidateHandler

()
private
  Defined in: source/socket-message.js:1594      Available since 0.5.1

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

()
private
  Defined in: source/data-process.js:149      Available since 0.5.2

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

()
private
  Defined in: source/data-process.js:181      Available since 0.6.1

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

()
private scoped
  Defined in: source/skylink-debug.js:140      Available since 0.5.5

Function that clears the stored logs.

Events Sequence:

There is no event sequence for this method.

_closeChannel

()
private
  Defined in: source/socket-channel.js:488      Available since 0.5.5

Function that stops the socket connection to the Signaling.

Events Sequence:

There is no event sequence for this method.

_closeDataChannel

()
private
  Defined in: source/data-channel.js:384      Available since 0.1.0

Function that stops the Datachannel connection and removes object references.

Events Sequence:

There is no event sequence for this method.

_condition

()
private
  Defined in: source/skylink-events.js:1494      Available since 0.5.5

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

()
private
  Defined in: source/data-channel.js:93      Available since 0.5.5

Function that starts a Datachannel connection with Peer.

Events Sequence:

There is no event sequence for this method.

_createPeerConnection

()
private
  Defined in: source/peer-connection.js:1800      Available since 0.5.1

Function that creates the Peer connection.

Events Sequence:

There is no event sequence for this method.

_createSocket

()
private
  Defined in: source/socket-channel.js:269      Available since 0.5.10

Function that creates and opens a socket connection to the Signaling.

Events Sequence:

There is no event sequence for this method.

_DATAProtocolHandler

()
private
  Defined in: source/data-transfer.js:2971      Available since 0.5.5

Function that handles the data transfer chunk received.

Events Sequence:

There is no event sequence for this method.

_doAnswer

()
private
  Defined in: source/peer-handshake.js:126      Available since 0.1.0

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

()
private
  Defined in: source/peer-handshake.js:35      Available since 0.5.2

Function that creates the Peer connection offer session description.

Events Sequence:

There is no event sequence for this method.

_endOfCandidatesHandler

()
private
  Defined in: source/socket-message.js:540      Available since 0.6.1

Function that handles the "endOfCandidates" socket message received. See confluence docs for the "endOfCandidates" expected properties to be received based on the current SM_PROTOCOL_VERSION.

Events Sequence:

There is no event sequence for this method.

_enterHandler

()
private
  Defined in: source/socket-message.js:1027      Available since 0.5.1

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

()
private
  Defined in: source/data-transfer.js:2871      Available since 0.5.2

Function that handles the "ERROR" data transfer protocol.

Events Sequence:

There is no event sequence for this method.

_getCodecsSupport

()
private
  Defined in: source/stream-sdp.js:795      Available since 0.6.18

Function that retrieves the current list of support codecs.

Events Sequence:

There is no event sequence for this method.

_getDataChannelBuffer

()
private
  Defined in: source/data-channel.js:275      Available since 0.6.18

Function that returns the Datachannel buffer threshold and amount.

Events Sequence:

There is no event sequence for this method.

Returns:

{JSON}

The buffered amount information.


_getSDPEdgeVideoSupports

()
private
  Defined in: source/stream-sdp.js:1133      Available since 0.6.18

Function that gets edge browser video supports.

Events Sequence:

There is no event sequence for this method.

_getSDPFingerprint

()
private
  Defined in: source/stream-sdp.js:1095      Available since 0.6.18

Function that parses and retrieves the session description fingerprint.

Events Sequence:

There is no event sequence for this method.

_getSDPSelectedCodec

()
private
  Defined in: source/stream-sdp.js:696      Available since 0.6.16

Function that retrieves the session description selected codec.

Events Sequence:

There is no event sequence for this method.

_getStoredLogsFn

()
private scoped
  Defined in: source/skylink-debug.js:119      Available since 0.5.5

Function that gets the stored logs.

Events Sequence:

There is no event sequence for this method.

_getTransferData

()
private
  Defined in: source/data-transfer.js:2311      Available since 0.6.16

Function that returns the compiled data transfer data.

Events Sequence:

There is no event sequence for this method.

_getTransferInfo

()
private
  Defined in: source/data-transfer.js:2229      Available since 0.6.16

Function that returns the data transfer session.

Events Sequence:

There is no event sequence for this method.

_getUserInfo

()
private
  Defined in: source/peer-data.js:662      Available since 0.4.0

Function that returns the User session information to be sent to Peers.

Events Sequence:

There is no event sequence for this method.

_handleDataTransferTimeoutForPeer

()
private
  Defined in: source/data-transfer.js:2338      Available since 0.6.16

Function that handles the data transfers sessions timeouts.

Events Sequence:

There is no event sequence for this method.

_handleEndedStreams

()
private
  Defined in: source/stream-media.js:2056      Available since 0.6.16

Function that handles ended streams.

Events Sequence:

There is no event sequence for this method.

_handleSDPConnectionSettings

()
private
  Defined in: source/stream-sdp.js:888      Available since 0.6.16

Function that modifies the session description to handle the connection settings. This is experimental and never recommended to end-users.

Events Sequence:

There is no event sequence for this method.

_initSelectedRoom

()
private
  Defined in: source/room-init.js:1330      Available since 0.5.5

Starts initialising for Room credentials for room name provided in joinRoom() method.

Events Sequence:

There is no event sequence for this method.

_inRoomHandler

()
private
  Defined in: source/socket-message.js:960      Available since 0.1.0

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

()
private
  Defined in: source/socket-message.js:562      Available since 0.6.1

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.

_isLowerThanVersion

()
private
  Defined in: source/socket-message.js:1807      Available since 0.6.16

Function that compares the SM / DT protocol versions to see if it in the version.

Events Sequence:

There is no event sequence for this method.

_loadInfo

()
private
  Defined in: source/room-init.js:1199      Available since 0.5.2

Loads and checks the dependencies if they are loaded correctly.

Events Sequence:

There is no event sequence for this method.

_logFn

()
private scoped
  Defined in: source/skylink-debug.js:248      Available since 0.5.5

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

()
private
  Defined in: source/data-transfer.js:2850      Available since 0.5.2

Function that handles the "MESSAGE" data transfer protocol.

Events Sequence:

There is no event sequence for this method.

_muteAudioEventHandler

()
private
  Defined in: source/socket-message.js:700      Available since 0.2.0

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.

_muteStreams

()
private
  Defined in: source/stream-media.js:1439      Available since 0.6.15

Function that handles the muting of Stream audio and video tracks.

Events Sequence:

There is no event sequence for this method.

_muteVideoEventHandler

()
private
  Defined in: source/socket-message.js:730      Available since 0.2.0

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

()
private
  Defined in: source/socket-message.js:1489      Available since 0.5.1

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.

_onIceCandidate

()
private
  Defined in: source/ice-candidate.js:64      Available since 0.1.0

Function that handles the Peer connection gathered ICE candidate to be sent.

Events Sequence:

There is no event sequence for this method.

_onRemoteStreamAdded

()
private
  Defined in: source/stream-media.js:1924      Available since 0.5.2

Function that handles the RTCPeerConnection.onaddstream remote MediaStream received.

Events Sequence:

There is no event sequence for this method.

_onStreamAccessError

()
private
  Defined in: source/stream-media.js:1884      Available since 0.6.15

Function that handles the native navigator.getUserMedia() API failure callback result.

Events Sequence:

There is no event sequence for this method.

_onStreamAccessSuccess

()
private
  Defined in: source/stream-media.js:1749      Available since 0.3.0

Function that handles the native navigator.getUserMedia() API success callback result.

Events Sequence:

There is no event sequence for this method.

_openChannel

()
private
  Defined in: source/socket-channel.js:444      Available since 0.5.5

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.

_parseConnectionStats

()
private
  Defined in: source/peer-connection.js:2204      Available since 0.6.16

Function that handles the stats tabulation.

Events Sequence:

There is no event sequence for this method.

_parseInfo

()
private
  Defined in: source/room-init.js:1129      Available since 0.5.2

Parses the Room credentials information retrieved from API server.

Events Sequence:

There is no event sequence for this method.

_parseStreamSettings

()
private
  Defined in: source/stream-media.js:1570      Available since 0.6.15

Function that parses the getUserMedia() settings provided.

Events Sequence:

There is no event sequence for this method.

_peerListEventHandler

()
private
  Defined in: source/socket-message.js:524      Available since 0.6.1

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

()
private scoped
  Defined in: source/skylink-debug.js:152      Available since 0.5.5

Function that prints in the Web Console interface the stored logs.

Events Sequence:

There is no event sequence for this method.

_privateMessageHandler

()
private
  Defined in: source/socket-message.js:813      Available since 0.4.0

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.

_processDataChannelData

()
private
  Defined in: source/data-transfer.js:2429      Available since 0.6.16

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.

_processSigMessage

()
private
  Defined in: source/socket-message.js:433      Available since 0.1.0

Function that handles and processes the socket message received.

Events Sequence:

There is no event sequence for this method.

_publicMessageHandler

()
private
  Defined in: source/socket-message.js:835      Available since 0.4.0

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.

_recordingEventHandler

( message ,   )
private beta
  Defined in: source/socket-message.js:857      Available since 0.6.16

Handles the RECORDING Protocol message event received from the platform signaling.

Events Sequence:

There is no event sequence for this method.

Parameters:

  • message {JSON}

    The message object received from platform signaling. This should contain the RECORDING payload.

    • url {String}

      The recording URL if mixing has completed.

    • action {String}

      The recording action received.

    • error {String}

      The recording error exception received.


_redirectHandler

()
private
  Defined in: source/socket-message.js:626      Available since 0.5.1

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.

_refreshPeerConnection

()
private
  Defined in: source/peer-connection.js:378      Available since 0.6.15

Function that refresh connections.

Events Sequence:

There is no event sequence for this method.

_removePeer

()
private
  Defined in: source/peer-connection.js:1696      Available since 0.5.5

Function that ends the Peer connection session.

Events Sequence:

There is no event sequence for this method.

_removeSDPCodecs

()
private
  Defined in: source/stream-sdp.js:606      Available since 0.6.16

Function that modifies the session description to remove codecs.

Events Sequence:

There is no event sequence for this method.

_removeSDPFilteredCandidates

()
private
  Defined in: source/stream-sdp.js:753      Available since 0.6.16

Function that modifies the session description to remove non-relay ICE candidates.

Events Sequence:

There is no event sequence for this method.

_removeSDPFirefoxH264Pref

()
private
  Defined in: source/stream-sdp.js:389      Available since 0.5.2

Function that modifies the session description to remove the previous experimental H264 codec that is apparently breaking connections. NOTE: We should perhaps not remove it since H264 is supported?

Events Sequence:

There is no event sequence for this method.

_removeSDPREMBPackets

()
private
  Defined in: source/stream-sdp.js:680      Available since 0.6.16

Function that modifies the session description to remove REMB packets fb.

Events Sequence:

There is no event sequence for this method.

_removeSDPUnknownAptRtx

()
private
  Defined in: source/stream-sdp.js:551      Available since 0.6.18

Function that modifies the session description to remove apt/rtx lines that does exists.

Events Sequence:

There is no event sequence for this method.

_requestServerInfo

()
private
  Defined in: source/room-init.js:1055      Available since 0.5.2

Starts retrieving Room credentials information from API server.

Events Sequence:

There is no event sequence for this method.

_restartHandler

()
private
  Defined in: source/socket-message.js:1182      Available since 0.5.6

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

()
private
  Defined in: source/peer-connection.js:2056      Available since 0.6.1

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

()
private
  Defined in: source/peer-connection.js:1545      Available since 0.5.8

Function that re-negotiates a Peer connection. 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.

_retrieveStats

()
private
  Defined in: source/peer-connection.js:735      Available since 0.6.18

Function that retrieves Peer connection stats.

Events Sequence:

There is no event sequence for this method.

_roomLockEventHandler

()
private
  Defined in: source/socket-message.js:685      Available since 0.2.0

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.

_sendChannelMessage

()
private
  Defined in: source/socket-channel.js:66      Available since 0.5.8

Function that sends a socket message over the socket connection to the Signaling.

Events Sequence:

There is no event sequence for this method.

_sendMessageToDataChannel

()
private
  Defined in: source/data-channel.js:309      Available since 0.5.2

Function that sends data over the Datachannel connection.

Events Sequence:

There is no event sequence for this method.

_setIceServers

()
private
  Defined in: source/ice-connection.js:101      Available since 0.5.4

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

()
private
  Defined in: source/peer-handshake.js:183      Available since 0.5.2

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.

_setSDPBitrate

()
private
  Defined in: source/stream-sdp.js:157      Available since 0.5.10

Function that modifies the session description to limit the maximum sending bandwidth. Setting this may not necessarily work in Firefox.

Events Sequence:

There is no event sequence for this method.

_setSDPCodec

()
private
  Defined in: source/stream-sdp.js:292      Available since 0.6.16

Function that modifies the session description to set the preferred audio/video codec.

Events Sequence:

There is no event sequence for this method.

_setSDPCodecParams

()
private
  Defined in: source/stream-sdp.js:1      Available since 0.6.16

Function that modifies the session description to configure settings for OPUS audio codec.

Events Sequence:

There is no event sequence for this method.

_signalingEndOfCandidates

()
private
  Defined in: source/peer-connection.js:2224      Available since 0.6.16

Function that signals the end-of-candidates flag.

Events Sequence:

There is no event sequence for this method.

_startDataTransfer

()
private
  Defined in: source/data-transfer.js:1689      Available since 0.6.1

Function that starts the data transfer to Peers.

Events Sequence:

There is no event sequence for this method.

_startDataTransferToPeer

()
private
  Defined in: source/data-transfer.js:1950      Available since 0.6.16

Function that starts or listens the data transfer status to Peer. This reacts differently during MCU environment.

Events Sequence:

There is no event sequence for this method.

Returns:

{Boolean}

Returns a Boolean only during MCU environment which flag indicates if Peer requires interop (Use messaging Datachannel connection instead).


_stopStreams

()
private
  Defined in: source/stream-media.js:1497      Available since 0.6.15

Function that handles stopping the Stream streaming.

Events Sequence:

There is no event sequence for this method.

_streamEventHandler

()
private
  Defined in: source/socket-message.js:760      Available since 0.2.0

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

()
private
  Defined in: source/skylink-events.js:1558      Available since 0.5.8

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

()
private
  Defined in: source/skylink-events.js:1441      Available since 0.1.0

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

()
private
  Defined in: source/socket-message.js:658      Available since 0.2.0

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

()
private
  Defined in: source/skylink-events.js:1520      Available since 0.5.5

Function that starts an interval check to wait for a condition to be resolved.

Events Sequence:

There is no event sequence for this method.

_waitForOpenChannel

()
private
  Defined in: source/room-connection.js:661      Available since 0.5.5

Function that waits for Socket connection to Signaling to be opened.

Events Sequence:

There is no event sequence for this method.

_welcomeHandler

()
private
  Defined in: source/socket-message.js:1317      Available since 0.5.4

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

()
private
  Defined in: source/data-transfer.js:2605      Available since 0.5.2

Function that handles the "WRQ" data transfer protocol.

Events Sequence:

There is no event sequence for this method.

acceptDataTransfer

( peerId ,   transferId ,   [accept=false] ,   )
  Defined in: source/data-transfer.js:557      Available since 0.6.1

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:

Event sequence follows sendBlobData() method after acceptDataTransfer() method is invoked.

Parameters:

  • peerId {String}

    The Peer ID.

  • transferId {String}

    The data transfer ID.

  • accept {Boolean} Optional
    DEFAULT: false

    The flag if User accepts the upload data transfer request from Peer.


cancelDataTransfer

( peerId ,   transferId ,   )
  Defined in: source/data-transfer.js:693      Available since 0.6.1
For MCU enabled Peer connections, the cancel data transfer functionality may differ, as it will result in all Peers related to the data transfer ID to be terminated.
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:

Event sequence follows sendBlobData() method after cancelDataTransfer() method is invoked.

Parameters:

  • peerId {String}

    The Peer ID.

  • transferId {String}

    The data transfer ID.


disableAudio

()
deprecated
  Defined in: source/stream-media.js:1033      Available since 0.5.5
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:

  1. Invokes muteStream() method with options.audioMuted value as true and options.videoMuted value with current peerInfo.mediaStatus.videoMuted value. See getPeerInfo() method for more information.

disableVideo

()
deprecated
  Defined in: source/stream-media.js:1087      Available since 0.5.5
Deprecation Warning! This method has been deprecated. Use muteStream() method instead.
Function that mutes both getUserMedia() Stream and shareScreen() Stream video tracks.

Example:

                                            

function muteVideo () { skylinkDemo.disableVideo(); }

Events Sequence:

  1. Invokes muteStream() method with options.videoMuted value as true and options.audioMuted value with current peerInfo.mediaStatus.audioMuted value. See getPeerInfo() method for more information.

enableAudio

()
deprecated
  Defined in: source/stream-media.js:1006      Available since 0.5.5
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:

  1. Invokes muteStream() method with options.audioMuted value as false and options.videoMuted value with current peerInfo.mediaStatus.videoMuted value. See getPeerInfo() method for more information.

enableVideo

()
deprecated
  Defined in: source/stream-media.js:1060      Available since 0.5.5
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:

  1. Invokes muteStream() method with options.videoMuted value as false and options.audioMuted value with current peerInfo.mediaStatus.audioMuted value. See getPeerInfo() method for more information.

generateUUID

()
  Defined in: source/room-init.js:176      Available since 0.5.9

Function that generates an UUID (Unique ID).

Events Sequence:

There is no event sequence for this method.

Returns:

{String}

Returns a generated UUID (Unique ID).


getConnectionStatus

( [targetPeerId] ,   [callback] The callback function fired when request has completed. <small>Function parameters signature is <code>function (error, success)</code></small> <small>Function request completion is determined by the <a href="#event_getConnectionStatusStateChange"> <code>getConnectionStatusStateChange</code> event</a> triggering <code>state</code> parameter payload value as <code>RETRIEVE_SUCCESS</code> for all Peers targeted for request success.</small> [Rel: Skylink.GET_CONNECTION_STATUS_STATE] ,   callback.error ,   callback.error.listOfPeers ,   callback.error.retrievalErrors ,   callback.error.retrievalErrors.#peerId ,   callback.error.connectionStats ,   callback.error.connectionStats.#peerId ,   callback.success ,   callback.success.listOfPeers ,   callback.success.connectionStats ,   callback.success.connectionStats.#peerId ,   )
  Defined in: source/peer-connection.js:464      Available since 0.6.14
Note that this is not well supported in the Edge browser.
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:

  1. Retrieves Peer connection stats for all targeted Peers.
    1. If Peer connection has closed or does not exists: This can be checked with peerConnectionState event triggering parameter payload state as CLOSED for Peer.
      1. getConnectionStatusStateChange event triggers parameter payload state as RETRIEVE_ERROR.
      2. ABORT and return error.
    2. getConnectionStatusStateChange event triggers parameter payload state as RETRIEVING.
    3. Received response from retrieval.
      1. If retrieval was successful:
        1. getConnectionStatusStateChange event triggers parameter payload state as RETRIEVE_SUCCESS.
      2. Else:
        1. getConnectionStatusStateChange event triggers parameter payload state as RETRIEVE_ERROR.

Parameters:

  • targetPeerId {String | Array} Optional

    The 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] The callback function fired when request has completed. <small>Function parameters signature is <code>function (error, success)</code></small> <small>Function request completion is determined by the <a href="#event_getConnectionStatusStateChange"> <code>getConnectionStatusStateChange</code> event</a> triggering <code>state</code> parameter payload value as <code>RETRIEVE_SUCCESS</code> for all Peers targeted for request success.</small> [Rel: Skylink.GET_CONNECTION_STATUS_STATE] {Function}
  • callback.error {JSON}

    The error result in request. Defined as null when there are no errors in request

  • callback.error.listOfPeers {Array}

    The list of Peer IDs targeted.

  • callback.error.retrievalErrors {JSON}

    The list of Peer connection stats retrieval errors.

  • callback.error.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.

  • callback.error.connectionStats {JSON}

    The list of Peer connection stats. These are the Peer connection stats that has been managed to be successfully retrieved.

  • callback.error.connectionStats.#peerId {JSON}

    The Peer connection stats associated with the Peer ID defined in #peerId property. Object signature matches the stats parameter payload received in the getConnectionStatusStateChange event.

  • callback.success {JSON}

    The success result in request. Defined as null when there are errors in request

  • callback.success.listOfPeers {Array}

    The list of Peer IDs targeted.

  • callback.success.connectionStats {JSON}

    The list of Peer connection stats.

  • callback.success.connectionStats.#peerId {JSON}

    The Peer connection stats associated with the Peer ID defined in #peerId property. Object signature matches the stats parameter payload received in the getConnectionStatusStateChange event.


getCurrentDataStreamsSession

()
  Defined in: source/peer-data.js:503      Available since 0.6.18

Function that gets the list of current data streaming sessions.

Example:

                                            

// Example 1: Get the list of current data streaming sessions in the same Room var currentDataStreams = skylinkDemo.getCurrentDataStreamsSession();

Events Sequence:

There is no event sequence for this method.

Returns:

{JSON}

The list of Peers Stream.

  • #streamId{JSON}

    The data streaming session.

    • streamInfo{JSON}

      The data streaming information. Object signature matches the streamInfo parameter payload received in the dataStreamState event except without the chunk amd chunkSize property.

    • peerId{String}

      The sender Peer ID.

    • isSelf{Boolean}

      The flag if Peer is User.


getCurrentDataTransfers

()
  Defined in: source/peer-data.js:465      Available since 0.6.18

Function that gets the list of current data transfers.

Example:

                                            

// Example 1: Get the list of current data transfers in the same Room var currentTransfers = skylinkDemo.getCurrentDataTransfers();

Events Sequence:

There is no event sequence for this method.

Returns:

{JSON}

The list of Peers Stream.

  • #transferId{JSON}

    The data transfer session.

    • transferInfo{JSON}

      The data transfer information. Object signature matches the transferInfo parameter payload received in the dataTransferState event except without the data property.

    • peerId{String}

      The sender Peer ID.

    • isSelf{Boolean}

      The flag if Peer is User.


getPeerCustomSettings

()
  Defined in: source/peer-data.js:547      Available since 0.6.18

Function that gets the list of current custom Peer settings sent and set.

Example:

                                            

// Example 1: Get the list of current Peer custom settings var currentPeerSettings = skylinkDemo.getPeersCustomSettings();

Events Sequence:

There is no event sequence for this method.

Returns:

{JSON}

The list of Peers custom settings sent and set.

  • #peerId{JSON}

    The Peer settings sent and set.

    • settings{JSON}

      The custom Peer settings. Object signature matches the peerInfo.settings parameter payload received in the peerJoined event.

    • mediaStatus{JSON}

      The custom Peer Stream muted settings. Object signature matches the peerInfo.mediaStatus parameter payload received in the peerJoined event.


getPeerInfo

( [peerId] ,   )
  Defined in: source/peer-data.js:88      Available since 0.4.0

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} Optional

    The 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:

{JSON}

The User / Peer current session information. Object signature matches the peerInfo parameter payload received in the peerJoined event.


getPeers

( [showAll=false] ,   [callback] The callback function fired when request has completed. <small>Function parameters signature is <code>function (error, success)</code></small> <small>Function request completion is determined by the <a href="#event_getPeersStateChange"> <code>getPeersStateChange</code> event</a> triggering <code>state</code> parameter payload value as <code>RECEIVED</code> for request success.</small> [Rel: Skylink.GET_PEERS_STATE] ,   callback.error ,   callback.success ,   )
  Defined in: source/peer-privileged.js:54      Available since 0.6.1
Note that this feature requires "isPrivileged" flag to be enabled for the App Key provided in the init() 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.
Function that retrieves the list of Peer IDs from Rooms within the same App space.

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:

  1. If App Key provided in the init() method is not a Privileged enabled Key:
    1. ABORT and return error.
  2. Retrieves the list of Peer IDs from Rooms within the same App space.
    1. getPeersStateChange event triggers parameter payload state value as ENQUIRED.
    2. If received list from Signaling server successfully:
      1. getPeersStateChange event triggers parameter payload state value as RECEIVED.

Parameters:

  • showAll {Boolean} Optional
    DEFAULT: 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] The callback function fired when request has completed. <small>Function parameters signature is <code>function (error, success)</code></small> <small>Function request completion is determined by the <a href="#event_getPeersStateChange"> <code>getPeersStateChange</code> event</a> triggering <code>state</code> parameter payload value as <code>RECEIVED</code> for request success.</small> [Rel: Skylink.GET_PEERS_STATE] {Function}
  • callback.error {Error | String}

    The error result in request. Defined as null when there are no errors in request Object signature is the getPeers() error when retrieving list of Peer IDs from Rooms within the same App space.

  • callback.success {JSON}

    The success result in request. Defined as null when there are errors in request Object signature matches the peerList parameter payload received in the getPeersStateChange event.


getPeersDatachannels

()
  Defined in: source/peer-data.js:409      Available since 0.6.18

Function that gets the current list of connected Peers Datachannel connections in the Room.

Example:

                                            

// Example 1: Get the list of current Peers Datachannels in the same Room var channels = skylinkDemo.getPeersDatachannels();

Events Sequence:

There is no event sequence for this method.

Returns:

{JSON}

The list of Peers Stream.

  • #peerId{JSON}

    The Peer Datachannels information.

    • #channelName{JSON}

      The Datachannel information.

      • channelName{String}

        The Datachannel ID..

        • channelType{String}

          The Datachannel type. [Rel: Skylink.DATA_CHANNEL_TYPE]

        • channelProp{String}

          The Datachannel property.

        • currentTransferId{String}

          The Datachannel connection current progressing transfer session. Defined as null when there is currently no transfer session progressing on the Datachannel connection.

        • currentStreamId{String}

          The Datachannel connection current data streaming session ID. Defined as null when there is currently no data streaming session on the Datachannel connection.

        • readyState{String}

          The Datachannel connection readyState. [Rel: Skylink.DATA_CHANNEL_STATE]

        • bufferedAmountLow{Number}

          The Datachannel buffered amount.

        • bufferedAmountLowThreshold{Number}

          The Datachannel buffered amount threshold.


getPeersInRoom

()
  Defined in: source/peer-data.js:315      Available since 0.6.16

Function that gets the list of connected Peers in the Room.

Example:

                                            

// Example 1: Get the list of currently connected Peers in the same Room var peers = skylinkDemo.getPeersInRoom();

Events Sequence:

There is no event sequence for this method.

Returns:

{JSON}

The list of connected Peers.

  • #peerId{JSON}

    The Peer information. Object signature matches the peerInfo parameter payload received in the peerJoined event except there is the isSelf flag that determines if Peer is User or not.


getPeersStream

()
  Defined in: source/peer-data.js:346      Available since 0.6.16

Function that gets the list of connected Peers Streams in the Room.

Example:

                                            

// Example 1: Get the list of current Peers Streams in the same Room var streams = skylinkDemo.getPeersStream();

Events Sequence:

There is no event sequence for this method.

Returns:

{JSON}

The list of Peers Stream.

  • #peerId{JSON}

    The Peer Stream.

    • stream{MediaStream}

      The Stream object.

    • streamId{String}

      The Stream ID.

    • isSelf{Boolean}

      The flag if Peer is User.


getRecordings

()
beta
  Defined in: source/socket-message.js:392      Available since 0.6.16
Note that this feature requires MCU and recording to be enabled for the App Key provided in the init() method. If recording feature is not available to be enabled in the Developer Console, please contact us on our support portal.
Gets the list of current recording sessions since User has connected to the Room.

Example:

                                            

// Example 1: Get recording sessions skylinkDemo.getRecordings();

Events Sequence:

There is no event sequence for this method.

Returns:

{JSON}

The list of recording sessions.

  • #recordingId{JSON}

    The recording session.

    • active{Boolean}

      The flag that indicates if the recording session is currently active.

    • state{Number}

      The current recording state. [Rel: Skylink.RECORDING_STATE]

    • startedDateTime{String}

      The recording session started DateTime in ISO 8601 format.Note that this value may not be very accurate as this value is recorded when the start event is received.

    • endedDateTime{String}

      The recording session ended DateTime in ISO 8601 format.Note that this value may not be very accurate as this value is recorded when the stop event is received. Defined only after state has triggered STOP.

    • mixingDateTime{String}

      The recording session mixing completed DateTime in ISO 8601 format.Note that this value may not be very accurate as this value is recorded when the mixing completed event is received. Defined only when state is LINK.

    • links{JSON}

      The recording session links. Object signature matches the link parameter payload received in the recordingState event. Defined only when state is LINK.

    • error{Error}

      The recording session error. Defined only when state is ERROR.


getUserData

( [peerId] ,   )
  Defined in: source/peer-data.js:61      Available since 0.5.10

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} Optional

    The 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:

{JSON | String}

The User / Peer current custom data.


getUserMedia

( [options] ,   [options.audio.optional] <blockquote class="info"> Note that this may result in constraints related error when <code>options.useExactConstraints</code> value is <code>true</code>. If you are looking to set the requested source ID of the audio track, use <code>options.audio.deviceId</code> instead.</blockquote> The <code>navigator.getUserMedia()</code> API <code>audio: { optional [..] ,   [options.video.resolution] The video resolution. <small>By default, <a href="#attr_VIDEO_RESOLUTION"><code>VGA</code></a> resolution option is selected when not provided.</small> [Rel: Skylink.VIDEO_RESOLUTION] ,   [options.video.optional] <blockquote class="info"> Note that this may result in constraints related error when <code>options.useExactConstraints</code> value is <code>true</code>. If you are looking to set the requested source ID of the video track, use <code>options.video.deviceId</code> instead.</blockquote> The <code>navigator.getUserMedia()</code> API <code>video: { optional [..] ,   [callback] ,   )
  Defined in: source/stream-media.js:236      Available since 0.5.6
For a better user experience, the functionality is throttled when invoked many times in less than the milliseconds interval configured in the init() method.
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) { if (window.webrtcDetectedBrowser === 'firefox') { console.warn("Currently this feature is not supported by Firefox browsers!"); return; } 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:

  1. If options.audio value is false and options.video value is false:
    1. ABORT and return error.
  2. Retrieve camera Stream.
    1. If retrieval was succesful:
      1. If there is any previous getUserMedia() Stream:
        1. Invokes stopStream() method.
      2. If there are missing audio or video tracks requested:
        1. mediaAccessFallback event triggers parameter payload state as FALLBACKED, isScreensharing value as false and isAudioFallback value as false.
      3. Mutes / Unmutes audio and video tracks based on current muted settings in peerInfo.mediaStatus. This can be retrieved with getPeerInfo() method.
      4. mediaAccessSuccess event triggers parameter payload isScreensharing value as false and isAudioFallback value as false.
    2. Else:
      1. If options.audioFallback is enabled in the init() method, options.audio value is true and options.video value is true:
        1. mediaAccessFallback event event triggers parameter payload state as FALLBACKING, isScreensharing value as false and isAudioFallback value as true.
        2. Retrieve camera Stream with audio tracks only.
          1. If retrieval was successful:
            1. If there is any previous getUserMedia() Stream:
              1. Invokes stopStream() method.
            2. mediaAccessFallback event event triggers parameter payload state as FALLBACKED, isScreensharing value as false and isAudioFallback value as true.
            3. Mutes / Unmutes audio and video tracks based on current muted settings in peerInfo.mediaStatus. This can be retrieved with getPeerInfo() method.
            4. mediaAccessSuccess event triggers parameter payload isScreensharing value as false and isAudioFallback value as true.
          2. Else:
            1. mediaAccessError event triggers parameter payload isScreensharing value as false and isAudioFallbackError value as true.
            2. mediaAccessFallback event event triggers parameter payload state as ERROR, isScreensharing value as false and isAudioFallback value as true.
            3. ABORT and return error.
      2. Else:
        1. mediaAccessError event triggers parameter payload isScreensharing value as false and isAudioFallbackError value as false.
        2. ABORT and return error.

Parameters:

  • options {JSON} Optional

    The 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 the audioFallback flag in the init() method.
    • useExactConstraints {Boolean} Optional
      DEFAULT: false
      Note that by enabling this flag, exact values will be requested when retrieving camera Stream, but it does not prevent constraints related errors. By default when not enabled, expected mandatory maximum values (or optional values for source ID) will requested to prevent constraints related errors, with an exception for options.video.frameRate option in Safari and IE (any plugin-enabled) browsers, where the expected maximum value will not be requested due to the lack of support.
      The flag if getUserMedia() should request for camera Stream to match exact requested values of options.audio.deviceId and options.video.deviceId, options.video.resolution and options.video.frameRate when provided.
    • audio {Boolean | JSON} Optional
      DEFAULT: false
      Note that the current Edge browser implementation does not support the options.audio.optional, options.audio.deviceId, options.audio.echoCancellation.
      The audio configuration options.
      • stereo {Boolean} Optional
        DEFAULT: false
        Deprecation Warning! This property has been deprecated. Configure this with the options.codecParams.audio.opus.stereo parameter in the init() method instead. If the options.codecParams.audio.opus.stereo is configured, this overrides the options.audio.stereo setting.
        The flag if OPUS audio codec stereo band should be configured for sending encoded audio data. When not provided, the default browser configuration is used.
      • usedtx {Boolean} Optional
        Deprecation Warning! This property has been deprecated. Configure this with the options.codecParams.audio.opus.stereo parameter in the init() method instead. If the options.codecParams.audio.opus.stereo is configured, this overrides the options.audio.stereo setting. Note that this feature might not work depending on the browser support and implementation.
        The flag if OPUS audio codec should enable DTX (Discontinuous Transmission) for sending encoded audio data. This might help to reduce bandwidth as it reduces the bitrate during silence or background noise, and goes hand-in-hand with the options.voiceActivityDetection flag in joinRoom() method. When not provided, the default browser configuration is used.
      • useinbandfec {Boolean} Optional
        Deprecation Warning! This property has been deprecated. Configure this with the options.codecParams.audio.opus.useinbandfec parameter in the init() method instead. If the options.codecParams.audio.opus.useinbandfec is configured, this overrides the options.audio.useinbandfec setting. Note that this parameter should only be used for debugging purposes only.
        The flag if OPUS audio codec has the capability to take advantage of the in-band FEC (Forward Error Correction) when sending encoded audio data. This helps to reduce the harm of packet loss by encoding information about the previous packet loss. When not provided, the default browser configuration is used.
      • maxplaybackrate {Number} Optional
        Deprecation Warning! This property has been deprecated. Configure this with the options.codecParams.audio.opus.maxplaybackrate parameter in the init() method instead. If the options.codecParams.audio.opus.maxplaybackrate is configured, this overrides the options.audio.maxplaybackrate setting. Note that this feature might not work depending on the browser support and implementation. Note that this parameter should only be used for debugging purposes only.
        The OPUS audio codec maximum output sampling rate in Hz (hertz) that is is capable of receiving decoded audio data, to adjust to the hardware limitations and ensure that any sending audio data would not encode at a higher sampling rate specified by this. This value must be between 8000 to 48000. When not provided, the default browser configuration is used.
      • mute {Boolean} Optional
        DEFAULT: false The flag if audio tracks should be muted upon receiving them. Providing the value as false does nothing to peerInfo.mediaStatus.audioMuted, but when provided as true, this sets the peerInfo.mediaStatus.audioMuted value to true and mutes any existing shareScreen() Stream audio tracks as well.
      • deviceId {String} Optional
        Note this is currently not supported in Firefox browsers.
        The audio track source ID of the device to use. The list of available audio source ID can be retrieved by the navigator.mediaDevices.enumerateDevices API.
      • echoCancellation {Boolean} Optional
        DEFAULT: true
        For Chrome/Opera/IE/Safari/Bowser, the echo cancellation functionality may not work and may produce a terrible feedback. It is recommended to use headphones or other microphone devices rather than the device in-built microphones.
        The flag to enable echo cancellation for audio track.
    • video {Boolean | JSON} Optional
      DEFAULT: false
      Note that the current Edge browser implementation does not support the options.video.optional, options.video.deviceId, options.video.resolution and options.video.frameRate, options.video.facingMode.
      The video configuration options.
      • mute {Boolean} Optional
        DEFAULT: false The flag if video tracks should be muted upon receiving them. Providing the value as false does nothing to peerInfo.mediaStatus.videoMuted, but when provided as true, this sets the peerInfo.mediaStatus.videoMuted value to true and mutes any existing shareScreen() Stream video tracks as well.
      • resolution.width {Number | JSON} Optional
        The video resolution width. - When provided as a number, it is the video resolution width. - When provided as a JSON, it is the navigator.mediaDevices.getUserMedia() .width settings. Parameters are "ideal" for ideal resolution width, "exact" for exact video resolution width, "min" for min video resolution width and "max" for max video resolution width. Note that this may result in constraints related errors depending on the browser/hardware supports.
      • resolution.height {Number | JSON} Optional
        The video resolution height. - When provided as a number, it is the video resolution height. - When provided as a JSON, it is the navigator.mediaDevices.getUserMedia() .height settings. Parameters are "ideal" for ideal video resolution height, "exact" for exact video resolution height, "min" for min video resolution height and "max" for max video resolution height. Note that this may result in constraints related errors depending on the browser/hardware supports.
      • frameRate {Number | JSON} Optional
        The video frameRate per second (fps). - When provided as a number, it is the video framerate. - When provided as a JSON, it is the navigator.mediaDevices.getUserMedia() .frameRate settings. Parameters are "ideal" for ideal video framerate, "exact" for exact video framerate, "min" for min video framerate and "max" for max video framerate. Note that this may result in constraints related errors depending on the browser/hardware supports.
      • deviceId {String} Optional
        Note this is currently not supported in Firefox browsers.
        The video track source ID of the device to use. The list of available video source ID can be retrieved by the navigator.mediaDevices.enumerateDevices API.
      • facingMode {String | JSON} Optional
        The video camera facing mode. The list of available video source ID can be retrieved by the MediaTrackConstraints facingMode API.
  • [options.audio.optional] <blockquote class="info"> Note that this may result in constraints related error when <code>options.useExactConstraints</code> value is <code>true</code>. If you are looking to set the requested source ID of the audio track, use <code>options.audio.deviceId</code> instead.</blockquote> The <code>navigator.getUserMedia()</code> API <code>audio: { optional [..] {Array}

    } property.

  • [options.video.resolution] The video resolution. <small>By default, <a href="#attr_VIDEO_RESOLUTION"><code>VGA</code></a> resolution option is selected when not provided.</small> [Rel: Skylink.VIDEO_RESOLUTION] {JSON}
  • [options.video.optional] <blockquote class="info"> Note that this may result in constraints related error when <code>options.useExactConstraints</code> value is <code>true</code>. If you are looking to set the requested source ID of the video track, use <code>options.video.deviceId</code> instead.</blockquote> The <code>navigator.getUserMedia()</code> API <code>video: { optional [..] {Array}

    } property.

  • callback {Function} Optional

    The callback function fired when request has completed. Function parameters signature is function (error, success) Function request completion is determined by the mediaAccessSuccess event triggering isScreensharing parameter payload value as false for request success.

    • error {Error | String}

      The error result in request. Defined as null when there are no errors in request Object signature is the getUserMedia() 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 ,   [options.TURNServerTransport] <blockquote class="info"> 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 <code?transport=(protocol)</code> query option when constructing the Peer connection. When all protocols are selected, the ICE servers urls are duplicated with all protocols.<br> Note that for Edge browsers, this value is overriden as <code>UDP</code> due to its supports. </blockquote> The option to configure the <code>?transport=</code> query parameter in TURN ICE servers when constructing a Peer connections. - When not provided, its value is <code>ANY</code>. [Rel: Skylink.TURN_TRANSPORT] ,   [options.audioCodec] <blockquote class="info"> Note that if the audio codec is not supported, the SDK will not configure the local <code>"offer"</code> or <code>"answer"</code> session description to prefer the codec.<br> Note that for Edge browsers, this value is set as <code>OPUS</code> due to its supports.</blockquote> The option to configure the preferred audio codec to use to encode sending audio data when available for Peer connection. - When not provided, its value is <code>AUTO</code>. [Rel: Skylink.AUDIO_CODEC] ,   [options.videoCodec] <blockquote class="info"> Note that if the video codec is not supported, the SDK will not configure the local <code>"offer"</code> or <code>"answer"</code> session description to prefer the codec.<br> Note that for Edge browsers, this value is set as <code>H264</code> due to its supports.</blockquote> The option to configure the preferred video codec to use to encode sending video data when available for Peer connection. - When not provided, its value is <code>AUTO</code>. [Rel: Skylink.VIDEO_CODEC] ,   [options.iceServer] The ICE servers for debugging purposes to use. - When defined as string, the value is considered as <code>[options.iceServer] ,   [options.priorityWeightScheme] <blockquote class="info"> Note that this parameter should only be used for debugging purposes only and may not work when internals change.</blockquote> The User's priority weight to enforce User as offerer or answerer. - When not provided, its value is <code>AUTO</code>. [Rel: Skylink.PRIORITY_WEIGHT_SCHEME] ,   [callback] The callback function fired when request has completed. <small>Function parameters signature is <code>function (error, success)</code></small> <small>Function request completion is determined by the <a href="#event_readyStateChange"> <code>readyStateChange</code> event</a> <code>state</code> parameter payload value as <code>COMPLETED</code> for request success.</small> [Rel: Skylink.READY_STATE_CHANGE] ,   callback.error ,   callback.error.errorCode ,   callback.error.error ,   callback.error.status ,   callback.success ,   callback.success.serverUrl ,   callback.success.readyState ,   callback.success.selectedRoom ,   callback.success.appKey ,   callback.success.defaultRoom ,   callback.success.roomServer ,   callback.success.enableIceTrickle ,   callback.success.enableDataChannel ,   callback.success.enableTURNServer ,   callback.success.enableSTUNServer ,   callback.success.TURNTransport ,   callback.success.audioFallback ,   callback.success.forceSSL ,   callback.success.audioCodec ,   callback.success.videoCodec ,   callback.success.socketTimeout ,   callback.success.forceTURNSSL ,   callback.success.forceTURN ,   callback.success.usePublicSTUN ,   callback.success.disableVideoFecCodecs ,   callback.success.disableComfortNoiseCodec ,   callback.success.disableREMB ,   callback.success.filterCandidatesType ,   callback.success.throttleIntervals ,   callback.success.throttleShouldThrowError ,   callback.success.mcuUseRenegoRestart ,   callback.success.iceServer ,   callback.success.socketServer ,   )
  Defined in: source/room-init.js:195      Available since 0.5.5

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:

  1. If parameter options is not provided:
    1. ABORT and return error.
  2. Checks if dependecies and browser APIs are available.
    1. If AdapterJS is not loaded:
      1. readyStateChange event triggers parameter payload state as ERROR and error.errorCode as ADAPTER_NO_LOADED.
      2. ABORT and return error.
    2. If socket.io-client is not loaded:
      1. readyStateChange event triggers parameter payload state as ERROR and error.errorCode as NO_SOCKET_IO.
      2. ABORT and return error.
    3. If XMLHttpRequest API is not available:
      1. readyStateChange event triggers parameter payload state as ERROR and error.errorCode as NO_XMLHTTPREQUEST_SUPPORT.
      2. ABORT and return error.
    4. If WebRTC is not supported by device:
      1. readyStateChange event triggers parameter payload state as ERROR and error.errorCode as NO_WEBRTC_SUPPORT.
      2. ABORT and return error.
  3. Retrieves Room session token from Auth server.
    1. readyStateChange event triggers parameter payload state as LOADING.
    2. If retrieval was successful:
      1. readyStateChange event triggers parameter payload state as COMPLETED.
    3. Else:
      1. readyStateChange event triggers parameter payload state as ERROR.
      2. ABORT and return error.

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 the options.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} Optional

      The default Room to connect to when no room parameter is provided in joinRoom() method.

      • When not provided or is provided as an empty string, its value is options.appKey. Note that switching Rooms is not available when using options.credentials based authentication. The Room that User will be connected to is the defaultRoom provided.
    • roomServer {String} Optional

      The Auth server for debugging purposes to use. Note that this is a debugging feature and is only used when instructed for debugging purposes.

    • enableIceTrickle {Boolean} Optional
      DEFAULT: true

      The flag if Peer connections should trickle ICE for faster connectivity.

    • enableDataChannel {Boolean} Optional
      DEFAULT: true
      Note that for Edge browsers, this value is overriden as false due to its supports.
      The flag if Datachannel connections should be enabled. This is required to be enabled for sendBlobData() method, sendURLData() method and sendP2PMessage() method.
    • enableTURNServer {Boolean} Optional
      DEFAULT: 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} Optional
      DEFAULT: true

      The flag if STUN ICE servers should be used when constructing Peer connections to allow TURN connections when required.

    • forceTURN {Boolean} Optional
      DEFAULT: false

      The flag if Peer connections should enforce connections over the TURN server. This overrides options.enableTURNServer value to true and options.enableSTUNServer value to false, options.filterCandidatesType.host value to true, options.filterCandidatesType.srflx value to true and options.filterCandidatesType.relay value to false. Note that currently for MCU enabled Peer connections, the options.filterCandidatesType configuration is not honoured as Peers connected with MCU is similar as a forced TURN connection. The flags will act as if the value is false and ICE candidates will never be filtered regardless of the options.filterCandidatesType configuration.

    • usePublicSTUN {Boolean} Optional
      DEFAULT: true

      The flag if publicly available STUN ICE servers should be used if options.enableSTUNServer is enabled.

    • disableVideoFecCodecs {Boolean} Optional
      DEFAULT: false
      Note that this is an experimental flag and may cause disruptions in connections or connectivity issues when toggled, and to prevent connectivity issues, these codecs will not be removed for MCU enabled Peer connections.
      The flag if video FEC (Forward Error Correction) codecs like ulpfec and red should be removed in sending session descriptions. This can be useful for debugging purposes to prevent redundancy and overheads in RTP encoding.
    • disableComfortNoiseCodec {Boolean} Optional
      DEFAULT: false
      Note that this is an experimental flag and may cause disruptions in connections or connectivity issues when toggled.
      The flag if audio Comfort Noise (CN) codec should be removed in sending session descriptions. This can be useful for debugging purposes to test preferred audio quality and feedback.
    • disableREMB {Boolean} Optional
      DEFAULT: false
      Note that this is mainly used for debugging purposes and that it is an experimental flag, so it may cause disruptions in connections or connectivity issues when toggled.
      The flag if video REMB feedback packets should be disabled in sending session descriptions.
    • credentials {JSON} Optional

      The 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, unless init() is invoked again with a different set of credentials followed by invoking the joinRoom() 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:
        1. Concatenate a string that consists of the Room name you provide in the options.defaultRoom, the options.credentials.duration and the options.credentials.startDateTime. Example: var concatStr = defaultRoom + "_" + duration + "_" + startDateTime;
        2. Hash the concatenated string with the App Key "secret" property using SHA-1. Example: var hash = CryptoJS.HmacSHA1(concatStr, appKeySecret); See the CryptoJS.HmacSHA1 library.
        3. Encode the hashed string using base64 Example: var b64Str = hash.toString(CryptoJS.enc.Base64); See the CryptoJS.enc.Base64 library.
        4. Encode the base64 encoded string to replace special characters using UTF-8 encoding. Example: var credentials = encodeURIComponent(base64String); See encodeURIComponent() API.
    • audioFallback {Boolean} Optional
      DEFAULT: false

      The flag if getUserMedia() method should fallback to retrieve only audio Stream when retrieving audio and video Stream fails.

    • forceSSL {Boolean} Optional
      DEFAULT: 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.codec {String}

      The audio codec to prefer to encode sending audio data when available. The value must not be AUTO. [Rel: Skylink.AUDIO_CODEC]

    • audioCodec.samplingRate {Number} Optional

      The audio codec sampling to prefer to encode sending audio data when available.

    • audioCodec.channels {Number} Optional

      The audio codec channels to prefer to encode sending audio data when available.

    • videoCodec.codec {String}

      The video codec to prefer to encode sending audio data when available. The value must not be AUTO. [Rel: Skylink.VIDEO_CODEC]

    • videoCodec.samplingRate {Number} Optional

      The video codec sampling to prefer to encode sending video data when available.

    • socketTimeout {Number} Optional
      DEFAULT: 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 be 5000. Note that it is recommended to use 12000 as the lowest timeout value if Peers are connecting using Polling transports to prevent connection errors.

    • forceTURNSSL {Boolean} Optional
      DEFAULT: false
      Note that currently Firefox does not support the TURNS protocol, and that if TURNS is required, TURN ICE servers using port 443 will be used instead.
      Note that for Edge browsers, this value is overriden as false due to its supports and only port 3478 is used.
      The flag if TURNS protocol should be used when options.enableTURNServer is enabled.
    • filterCandidatesType {JSON} Optional
      Note that this a debugging feature and there might be connectivity issues when toggling these flags.
      The configuration options to filter the type of ICE candidates sent and received.
      • host {Boolean} Optional
        DEFAULT: false The flag if local network ICE candidates should be filtered out.
      • srflx {Boolean} Optional
        DEFAULT: false The flag if STUN ICE candidates should be filtered out.
      • relay {Boolean} Optional
        DEFAULT: false The flag if TURN ICE candidates should be filtered out.
    • throttleIntervals {JSON} Optional

      The configuration options to configure the throttling method timeouts.

      • shareScreen {Number} Optional
        DEFAULT: 10000 The interval timeout for shareScreen() method throttling in milliseconds.
      • getUserMedia {Number} Optional
        DEFAULT: 0 The interval timeout for getUserMedia() method throttling in milliseconds.
      • refreshConnection {Number} Optional
        DEFAULT: 5000
        Note that this throttling is only done for MCU enabled Peer connections with the options.mcuUseRenegoRestart being set to false.
        The interval timeout for refreshConnection() method throttling in milliseconds. Note that there will be no throttling when refreshConnection() method is called internally.
    • throttleShouldThrowError {Boolean} Optional
      DEFAULT: false

      The flag if throttled methods should throw errors when method is invoked less than the interval timeout value configured in options.throttleIntervals.

    • mcuUseRenegoRestart {Boolean} Optional
      DEFAULT: false
      Note that this feature is currently is beta and for any enquiries on enabling and its support, please contact our support portal.
      The flag if refreshConnection() method should renegotiate like non-MCU enabled Peer connection for MCU enabled Peer connections instead of invoking joinRoom() method again.
    • iceServer.#index {String} Optional

      The ICE server url for debugging purposes to use.

    • socketServer {String | JSON} Optional

      The Signaling server for debugging purposes to use.

      • When defined as string, the value is considered as { url: options.socketServer }. Note that this is a debugging feature and is only used when instructed for debugging purposes.
      • url {String}
        The Signaling server URL for debugging purposes to use.
      • ports {Array} Optional
        The list of Signaling server ports for debugging purposes to use. If not defined, it will use the default list of ports specified.
      • ports.#index {Number}
        The Signaling server port to fallback and use for debugging purposes.
      • protocol {String} Optional
        The Signaling server protocol for debugging purposes to use. If not defined, it will use the default protocol specified.
    • codecParams {JSON} Optional
      Note that some of these parameters are mainly used for experimental or debugging purposes. Toggling any of these feature may result in disruptions in connectivity.
      The audio and video codecs parameters to configure.
      • video {JSON} Optional
        The video codecs parameters to configure.
      • video.h264 {JSON} Optional
        The H264 video codec parameters to configure.
      • video.h264.profileLevelId {String} Optional
        Note that this parameter should only be used for debugging purposes only.
        The H264 video codec base16 encoded string which indicates the H264 baseline, main, or the extended profiles. When not provided, the default browser configuration is used.
      • video.h264.levelAsymmetryAllowed {Boolean} Optional
        Note that this is an experimental parameter which may result in connectivity issues when toggled.
        The flag if streaming H264 sending video data should be encoded at a different level from receiving video data from Peer encoding to User when Peer is the offerer. If Peer is the offerer instead of the User, the Peer's peerInfo.config.priorityWeight will be higher than User's peerInfo.config.priorityWeight. When not provided, the default browser configuration is used.
      • video.h264.packetizationMode {Boolean} Optional
        Note that this is an experimental parameter which may result in connectivity issues when enabled. It is advisable to turn off this feature off when receiving H264 decoders do not support the packetization mode, which may result in a blank receiving video stream.
        The flag to enable H264 video codec packetization mode, which splits video frames that are larger for a RTP packet into RTP packet chunks. When not provided, the default browser configuration is used.
      • video.vp8 {JSON} Optional
        The VP8 video codec parameters to configure.
      • video.vp8.maxFr {Number} Optional
        Note that this parameter should only be used for debugging purposes only. Do not toggle this otherwise.
        The maximum number of fps (frames per second) that the VP8 video codec decoder is capable of decoding when receiving encoded video data packets. When not provided, the default browser configuration is used.
      • video.vp8.maxFs {Number} Optional
        Note that this parameter should only be used for debugging purposes only. Do not toggle this otherwise.
        The maximum number of frame size macroblocks that the VP8 video codec decoder is capable of decoding when receiving encoded video data packets. The value has to have the width and height of the frame in macroblocks less than the value of parseInt(Math.sqrt(maxFs * 8)). E.g. If the value is 1200, it is capable of support 640x480 frame width and height, which heights up to 1552px (97 macroblocks value. When not provided, the default browser configuration is used.
      • video.vp9 {JSON} Optional
        The VP9 video codec parameters to configure.
      • video.vp9.maxFr {Number} Optional
        Note that this parameter should only be used for debugging purposes only. Do not toggle this otherwise.
        The maximum number of fps (frames per second) that the VP9 video codec decoder is capable of decoding when receiving encoded video data packets. When not provided, the default browser configuration is used.
      • video.vp9.maxFs {Number} Optional
        Note that this parameter should only be used for debugging purposes only. Do not toggle this otherwise.
        The maximum number of frame size macroblocks that the VP9 video codec decoder is capable of decoding when receiving encoded video data packets. The value has to have the width and height of the frame in macroblocks less than the value of parseInt(Math.sqrt(maxFs * 8)). E.g. If the value is 1200, it is capable of support 640x480 frame width and height, which heights up to 1552px (97 macroblocks value. When not provided, the default browser configuration is used.
      • audio {JSON} Optional
        The audio codecs parameters to configure.
      • audio.opus {JSON} Optional
        Note that this is only applicable to OPUS audio codecs with a sampling rate of 48000 Hz (hertz).
        The OPUS audio codec parameters to configure.
      • audio.opus.stereo {Boolean} Optional
        The flag if OPUS audio codec stereo band should be configured for sending encoded audio data. When not provided, the default browser configuration is used.
      • audio.opus.usedtx {Boolean} Optional
        Note that this feature might not work depending on the browser support and implementation.
        The flag if OPUS audio codec should enable DTX (Discontinuous Transmission) for sending encoded audio data. This might help to reduce bandwidth as it reduces the bitrate during silence or background noise, and goes hand-in-hand with the options.voiceActivityDetection flag in joinRoom() method. When not provided, the default browser configuration is used.
      • audio.opus.useinbandfec {Boolean} Optional
        Note that this parameter should only be used for debugging purposes only.
        The flag if OPUS audio codec has the capability to take advantage of the in-band FEC (Forward Error Correction) when sending encoded audio data. This helps to reduce the harm of packet loss by encoding information about the previous packet loss. When not provided, the default browser configuration is used.
      • audio.opus.maxplaybackrate {Number} Optional
        Note that this parameter should only be used for debugging purposes only.
        The OPUS audio codec maximum output sampling rate in Hz (hertz) that is is capable of receiving decoded audio data, to adjust to the hardware limitations and ensure that any sending audio data would not encode at a higher sampling rate specified by this. This value must be between 8000 to 48000. When not provided, the default browser configuration is used.
      • minptime {Number} Optional
        Note that this parameter should only be used for debugging purposes only.
        The OPUS audio codec receiving audio data decoder minimum length of time in milleseconds should be encapsulated in a single received encoded audio data packet. This value must be between 3 to 120 When not provided, the default browser configuration is used.
  • [options.TURNServerTransport] <blockquote class="info"> 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 <code?transport=(protocol)</code> query option when constructing the Peer connection. When all protocols are selected, the ICE servers urls are duplicated with all protocols.<br> Note that for Edge browsers, this value is overriden as <code>UDP</code> due to its supports. </blockquote> The option to configure the <code>?transport=</code> query parameter in TURN ICE servers when constructing a Peer connections. - When not provided, its value is <code>ANY</code>. [Rel: Skylink.TURN_TRANSPORT] {Boolean}
  • [options.audioCodec] <blockquote class="info"> Note that if the audio codec is not supported, the SDK will not configure the local <code>"offer"</code> or <code>"answer"</code> session description to prefer the codec.<br> Note that for Edge browsers, this value is set as <code>OPUS</code> due to its supports.</blockquote> The option to configure the preferred audio codec to use to encode sending audio data when available for Peer connection. - When not provided, its value is <code>AUTO</code>. [Rel: Skylink.AUDIO_CODEC] {String | JSON}
  • [options.videoCodec] <blockquote class="info"> Note that if the video codec is not supported, the SDK will not configure the local <code>"offer"</code> or <code>"answer"</code> session description to prefer the codec.<br> Note that for Edge browsers, this value is set as <code>H264</code> due to its supports.</blockquote> The option to configure the preferred video codec to use to encode sending video data when available for Peer connection. - When not provided, its value is <code>AUTO</code>. [Rel: Skylink.VIDEO_CODEC] {String | JSON}
  • [options.iceServer] The ICE servers for debugging purposes to use. - When defined as string, the value is considered as <code>[options.iceServer] {String | Array}

    . Note that this is a debugging feature and is only used when instructed for debugging purposes.

  • [options.priorityWeightScheme] <blockquote class="info"> Note that this parameter should only be used for debugging purposes only and may not work when internals change.</blockquote> The User's priority weight to enforce User as offerer or answerer. - When not provided, its value is <code>AUTO</code>. [Rel: Skylink.PRIORITY_WEIGHT_SCHEME] {String}
  • [callback] The callback function fired when request has completed. <small>Function parameters signature is <code>function (error, success)</code></small> <small>Function request completion is determined by the <a href="#event_readyStateChange"> <code>readyStateChange</code> event</a> <code>state</code> parameter payload value as <code>COMPLETED</code> for request success.</small> [Rel: Skylink.READY_STATE_CHANGE] {Function}
  • callback.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
  • callback.error.errorCode {Number}

    The readyStateChange event error.errorCode parameter payload value. [Rel: Skylink.READY_STATE_CHANGE_ERROR]

  • callback.error.error {Error | String}

    The readyStateChange event error.content parameter payload value.

  • callback.error.status {Number}

    The readyStateChange event error.status parameter payload value.

  • callback.success {JSON}

    The success result in request. Defined as null when there are errors in request

  • callback.success.serverUrl {String}

    The constructed REST URL requested to Auth server.

  • callback.success.readyState {Number}

    The current ready state. [Rel: Skylink.READY_STATE_CHANGE]

  • callback.success.selectedRoom {String}

    The Room based on the current Room session token retrieved for.

  • callback.success.appKey {String}

    The configured value of the options.appKey.

  • callback.success.defaultRoom {String}

    The configured value of the options.defaultRoom.

  • callback.success.roomServer {String}

    The configured value of the options.roomServer.

  • callback.success.enableIceTrickle {Boolean}

    The configured value of the options.enableIceTrickle.

  • callback.success.enableDataChannel {Boolean}

    The configured value of the options.enableDataChannel.

  • callback.success.enableTURNServer {Boolean}

    The configured value of the options.enableTURNServer.

  • callback.success.enableSTUNServer {Boolean}

    The configured value of the options.enableSTUNServer.

  • callback.success.TURNTransport {Boolean}

    The configured value of the options.TURNServerTransport.

  • callback.success.audioFallback {Boolean}

    The configured value of the options.audioFallback.

  • callback.success.forceSSL {Boolean}

    The configured value of the options.forceSSL.

  • callback.success.audioCodec {String | JSON}

    The configured value of the options.audioCodec.

  • callback.success.videoCodec {String | JSON}

    The configured value of the options.videoCodec.

  • callback.success.socketTimeout {Number}

    The configured value of the options.socketTimeout.

  • callback.success.forceTURNSSL {Boolean}

    The configured value of the options.forceTURNSSL.

  • callback.success.forceTURN {Boolean}

    The configured value of the options.forceTURN.

  • callback.success.usePublicSTUN {Boolean}

    The configured value of the options.usePublicSTUN.

  • callback.success.disableVideoFecCodecs {Boolean}

    The configured value of the options.disableVideoFecCodecs.

  • callback.success.disableComfortNoiseCodec {Boolean}

    The configured value of the options.disableComfortNoiseCodec.

  • callback.success.disableREMB {Boolean}

    The configured value of the options.disableREMB.

  • callback.success.filterCandidatesType {JSON}

    The configured value of the options.filterCandidatesType.

  • callback.success.throttleIntervals {JSON}

    The configured value of the options.throttleIntervals.

  • callback.success.throttleShouldThrowError {Boolean}

    The configured value of the options.throttleShouldThrowError.

  • callback.success.mcuUseRenegoRestart {JSON}

    The configured value of the options.mcuUseRenegoRestart.

  • callback.success.iceServer {JSON}

    The configured value of the options.iceServer. See the .urls property in this object for configured value if defined.

  • callback.success.socketServer {JSON | String}

    The configured value of the options.socketServer.


introducePeer

( sendingPeerId ,   receivingPeerId ,   )
  Defined in: source/peer-privileged.js:147      Available since 0.6.1
Note that this feature requires "isPrivileged" flag to be enabled and "autoIntroduce" flag to be disabled for the App Key provided in the init() 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.
Function that selects and introduces a pair of Peers to start connection with each other.

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:

  1. If App Key provided in the init() method is not a Privileged enabled Key:
    1. ABORT and return error.
  2. Starts sending introduction request for the selected pair of Peers to the Signaling server.
    1. introduceStateChange event triggers parameter payload state value as INTRODUCING.
    2. If received errors from Signaling server:
      1. introduceStateChange event triggers parameter payload state value as ERROR.

Parameters:

  • sendingPeerId {String}

    The Peer ID to be connected with receivingPeerId.

  • receivingPeerId {String}

    The Peer ID to be connected with sendingPeerId.


joinRoom

( [room] ,   [options] ,   [options.peerConnection.bundlePolicy] The Peer connection media bundle policy. - When not provided, its value is <code>BALANCED</code>. [Rel: Skylink.BUNDLE_POLICY] ,   [options.peerConnection.rtcpMuxPolicy] The Peer connection RTP and RTCP ICE candidates mux policy. - When not provided, its value is <code>REQUIRE</code>. [Rel: Skylink.RTCP_MUX_POLICY] ,   [options.peerConnection.certificate] The type of certificate that Peer connection should generate and use when available. - When not provided, its value is <code>AUTO</code>. [Rel: Skylink.PEER_CERTIFICATE] ,   [callback] ,   [callback.error.errorCode] The current <a href="#method_init"><code>init()</code> method</a> ready state. <small>Defined as <code>null</code> when no <a href="#method_init"><code>init()</code> method</a> has not been called due to invalid configuration.</small> [Rel: Skylink.READY_STATE_CHANGE] ,   )
  Defined in: source/room-connection.js:94      Available since 0.5.5

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:

  1. If User is in a Room:
    1. Invoke leaveRoom() method to end current Room connection. Invoked leaveRoom() method stopMediaOptions parameter value will be false. Regardless of request errors, joinRoom() will still proceed.
  2. Check if Room name provided matches the Room name of the currently retrieved Room session token.
    1. If Room name does not matches:
      1. Invoke init() method to retrieve new Room session token.
        1. If request has errors:
          1. ABORT and return error.
  3. Open a new socket connection to Signaling server.
    1. If Socket connection fails:
      1. socketError event triggers parameter payload errorCode as CONNECTION_FAILED.
        1. Checks if there are fallback ports and transports to use.
          1. If there are still fallback ports and transports:
            1. Attempts to retry socket connection to Signaling server.
              1. channelRetry event triggers.
              2. socketError event triggers parameter payload errorCode as RECONNECTION_ATTEMPT.
              3. If attempt to retry socket connection to Signaling server has failed:
                1. socketError event triggers parameter payload errorCode as RECONNECTION_FAILED.
                2. Checks if there are still any more fallback ports and transports to use.
                  1. If there are is no more fallback ports and transports to use:
                    1. socketError event triggers parameter payload errorCode as RECONNECTION_ABORTED.
                    2. ABORT and return error.
                  2. Else:
                    1. REPEAT attempt to retry socket connection to Signaling server step.
          2. Else:
            1. socketError event triggers parameter payload errorCode as CONNECTION_ABORTED.
            2. ABORT and return error.
    2. If socket connection to Signaling server has opened:
      1. channelOpen event triggers.
  4. Checks if there is options.manualGetUserMedia requested
    1. If it is requested:
      1. mediaAccessRequired event triggers.
      2. If more than 30 seconds has passed and no getUserMedia() Stream or shareScreen() Stream has been retrieved:
        1. ABORT and return error.
    2. Else:
      1. If there is options.audio or options.video requested:
        1. Invoke getUserMedia() method.
          1. If request has errors:
            1. ABORT and return error.
  5. Starts the Room session
    1. If Room session has started successfully:
      1. peerJoined event triggers parameter payload isSelf value as true.
      2. If MCU is enabled for the App Key provided in init() method and connected:
        1. serverPeerJoined event triggers serverPeerType as MCU. MCU has to be present in the Room in order for Peer connections to commence.
        2. Checks for any available Stream
          1. If shareScreen() Stream is available:
            1. incomingStream event triggers parameter payload isSelf value as true and stream as shareScreen() Stream. User will be sending shareScreen() Stream to Peers.
          2. Else if getUserMedia() Stream is available:
            1. incomingStream event triggers parameter payload isSelf value as true and stream as getUserMedia() Stream. User will be sending getUserMedia() Stream to Peers.
          3. Else:
            1. No Stream will be sent.
    2. Else:
      1. systemAction event triggers parameter payload action as REJECT.
      2. ABORT and return error.

Parameters:

  • room {String} Optional

    The Room name.

    • When not provided or is provided as an empty string, its value is the options.defaultRoom provided in the init() method. Note that if you are using credentials based authentication, you cannot switch the Room that is not the same as the options.defaultRoom defined in the init() method.
  • options {JSON} Optional

    The Room session configuration options.

    • userData {JSON | String} Optional

      The User custom data. This can be set after Room session has started using the setUserData() method.

    • useExactConstraints {Boolean} Optional

      The getUserMedia() method options.useExactConstraints parameter settings. See the options.useExactConstraints parameter in the getUserMedia() method for more information.

    • audio {Boolean | JSON} Optional

      The getUserMedia() method options.audio parameter settings. When value is defined as true or an object, getUserMedia() method to be invoked to retrieve new Stream. If options.video is not defined, it will be defined as false. Object signature matches the options.audio parameter in the getUserMedia() method.

    • video {Boolean | JSON} Optional

      The getUserMedia() method options.video parameter settings. When value is defined as true or an object, getUserMedia() method to be invoked to retrieve new Stream. If options.audio is not defined, it will be defined as false. Object signature matches the options.video parameter in the getUserMedia() method.

    • voiceActivityDetection {Boolean} Optional
      DEFAULT: true

      The flag if voice activity detection should be enabled. This can only be toggled if User is and for the offerer, which is determined if User's peerInfo.config.priorityWeight is higher than Peer's.

      This works hand-in-hand with the options.disableComfortNoiseCodec flag in the init() method and the options.audio.usedtx setting in getUserMedia() method. VAD (voice activity detection) detects if there is an active voice in the Stream, and if there is no active voice in the Stream, the options.audio.usedtx (if enabled) would prevent sending these empty bits. To prevent huge differences when there is a silence and an active voice later, the CN codec would produce an empty voice to make it sound better.
    • bandwidth {JSON} Optional
      Note that this is currently not supported with Firefox browsers versions 48 and below as noted in an existing bugzilla ticket here.
      The configuration to set the maximum streaming bandwidth to send to Peers.
      • audio {Number} Optional
        The maximum audio streaming bandwidth sent to Peers in kbps. Recommended values are 50 to 200. 50 is sufficient enough for an audio call. The higher you go if you want clearer audio and to be able to hear music streaming.
      • video {Number} Optional
        The maximum video streaming bandwidth sent to Peers. Recommended values are 256-500 for 180p quality, 500-1024 for 360p quality, 1024-2048 for 720p quality and 2048-4096 for 1080p quality.
      • data {Number} Optional
        The maximum data streaming bandwidth sent to Peers. This affects the P2P messaging in sendP2PMessage() method, and data transfers in sendBlobData() method and sendURLData() method.
    • googleXBandwidth {JSON} Optional
      Note that this is an experimental configuration and may cause disruptions in connections or connectivity issues when toggled, or may not work depending on browser supports. Currently, this only toggles the video codec bandwidth configuration.
      The configuration to set the experimental google video streaming bandwidth sent to Peers. Note that Peers may override the "receive from" streaming bandwidth depending on the Peers configuration.
      • min {Number} Optional
        The minimum experimental google video streaming bandwidth sent to Peers. This toggles the "x-google-min-bitrate" flag in the session description.
      • max {Number} Optional
        The maximum experimental google video streaming bandwidth sent to Peers. This toggles the "x-google-max-bitrate" flag in the session description.
    • manualGetUserMedia {Boolean} Optional

      The flag if joinRoom() should trigger mediaAccessRequired event in which the getUserMedia() Stream or shareScreen() Stream must be retrieved as a requirement before Room session may begin. This ignores the options.audio and options.video configuration. After 30 seconds without any Stream retrieved, this results in the callback(error, ..) result.

    • sdpSettings {JSON} Optional
      Note that this is mainly used for debugging purposes and that it is an experimental flag, so it may cause disruptions in connections or connectivity issues when toggled. Note that it might not work with MCU enabled Peer connections or break MCU enabled Peer connections.
      The configuration to set the session description settings.
      • connection {JSON} Optional
        The configuration to set the session description connection settings. Note that this configuration may disable the media streaming and these settings will be enabled for MCU server Peer connection regardless of the flags configured.
      • connection.audio {Boolean} Optional
        DEFAULT: true The configuration to enable audio session description connection.
      • connection.video {Boolean} Optional
        DEFAULT: true The configuration to enable video session description connection.
      • connection.data {Boolean} Optional
        DEFAULT: true The configuration to enable Datachannel session description connection.
      • direction {JSON} Optional
        The configuration to set the session description connection direction to enable or disable uploading and downloading audio or video media streaming. Note that this configuration does not prevent RTCP packets from being sent and received.
      • direction.audio {JSON} Optional
        The configuration to set the session description connection direction for audio streaming.
      • direction.audio.send {Boolean} Optional
        DEFAULT: true The flag if uploading audio streaming should be enabled when available.
      • direction.audio.receive {Boolean} Optional
        DEFAULT: true The flag if downloading audio streaming should be enabled when available.
      • direction.video {JSON} Optional
        The configuration to set the session description connection direction for video streaming.
      • direction.video.send {Boolean} Optional
        DEFAULT: true The flag if uploading video streaming should be enabled when available.
      • direction.video.receive {Boolean} Optional
        DEFAULT: true The flag if downloading video streaming should be enabled when available.
    • publishOnly {JSON | Boolean} Optional
      For MCU enabled Peer connections, defining this flag would make Peer not know other Peers presence in the Room.
      For non-MCU enable Peer connections, defining this flag would cause other Peers in the Room to not to send Stream to Peer, and overrides the config options.sdpSettings.direction.audio.receive value to false, options.sdpSettings.direction.video.receive value to false, options.sdpSettings.direction.video.send value to true and options.sdpSettings.direction.audio.send value to true.
      Note that this feature is currently is beta, and for any enquiries on enabling and its support for MCU enabled Peer connections, please contact our support portal.
      The config if Peer would publish only.
      • parentId {String} Optional
        Deprecation Warning! This property has been deprecated. Use options.parentId instead.
        The parent Peer ID to match to when Peer is connected. This is useful for identification for users connecting the Room twice simultaneously for multi-streaming. If User Peer ID matches the parent Peer ID provided from Peer, User will not be connected to Peer.
    • parentId {String} Optional

      The parent Peer ID to match to when Peer is connected. Note that configuring this value overrides the options.publishOnly.parentId value. This is useful for identification for users connecting the Room twice simultaneously for multi-streaming. If User Peer ID matches the parent Peer ID provided from Peer, User will not be connected to Peer.

    • peerConnection {JSON} Optional
      Note that this is mainly used for debugging purposes, so it may cause disruptions in connections or connectivity issues when configured.
      The Peer connection constraints settings.
      • iceCandidatePoolSize {Number} Optional
        DEFAULT: 0 The number of ICE candidates to gather before gathering it when setting local offer / answer session description.
    • autoBandwidthAdjustment {Boolean | JSON} Optional
      DEFAULT: false
      Note that this is an experimental feature which may be removed or changed in the future releases. This feature is also only available for non-MCU enabled Peer connections and Edge Peer connections.
      The flag if Peer connections uploading and downloading bandwidth should be automatically adjusted each time based on a specified interval. Note this would cause peerRestart event to be triggered for each specified interval.
      • interval {Number} Optional
        DEFAULT: 10 The interval each time to adjust bandwidth connections in seconds. Note that the minimum value is 10.
      • limitAtPercentage {Number} Optional
        DEFAULT: 100 The percentage of the average bandwidth to adjust to. E.g. avgBandwidth * (limitPercentage / 100).
      • useUploadBwOnly {Boolean} Optional
        DEFAULT: false The flag if average bandwidth computation should only consist of the upload bandwidth.
  • [options.peerConnection.bundlePolicy] The Peer connection media bundle policy. - When not provided, its value is <code>BALANCED</code>. [Rel: Skylink.BUNDLE_POLICY] {String}
  • [options.peerConnection.rtcpMuxPolicy] The Peer connection RTP and RTCP ICE candidates mux policy. - When not provided, its value is <code>REQUIRE</code>. [Rel: Skylink.RTCP_MUX_POLICY] {String}
  • [options.peerConnection.certificate] The type of certificate that Peer connection should generate and use when available. - When not provided, its value is <code>AUTO</code>. [Rel: Skylink.PEER_CERTIFICATE] {String}
  • callback {Function} Optional

    The callback function fired when request has completed. Function parameters signature is function (error, success) Function request completion is determined by the peerJoined event triggering isSelf parameter payload value as true 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.
      • 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 the peerInfo parameter payload received in the peerJoined event.
  • [callback.error.errorCode] The current <a href="#method_init"><code>init()</code> method</a> ready state. <small>Defined as <code>null</code> when no <a href="#method_init"><code>init()</code> method</a> has not been called due to invalid configuration.</small> [Rel: Skylink.READY_STATE_CHANGE] {Number}

leaveRoom

( [stopMediaOptions=true] ,   [callback] ,   )
  Defined in: source/room-connection.js:477      Available since 0.5.5
Note that this method will close any existing socket channel connection despite not being in the Room.
Function that stops Room session.

Events Sequence:

  1. If Socket connection is opened:
    1. channelClose event triggers.
  2. Checks if User is in Room.
    1. If User is not in a Room:
      1. ABORT and return error.
    2. Else:
      1. If parameter stopMediaOptions.userMedia value is true:
        1. Invoke stopStream() method. Regardless of request errors, leaveRoom() will still proceed.
      2. If parameter stopMediaOptions.screenshare value is true:
        1. Invoke stopScreen() method. Regardless of request errors, leaveRoom() will still proceed.
      3. peerLeft event triggers for User and all connected Peers in Room.
      4. If MCU is enabled for the App Key provided in init() method and connected:
        1. serverPeerLeft event triggers parameter payload serverPeerType as MCU.

Parameters:

  • stopMediaOptions {Boolean | JSON} Optional
    DEFAULT: true

    The flag if leaveRoom() should stop both shareScreen() Stream and getUserMedia() Stream.

    • When provided as a boolean, this sets both stopMediaOptions.userMedia and stopMediaOptions.screenshare to its boolean value.
  • callback {Function} Optional

    The callback function fired when request has completed. Function parameters signature is function (error, success) Function request completion is determined by the peerLeft event triggering isSelf parameter payload value as true for request success.

    • error {Error | String}

      The error result in request. Defined as null when there are no errors in request Object signature is the leaveRoom() 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

()
  Defined in: source/room-connection.js:593      Available since 0.5.0
Note that broadcasted events from muteStream() method, stopStream() method, stopScreen() method, sendMessage() method, unlockRoom() method and lockRoom() method may be queued when sent within less than an interval.
Function that locks the current Room when in session to prevent other Peers from joining the Room.

Events Sequence:

  1. Requests to Signaling server to lock Room
    1. roomLock event triggers parameter payload isLocked value as true.

muteStream

( options ,   )
  Defined in: source/stream-media.js:868      Available since 0.5.7
Note that broadcasted events from muteStream() method, stopStream() method, stopScreen() method, sendMessage() method, unlockRoom() method and lockRoom() method may be queued when sent within less than an interval.
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:

  1. If provided parameter options is invalid:
    1. ABORT and return error.
  2. Checks if there is any available Streams:
    1. If there is no available Streams:
      1. ABORT and return error.
    2. If User is in Room:
      1. Checks if there is audio tracks to mute / unmute:
        1. If there is audio tracks to mute / unmute:
          1. If options.audioMuted value is not the same as the current peerInfo.mediaStatus.audioMuted: This can be retrieved with getPeerInfo() method.
            1. For Peer only peerUpdated event triggers with parameter payload isSelf value as false.
            2. For Peer only streamMuted event triggers with parameter payload isSelf value as false.
      2. Checks if there is video tracks to mute / unmute:
        1. If there is video tracks to mute / unmute:
          1. If options.videoMuted value is not the same as the current peerInfo.mediaStatus.videoMuted: This can be retrieved with getPeerInfo() method.
            1. For Peer only peerUpdated event triggers with parameter payload isSelf value as false.
            2. For Peer only streamMuted event triggers with parameter payload isSelf value as false.
    3. If options.audioMuted value is not the same as the current peerInfo.mediaStatus.audioMuted or options.videoMuted value is not the same as the current peerInfo.mediaStatus.videoMuted:
      1. localMediaMuted event triggers.
      2. If User is in Room:
        1. streamMuted event triggers with parameter payload isSelf value as true.
        2. peerUpdated event triggers with parameter payload isSelf value as true.

Parameters:

  • options {JSON}

    The Streams muting options.

    • audioMuted {Boolean} Optional
      DEFAULT: true

      The flag if all Streams audio tracks should be muted or not.

    • videoMuted {Boolean} Optional
      DEFAULT: true

      The flag if all Streams video tracks should be muted or not.


off

( [eventName] ,   [callback] ,   )
  Defined in: source/skylink-events.js:1386      Available since 0.5.5

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} Optional

    The event.

    • When not provided, all listeners to all events will be unsubscribed.
  • callback {Function} Optional

    The listener to unsubscribe.

    • When not provided, all listeners associated to the event will be unsubscribed.

on

( eventName ,   callback ,   )
  Defined in: source/skylink-events.js:1307      Available since 0.1.0

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] ,   )
  Defined in: source/skylink-events.js:1331      Available since 0.5.4

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} Optional

    The 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 return true.

  • fireAlways {Boolean} Optional
    DEFAULT: false

    The flag that indicates if once() should act like on() but only invoke listener only when conditional function is satisfied.


refreshConnection

( [targetPeerId] ,   [iceRestart=false] ,   [options] ,   [callback] ,   )
  Defined in: source/peer-connection.js:152      Available since 0.5.5
Note that Edge browser does not support renegotiation. For MCU enabled Peer connections with options.mcuUseRenegoRestart set to false in the init() method, the restart functionality may differ, you may learn more about how to workaround it in this article here. For restarts with Peers connecting from Android, iOS or C++ 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. For a better user experience for only MCU enabled Peer connections, the functionality is throttled when invoked many times in less than the milliseconds interval configured in the init() method.
Function that refreshes Peer connections to update with the current streaming.

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); } }); }

// Example 4: Refresh Peer connection when ICE connection has failed or disconnected // and do a ICE connection refresh (only for non-MCU case) skylinkDemo.on("iceConnectionState", function (state, peerId) { if (!usesMCUKey && [skylinkDemo.ICE_CONNECTION_STATE.FAILED, skylinkDemo.ICE_CONNECTION_STATE.DISCONNECTED].indexOf(state) > -1) { skylinkDemo.refreshConnection(peerId, true); } });

Events Sequence:

  1. Checks if MCU is enabled for App Key provided in init() method
    1. If MCU is enabled:
      1. If there are connected Peers in the Room:
        1. peerRestart event triggers parameter payload isSelfInitiateRestart value as true for all connected Peer connections.
        2. serverPeerRestart event triggers for connected MCU server Peer connection.
      2. If options.mcuUseRenegoRestart value is false set in the init() method:
        1. 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.
          1. If request has errors
            1. ABORT and return error.
    2. Else:
      1. If there are connected Peers in the Room:
        1. Refresh connections for all targeted Peers.
          1. If Peer connection exists:
            1. peerRestart event triggers parameter payload isSelfInitiateRestart value as true for all targeted Peer connections.
          2. Else:
            1. ABORT and return error.

Parameters:

  • targetPeerId {String | Array} Optional
    Note that this is ignored if MCU is enabled for the App Key provided in init() method. refreshConnection() will "refresh" all Peer connections. See the Event Sequence for more information.
    The 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.
  • iceRestart {Boolean} Optional
    DEFAULT: false
    Note that this flag will not be honoured for MCU enabled Peer connections where options.mcuUseRenegoRestart flag is set to false as it is not necessary since for MCU "restart" case is to invoke joinRoom() method again, or that it is not supported by the MCU.
    The flag if ICE connections should restart when refreshing Peer connections. This is used when ICE connection state is FAILED or DISCONNECTED, which state can be retrieved with the iceConnectionState event.
  • options {JSON} Optional
    Note that for MCU connections, the bandwidth or googleXBandwidth settings will override for all Peers or the current Room connection session settings.
    The custom Peer configuration settings.
    • bandwidth {JSON} Optional

      The configuration to set the maximum streaming bandwidth to send to Peers. Object signature follows joinRoom() method options.bandwidth settings.

    • googleXBandwidth {JSON} Optional

      The configuration to set the experimental google video streaming bandwidth sent to Peers. Object signature follows joinRoom() method options.googleXBandwidth settings.

  • callback {Function} Optional

    The callback function fired when request has completed. Function parameters signature is function (error, success) Function request completion is determined by the peerRestart event triggering isSelfInitiateRestart parameter payload value as true 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.
      • refreshSettings {JSON}
        The list of Peer connection refresh settings.
      • refreshSettings.#peerId {JSON}
        The Peer connection refresh settings associated with the Peer ID defined in #peerId property.
      • refreshSettings.#peerId.iceRestart {Boolean}
        The flag if ICE restart is enabled for this Peer connection refresh session.
      • refreshSettings.#peerId.customSettings {JSON}
        The Peer connection custom settings. Object signature follows getPeersCustomSettings method returned per #peerId object.
    • success {JSON}

      The success result in request. Defined as null when there are errors in request

      • listOfPeers {Array}
        The list of Peer IDs targeted.
      • refreshSettings {JSON}
        The list of Peer connection refresh settings.
      • refreshSettings.#peerId {JSON}
        The Peer connection refresh settings associated with the Peer ID defined in #peerId property.
      • refreshSettings.#peerId.iceRestart {Boolean}
        The flag if ICE restart is enabled for this Peer connection refresh session.
      • refreshSettings.#peerId.customSettings {JSON}
        The Peer connection custom settings. Object signature follows getPeersCustomSettings method returned per #peerId object.

sendBlobData

( data ,   [timeout=60] ,   [targetPeerId] ,   [sendChunksAsBinary=false] ,   [callback] ,   )
  Defined in: source/data-transfer.js:170      Available since 0.5.5

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:

  1. Checks if User is in Room.
    1. If User is not in Room:
      1. dataTransferState event triggers parameter payload state as START_ERROR.
      2. ABORT step and return error.
  2. Checks if there is any available Datachannel connections.
    1. If User is not in Room:
      1. dataTransferState event triggers parameter payload state as START_ERROR.
      2. ABORT step and return error.
  3. Checks if provided data parameter is valid.
    1. If it is invalid:
      1. dataTransferState event triggers parameter payload state as START_ERROR.
      2. ABORT step and return error.
  4. Checks if Peer connection and Datachannel connection are in correct states.
    1. If Peer connection or session does not exists:
      1. dataTransferState event triggers parameter payload state as ERROR.
      2. ABORT step and return error.
    2. If Peer connection is not stable: The stable state can be checked with peerConnectionState event triggering parameter payload state as STABLE for Peer.
      1. dataTransferState event triggers parameter payload state as ERROR.
      2. ABORT step and return error.
    3. If Peer connection messaging Datachannel has not been opened: This can be checked with dataChannelState event triggering parameter payload state as OPEN and channelType as MESSAGING for Peer.
      1. dataTransferState event triggers parameter payload state as ERROR.
      2. ABORT step and return error.
    4. If MCU is enabled for the App Key provided in init()method and connected:
      1. If MCU Peer connection is not stable: The stable state can be checked with peerConnectionState event triggering parameter payload state as STABLE and peerId value as "MCU" for MCU Peer.
        1. dataTransferState event triggers parameter payload state as ERROR.
        2. ABORT step and return error.
      2. If MCU Peer connection messaging Datachannel has not been opened: This can be checked with dataChannelState event triggering parameter payload state as OPEN, peerId value as "MCU" and channelType as MESSAGING for MCU Peer.
        1. dataTransferState event triggers parameter payload state as ERROR.
        2. ABORT step and return error.
    5. Checks if should open a new data Datachannel.
      1. If Peer supports simultaneous data transfer, open new data Datachannel: If MCU is connected, this opens a new data Datachannel with MCU Peer with all the Peers IDs information that supports simultaneous data transfers targeted for the data transfer session instead of opening new data Datachannel with all Peers targeted for the data transfer session.
        1. dataChannelState event triggers parameter payload state as CONNECTING and channelType as DATA. Note that there is no timeout to wait for parameter payload state to be OPEN.
        2. If Datachannel has been created and opened successfully:
          1. dataChannelState event triggers parameter payload state as OPEN and channelType as DATA.
        3. Else:
          1. dataChannelState event triggers parameter payload state as CREATE_ERROR and channelType as DATA.
          2. dataTransferState event triggers parameter payload state as ERROR.
          3. ABORT step and return error.
      2. Else: If MCU is connected, this uses the messaging Datachannel with MCU Peer with all the Peers IDs information that supports simultaneous data transfers targeted for the data transfer session instead of using the messaging Datachannels with all Peers targeted for the data transfer session.
        1. If messaging Datachannel connection has a data transfer in-progress:
          1. dataTransferState event triggers parameter payload state as ERROR.
          2. ABORT step and return error.
        2. If there is any conflicting streamData() method data streaming session: If sendChunksAsBinary is provided as true, it cannot start if existing data streaming session is expected binary data chunks, and if provided as false, or method invoked is sendURLData() method, or Peer is using string data chunks fallback due to its support despite provided as true, it cannot start if existing data streaming session is expected string data chunks.
          1. dataTransferState event triggers parameter payload state as ERROR.
          2. ABORT step and return error.
  5. Starts the data transfer to Peer.
    1. incomingDataRequest event triggers.
    2. For User only dataTransferState event triggers parameter payload state as USER_UPLOAD_REQUEST.
    3. For Peer only dataTransferState event triggers parameter payload state as UPLOAD_REQUEST.
    4. Peer invokes acceptDataTransfer() method.
      1. If parameter accept value is true:
        1. User starts upload data transfer to Peer.
          1. For User only dataTransferState event triggers parameter payload state as UPLOAD_STARTED.
          2. For Peer only dataTransferState event triggers parameter payload state as DOWNLOAD_STARTED.
        2. If Peer / User invokes cancelDataTransfer() method:
          1. dataTransferState event triggers parameter state as CANCEL.
          2. ABORT step and return error.
        3. If data transfer has timeout errors:
          1. dataTransferState event triggers parameter state as ERROR.
          2. ABORT step and return error.
        4. Checks for Peer connection and Datachannel connection during data transfer:
          1. If MCU is enabled for the App Key provided in init() method and connected:
            1. If MCU Datachannel has closed abruptly during data transfer:
                This can be checked with dataChannelState event triggering parameter payload state as CLOSED, peerId value as "MCU" and channelType as DATA for targeted Peers that supports simultaneous data transfer or MESSAGING for targeted Peers that do not support it.
                1. dataTransferState event triggers parameter state as ERROR.
                2. ABORT step and return error.
            2. If MCU Peer connection has changed from not being stable:
                This can be checked with peerConnection event triggering parameter payload state as not STABLE, peerId value as "MCU".
                1. dataTransferState event triggers parameter state as ERROR.
                2. ABORT step and return error.
            3. If Peer connection has changed from not being stable:
                This can be checked with peerConnection event triggering parameter payload state as not STABLE.
                1. dataTransferState event triggers parameter state as ERROR.
                2. ABORT step and return error.
          2. Else:
            1. If Datachannel has closed abruptly during data transfer: This can be checked with dataChannelState event triggering parameter payload state as CLOSED and channelType as DATA for Peer that supports simultaneous data transfer or MESSAGING for Peer that do not support it.
              1. dataTransferState event triggers parameter state as ERROR.
              2. ABORT step and return error.
        5. If data transfer is still progressing:
          1. For User only dataTransferState event triggers parameter payload state as UPLOADING.
          2. For Peer only dataTransferState event triggers parameter payload state as DOWNLOADING.
        6. If data transfer has completed
          1. incomingData event triggers.
          2. For User only dataTransferState event triggers parameter payload state as UPLOAD_COMPLETED.
          3. For Peer only dataTransferState event triggers parameter payload state as DOWNLOAD_COMPLETED.
      2. If parameter accept value is false:
        1. For User only dataTransferState event triggers parameter payload state as REJECTED.
        2. For Peer only dataTransferState event triggers parameter payload state as USER_REJECTED.
        3. ABORT step and return error.

Parameters:

  • data {Blob}

    The Blob object.

  • timeout {Number} Optional
    DEFAULT: 60

    The timeout to wait for response from Peer.

  • targetPeerId {String | Array} Optional

    The 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.
  • sendChunksAsBinary {Boolean} Optional
    DEFAULT: false
    Note that this is currently not supported for MCU enabled Peer connections or Peer connections connecting from Android, iOS and Linux SDKs. This would fallback to transferInfo.chunkType to BINARY_STRING when MCU is connected.
    The flag if data transfer binary data chunks should not be encoded as Base64 string during data transfers.
  • callback {Function} Optional

    The callback function fired when request has completed. Function parameters signature is function (error, success) Function request completion is determined by the dataTransferState event triggering state parameter payload as UPLOAD_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}
        The data transfer ID. Defined as null when sendBlobData() fails to start data transfer.
      • 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 the transferInfo parameter payload received in the dataTransferState event except without the percentage and data property.
    • success {JSON}

      The success result in request. Defined as null when there are errors in request

      • transferId {String}
        The data transfer ID.
      • listOfPeers {Array}
        The list Peer IDs targeted for the data transfer.
      • transferInfo {JSON}
        The data transfer information. Object signature matches the transferInfo parameter payload received in the dataTransferState event except without the percentage property and data.

sendMessage

( message ,   [targetPeerId] ,   )
  Defined in: source/socket-message.js:70      Available since 0.4.0
Note that broadcasted events from muteStream() method, stopStream() method, stopScreen() method, sendMessage() method, unlockRoom() method and lockRoom() method may be queued when sent within less than an interval.
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:

  1. Sends socket connection message to all targeted Peers via Signaling server.
    1. incomingMessage event triggers parameter payload message.isDataChannel value as false.

Parameters:

  • message {String | JSON}

    The message.

  • targetPeerId {String | Array} Optional

    The 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] ,   )
  Defined in: source/data-transfer.js:821      Available since 0.5.5

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: Broadcasting to all Peers skylinkDemo.on("dataChannelState", function (state, peerId, error, channelName, channelType) { if (state === skylinkDemo.DATA_CHANNEL_STATE.OPEN && channelType === skylinkDemo.DATA_CHANNEL_TYPE.MESSAGING) { 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) { var readyToSend = []; for (var p in peersInExclusiveParty) { if (peersInExclusiveParty.hasOwnProperty(p)) { readyToSend.push(p); } } skylinkDemo.sendP2PMessage(message, readyToSend); }

Events Sequence:

  1. Sends P2P message to all targeted Peers.
    1. If Peer connection Datachannel has not been opened: This can be checked with dataChannelState event triggering parameter payload state as OPEN and channelType as MESSAGING for Peer.
      1. dataChannelState event triggers parameter payload state as SEND_MESSAGE_ERROR.
      2. ABORT step and return error.
    2. incomingMessage event triggers parameter payload message.isDataChannel value as true and isSelf value as true.

Parameters:

  • message {String | JSON}

    The message.

  • targetPeerId {String | Array} Optional

    The 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 with Datachannel connection in the Room.

sendStream

( options ,   [callback] ,   )
  Defined in: source/stream-media.js:608      Available since 0.5.6
Note that if shareScreen() Stream is available despite having getUserMedia() Stream available, the shareScreen() Stream is sent instead of the getUserMedia() Stream to Peers.
Function that sends a new 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:

  1. If User is not in Room:
    1. ABORT and return error.
  2. Checks options provided.
    1. If provided parameter options is not valid:
      1. ABORT and return error.
    2. Else if provided parameter options is a Stream object:
      1. Checks if there is any audio or video tracks.
        1. If there is no tracks:
          1. ABORT and return error.
        2. Else:
          1. Set options.audio value as true if Stream has audio tracks.
          2. Set options.video value as false if Stream has video tracks.
          3. Mutes / Unmutes audio and video tracks based on current muted settings in peerInfo.mediaStatus. This can be retrieved with getPeerInfo() method.
          4. If there is any previous getUserMedia() Stream:
            1. Invokes stopStream() method to stop previous Stream.
          5. mediaAccessSuccess event triggers parameter payload isScreensharing value as false and isAudioFallback value as false.
    3. Else:
      1. Invoke getUserMedia() method with options provided in sendStream().
        1. If request has errors:
          1. ABORT and return error.
  3. If there is currently no shareScreen() Stream:
    1. incomingStream event triggers parameter payload isSelf value as true and stream as getUserMedia() Stream.
    2. peerUpdated event triggers parameter payload isSelf value as true.
    3. Checks if MCU is enabled for App Key provided in init() method.
      1. If MCU is enabled:
        1. Invoke refreshConnection() method.
          1. If request has errors:
            1. ABORT and return error.
      2. Else:
        1. If there are connected Peers in the Room:
          1. Invoke refreshConnection() method.
            1. If request has errors:
              1. ABORT and return error.

Parameters:

  • options {JSON | MediaStream}

    The getUserMedia() method options parameter settings.

    • When provided as a MediaStream object, this configures the options.audio and options.video based on the tracks available in the MediaStream object, and configures the options.audio.mute and options.video.mute based on the tracks .enabled flags in the tracks provided in the MediaStream object without invoking getUserMedia() method. Object signature matches the options parameter in the getUserMedia() method.
  • callback {Function} Optional

    The callback function fired when request has completed. Function parameters signature is function (error, success) Function request completion is determined by the mediaAccessSuccess event triggering isScreensharing parameter payload value as false for request success when User is in Room without Peers, or by the peerRestart event triggering isSelfInitiateRestart parameter payload value as true for all connected Peers for request success when User is in Room with Peers.

    • error {Error | String}

      The error result in request. Defined as null when there are no errors in request Object signature is the getUserMedia() method error or when invalid options is provided.

    • success {MediaStream}

      The success result in request. Defined as null when there are errors in request Object signature is the getUserMedia() method Stream object.


sendURLData

( data ,   [timeout=60] ,   [targetPeerId] ,   [callback] ,   )
  Defined in: source/data-transfer.js:422      Available since 0.6.1

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 follows sendBlobData() method.

Parameters:

  • data {String}

    The data string to transfer to Peer.

  • timeout {Number} Optional
    DEFAULT: 60

    The timeout to wait for response from Peer.

  • targetPeerId {String | Array} Optional

    The 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} Optional

    The callback function fired when request has completed. Function parameters signature is function (error, success) Function request completion is determined by the dataTransferState event triggering state parameter payload as UPLOAD_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}