Link to Github: https://github.com/Temasys/SkylinkJS/releases/tag/0.6.1


Dependencies

  • Socket.io 1.3.5
  • AdapterJS 0.12.1


CDN links (gzipped)


API Documentation

http://cdn.temasys.com.sg/skylink/skylinkjs/0.6.1/doc/classes/Skylink.html


New Features

Simultaneous Data Transfers

This is a new feature that allows users to send multiple simultaneous Data Transfers by opening new DataChannel connections for particular transfers.

  • Added a new attribute called DATA_CHANNEL_TYPE for identifying the types of DataChannel connection it's used for.


Target multiple Peers

This is a new feature that allows users to send private messages / transfers to certain targeted Peers by passing in an array of targeted Peers. This is available in refreshConnection(), sendP2PMessage(), sendMessage(), sendBlobData(), sendURLData().


Identification of server Peers

This is a new feature that allow developers to know when a server Peer has joined the room.

  • Added a new attribute called SERVER_PEER_TYPE for identifying the types of server Peer. This list will be populated eventually when there are new types available.
  • Added a new event called serverPeerJoined for identifying the state when a server Peer has joined the room.
  • Added a new event called serverPeerLeft for identifying the state when a server Peer has left the room.
  • Added a new event called serverPeerRestart for identifying the state when a server Peer connection has been refreshed (restarted).


Privileged Key Scheme

This is a feature that allows privileged Peers to have the ability to introduce unprivileged Peers who does not know any peers in the room except what the privileged Peers introduces. This is currently unofficially released. You may configure the privileged key feature by toggling the isPrivileged for alias Application Keys to true to make any Peer using the key become a privileged Peer.

  • Added a new attribute called GET_PEERS_STATE for identifying the states of getPeers() when retrieving the list unprivileged Peers in a room.
  • Added a new attribute called INTRODUCE_STATE for identifying the states of introducePeer() when introducing one unprivileged Peer to another unprivileged Peer. This would work for introducing privileged Peers as well.
  • Added a new method called getPeers() that allows privileged Peers to get the list of unprivileged / privileged Peers in the room.
  • Added a new method called introducePeer() that allows privileged Peers to introduce an unprivileged Peer to another unprivileged Peer. Privileged Peers is also able to introduce other Peers to other privileged Peers.
  • Added a new event called getPeersStateChange that identifies the state of getPeers().
  • Added a new event called introduceStateChange that identifies the state of introducePeer().


Improvements

Documentation / Testing


Room

  • joinRoom() would allow seamless Stream connection without stopping the previously attached Stream unless media constraints are passed in the options to refetch and attach a new Stream.
  • leaveRoom() method takes in a new optional parameter stopUserMedia that by default is true. It is a flag that tells Skylink not to stop self Stream when leaving the room.
  • Added a new configuration setting in init() called forceTURNSSL that causes any TURN server connections to use port 443 SSL connections always. If turns: protocol is supported, it will use the turns: protocol.
  • Added a new configuration setting in init() called forceTURN that forces TURN server connection always. This will reset configuration settings for enableSTUNServer and enableTURNServer.
  • Added a new configuration setting in init() called usePublicSTUN that allows Skylink to use and connect using public STUN server instead of Skylink's platform own.
  • When video stream is not available for Room connection, the connection stream would fallback to audio only Stream connection in joinRoom().
  • Added a new option in TURN_TRANSPORT called ALL which allows connectivity with all transports and none.
  • Removed options in SYSTEM_ACTION_REASON as they are no longer in use. FAST_MESSAGE, ROOM_FULL, VERIFICATION and OVER_SEAT_LIMIT.
  • Removed options in READY_STATE_CHANGE_ERROR as they are no longer in use. API_NOT_ENOUGH_CREDIT, API_NOT_ENOUGH_PREPAID_CREDIT, API_FAILED_FINDING_PREPAID_CREDIT.
  • Added room parameter in readyStateChange event to identify which room is the connection information retrieved for.
  • Fixed callback function with consistent payloads in init(), joinRoom() and leaveRoom().
  • Added more errors in callback function for init() when XMLHttpRequest fails and joinRoom() when init() or getUserMedia() fails.


Stream

  • Added a new event called streamMuted that triggers when a Stream audio / video streaming muted status has been changed. This would still trigger if self has not joined the room.
  • Added a new config.video.optional and config.audio.optional settings in method getUserMedia() for advanced developers familiar with the navigator.getUserMedia() API. This is available in methods joinRoom() and sendStream() as well.
  • peerInfo video information should contain a flag called screenshare that indicates if the Stream video streaming is a screensharing stream. When it is a screensharing Stream, it should display the Stream audio and video status as well.
  • shareScreen method takes in a new optional parameter enableAudio that by default is true. It is a flag that tells Skylink if the screensharing stream should contain audio or not.
  • mediaAccessError, mediaAccessStopped, streamEnded, streamMuted should contain the isScreensharing flag that indicates if Stream is a screensharing stream or not.
  • Fixed callback function with consistent payloads in shareScreen(), getUserMedia() and sendStream().


Peer

  • Added a new room information in the peerInfo data (or the returned data in getPeerInfo()) that would display the current room that the Peer is connected to.
  • Added a new agent.os information in the peerInfo data (or the returned data in getPeerInfo()) that would display the operating system (or platform) that the PeerConnection peer is on.
  • Added refreshConnection() and shareScreen() functionality for MCU connection. refreshConnection() would enable self to leave and join the room again.
  • Fixed callback function with consistent payloads in refreshConnection(), getPeers().


Data

  • Added a new method called sendURLData() that allow developers to send base64 encoded data URL.
  • transferInfo information should contain a flag called isPrivate that indicates if Data Transfer is a targeted transfer or a broadcasted transfer.
  • transferInfo information should contain a string called dataType that indicates if Data Transfer data is a "blob" for Blob type of transfers sent using sendBlobData() or a "dataURL" for data URL type of transfers using sendURLData().
  • Added a new event called incomingData that triggers when data is received from PeerConnection peer.
  • Added a new event called incomingDataRequest that triggers when data transfer request is made from PeerConnection peer.
  • Fixed callback function with consistent payloads in sendBlobData(), sendURLData().


IE 9 - 10 Support

While we do much support for IE 9 - 10, it's recommended that developers do not add attributes or methods that is not supported for <object> DOM elements that are for <video> and <audio> DOM elements. We have polyfilled Object.keys, Date.getISOString() and addEventListener to make sure it runs fine in Skylink.


Socket

  • Automatically connect using "Polling" instead of "WebSocket" is WebSocket is not supported.



Bug-fixes

Documentation / Testing

  • Fixed most documentation errors      e.g. iceConnectionState event is missing
  • Fixed most test errors (although there are still some).
  • "Scroll to Top" button should scroll to the top.


Room

  • joinRoom() should always trigger incomingStream when there is a Stream sending if self is rejoining the room multiple times.
  • If room parameter is not provided, it should always connect to the defaultRoom provided in the init() options.
  • Connection should not be interrupted with streamEnded event.
  • Configuring TURN_TRANSPORT.UDP or TURN_TRANSPORT.TCP in init() should not break connection.


Peer

  • getPeerInfo() should return exact Stream information when information has already been updated.


Stream

  • enableVideo() and enableAudio() should not work if no Stream is present.
  • muteStream() should update the audioMuted and videoMuted status correctly. This causes the enableVideo() and enableAudio() bugs.



Things that Developers should take note of

Changes required to make when integrating 0.6.1

  • respondBlobRequest would take in a mandatory transferId field in order to respond to the incoming transfers.
  • cancelBlobRequest would take in a mandatory transferId field and not `transferType` field in order to cancel the existing transfers.


Deprecation

These functionalities might be removed in next releases. 

  • enableAudio(), disableAudio(), enableVideo() and disableVideo() is deprecated from 0.5.x versions. Please use muteStream().
  • respondBlobRequest() is deprecated from 0.6.1. Please use acceptDataTransfer().
  • cancelBlobRequest() is deprecated from 0.6.1. Please use cancelDataTransfer().
  • region option configuration in the init() is deprecated from 0.6.1. Signaling server selection would be handled on the server side based on load and latency.