Release information for libcct

0.19.0-rc1 (Mar 23, 2017)

This version introduces a complete overhaul to the way conferences manage themselves internally. As the version stabilizes there should be significant improvements to most aspects of conferences. The most noticable changes should be the consistency of the members across the conference, and the speed at which disconnected conference members disappear.

WebRTC

  • ICE candidate handling now uses the log category ‘candidates’.

Base API

  • Added InvalidPasswordError as possible error when trying to set a password, and updated the logic for InvalidUsernameError.
  • Fall back to using console.log if console.debug isn’t available.
  • New default log handler for browsers other than Chrome and Firefox.
  • Documented custom log handler functions.

Internal

  • Moved unit and integration tests to common tests/ folder.
  • Updated README documentation for how to build, install, and test.
  • Argument checking functions now return the value being checked.
  • Added argument checking shorthand where a class instance can be used when checking arguments to the constructor.

0.19.0-rc2 (Apr 02, 2017)

WebRTC

  • Added device enumeration API at DeviceSource.enumerateDevices.
  • [minor api change] Removed screenSharingType from ScreenSource options. The screen sharing implementation is now selected with ScreenSource.implementation.
  • Added screen source enumeration API at ScreenSource.enumerateSource, which is only available in IE and Safari.
  • Added ScreenSource.isAvailable to check if screen sharing is supported.
  • Fix webRtcReady.
  • All concrete media sources are now stopped if the backing stream is inactivated.
  • Passive calls now ignore connection attempts from peers that have recently been disconnected, fixing a race condition that could result in no call being set up.
  • Better logging with more information and logging of relevant objects.
  • Fix an error where the conference topology tracking was not properly reset by the leader when a peer rejoined.
  • Fixed an internal conference error where a null state was being accessed.
  • All conference members now keep better track of users that want to join, in case they need to invite them in the future. This makes joining conferences more reliable.
  • Fix an bug that caused conference connections to be considered connected even though they weren’t.

Build

  • Added separate devtools library that provides utilities that are typically not meant for production applications.

Devtools

  • Added experimental RelayTreeVisualization for visualizing the relay tree in a conference.

0.19.0-rc3 (Apr 12, 2017)

Base API

  • Add missing return type in docs for ReadOnlyMap.get.

WebRTC

  • Fix a crash when using the Temasys WebRTC plugin and doing multiple implicit mediaNode.connect() calls to a stored media element reference.
  • The options object passed to DeviceSource and ScreenSource is no longer mutated, so the same object may be reused, as intended.
  • Fix false-positive error about invalid ICE server configurations.
  • Added new API for keeping track of other members of a conference, ConferencePeers, available through conference.peers.
  • Added conference.connectionState, which gives an overarching view of the state of the conference connections.
  • Conferences now emit a 'closed' event when closed.
  • Replaced experimental conference.switcher API with a new one that supports multiple different switching modes and doesn’t use room state for signaling.
  • Fix cleanup when conferences are closed by clearing some internal structures but also removing all event listeners.
  • Deprecated call.error member and event, and replaced with call.errorState. The original was removed because the event call.on('error', ...) would be emitted when the error was changed to null, which was pretty confusing. errorState is a more accurate name, as it is really a transient state that the call will try to recover from.
  • Major improvements to the reliability of the conference signaling, both when joining and while participating in conferences.
  • StreamPublisher.error and StreamSubscriber.error have also been replaced with errorState for the same reason.
  • Fix for not being able to parse media stream IDs from some versions of the Cordova WebRTC plugin.
  • Fix for data channel file transfers not working in Safari.

0.19.0-rc4 (Apr 13, 2017)

WebRTC

  • Updated ScreenSource to be compatible with new media source selection Temasys plugin.

0.19.0-rc5 (May 04, 2017)

WebRTC

  • Added voice activity based switching to conference switcher, through the 'manual/automatic' and 'automatic' modes.
  • Added workaround for freeze in ScreenSource when stopping a screen sharing stream where IE 11 was sharing itself.
  • Fix for options not being forwarded from room.startConference to the conference.
  • Added onSetupFilter and onTeardownFilter to WebAudioSource.
  • Fix for AudioContext not being passed on to WebAudioSource.onAudioSource.
  • Better handling of Firefox errors that forbid any form of access to properties.
  • Fix order in which MediaBroadcster remote source events are emitted

Devtools

  • Added tools for sending test media streams and identifying received streams. New classes are MediaIdSource, MediaIdDetector, AudioIdSource, AudioIdDetector, VideoIdSource, and VideoIdDetector.

0.19.0-rc6 (May 16, 2017)

This versions adds a new DataChannel abstraction, as well as completely rewritten internal data channel abstraction layer. Data channels have earlier been possible to use through rtcPeer.createChannel, but they had a lot of shortcomings. The internal handlings of data channels was also pretty poor in places, e.g. transmitting files would frequently lock up if trying to send too many at the same time.

In general we found that working with cross browser WebRTC data channels is hard. There are a lot of hidden issues, and the API:s are a bit too low level for typical application development.

This new implementation hides a lot of complexity and differences in browser behaviour. It adds support for more types and larger messages, while mainting low latency for small messages. It also namespaces channels, making it possible for multiple RtcComponents to use negotiated channels without risk of collision. It also makes the connection more robust, by keeping channels alive, and detecting when they stop sending or receiving messages.

WebRTC

  • [API CHANGE] Added DataChannel, accessed through rtcPeer.createChannel and rtcComponent.rtcComponentReceivedChannel. This replaces the old API.
  • [API CHANGE] Removed rtcPeer.getLocalChannels and rtcPeer.getRemoteChannels.
  • [API CHANGE] Removed rtcPeer.sendMessage and rtcComponent.rtcComponentReceivedMessage, since the component messaging is no longer enough of an improvement on top of plain channels.
  • Removed workaround for old Chrome SDP creation bug that was fixed in a patch version.
  • Fixed a bug where conference members would not get information that they were removed from a conference due to inactivity, which would cause them to hang.
  • Slight tweak that in some cases speeds up the speed at which conference members receive updates about the conference state.
  • Simplified the mechanism for adding and removing clients in a conference, making the overall signaling more robust.
  • Improved the filtering of volume levels for conference participants, which makes the automatic switcher modes a lot smoother.

Build

  • Build has been upgraded to Webpack 2, which reduces the library size by about 30kb before gzip.
  • Moved some dependencies back to devDependencies in package.json. Since we ship a compiled library they should not be downloaded when using the library as a dependency.

0.19.0-rc7 (May 18, 2017)

WebRTC

  • [API CHANGE] Removed MediaSwitcher component. It has been replaced by conference.switcher, which offers the same funcationality with a similar API.
  • Fixed for conference options not always be properly forwarded from room.startConference.
  • Fixed an issue that could cause conference members to get stuck when they should be removed.
  • Fixed a few cases of unhandled internal data channel send errors.
  • Fix for intermittent datachannel timeout not always being detected properly.

0.19.0-rc8 (May 18, 2017)

WebRTC

  • Added ThumbnailBroadcaster, which replaces MediaBroadcaster for video miniatures. It gets rid of the need to request separate media sources for high and low quality video by scaling the video internally. As well as adding support for all browsers by falling back to sending still images.
  • Updated Conference API docs.

0.19.0 (May 18, 2017)

This release finally adds a stable API for conferences and related components. The stability of conferences still need improvement, but that work can be done without changing the API. It is possible that some of the planned changes need to break compatability of the wire protocol, but the plan is to have a release that stabilizes the wire protocol as well.

WebRTC

  • Added elements property to the ThumbnailBroadcaster's SinkRenderer.
  • Complete documentation of Conference, ThumbnailBroadcaster, ConferenceSwitcher and MediaBroadcaster.
  • Automatic switching will now loop back input video when the user is alone in a conference.
  • Fixed an issue with conferences where clients could lock up and never be able to rejoin the cluster without first closing the conference.
  • Improved handling of signaling errors in the internal conference connections.
  • Fix for cleaning up lingering configuration from old conference members.
  • Fixes for cleaning up after leaving a conference.
  • [API CHANGE] Updated MediaBroadcaster API to be more similar to ThumbnailBroadcaster and easier to use.

Documentation

  • Added back a lot of missing class members, which were lost in an upgrade of the documentation generator.

0.19.1 (May 31, 2017)

WebRTC

  • Fixed a bug that caused video-only calls with multiple streams between Firefox and Chrome to fail.
  • Fixed tearfown of peers in ThumbnailBroadcaster.
  • Reduce the overhead of the datachannel signalling on slow connections.

0.19.2 (June 05, 2017)

Base API

  • Improved compatability with IE.

WebRTC

  • Several compatability fixes between Chrome and Firefox.

0.19.3 (June 08, 2017)

WebRTC

  • Fix a call setup issue that could happen between specific browsers that also had significant system clock offsets.

0.19.4 (June 11, 2017)

WebRTC

  • Fix for broken bandwidth estimation in Chrome 58 & 59.
  • Refactored internal WebRTC signaling code, which among other things should result in fewer calls to ice candidate filter functions.

0.19.5 (June 13, 2017)

WebRTC

  • Fixed yet another Firefox signaling issue.

Dom sharing

  • Fix for dom-source.js when not using the full library.
  • Fix error in dom sharing source.

0.19.6 (July 04, 2017)

WebRTC

  • Fixed for data channels not being closed when detaching RtcComponents.
  • Fix for WebRTC stats not being forwarded properly when stats collection is enabled.
  • Fix for Firefox to Chrome receive-only audio.
  • Fix for Firefox renegotiation SDP sometimes getting the media IDs wrong in the bundle attribute.

Dom sharing

  • Fixed and simplified resource transfer protocol. This change is not backwards compatible with the old protocol.
  • Backwards-compatible fix for document scroll element change in Chrome 59.

Build

  • Merge latest updates to cross-browser test framework.

0.19.7 (July 06, 2017)

WebRTC

  • Fixed a bug that would sometimes cause video to freeze or not be displayed at all when Firefox is receiving video from Chrome.
  • Fixed a bug when detaching components where it would not be possible to reattach after creating any data channels.
  • Fixed a race condition where old data channels would be confused with new ones if components are quickly detached and attached.

Dom sharing

  • Fixed a bug in the datachannel link cleanup.

0.19.8 (Aug 23, 2017)

WebRTC

  • Fixed a bug where clients that are joining a conference would get stuck in an invalid state.
  • More resilient signaling for conferences, which avoid splits where clients end up in difference conference clusters in the same room.
  • Improved reliability and significantly improved transfer speed of data channels when using the Temasys plugin.
  • More reliable data channels in all browsers on low-bandwidth networks.
  • Improved logging and toString methods of several classes.
  • Fix a bug in the parser of WebRTC statistics, which would cause some media streams in Chrome to be ignored.

0.19.9 (Sep 28, 2017)

WebRTC

  • Make automatic speaker switching in conferences a less trigger happy, requiring the new speaker to be significantly lowder than the current one…
  • Fix an issue where the conference switcher got a lot less reliable the more participants were added to a conference.
  • Connections between conference peers that fail to connect will now automatically try to reconnect.
  • Adjusted log levels for thumbnail broadcaster, making it a lot less chatty.
  • Fixed an issue that would cause issues when users leave a conference just after joining.

0.20.0 (Oct 5, 2017)

This version contains improvement and fixes for the ThumbnailBroadcaster. The fixes are not backwards compatible, so a ThumbnailBroadcaster from this version is not compatible with one from a previous version.

WebRTC

  • Fix an issue where some paired channels within a conference would fail to open.
  • ThumbnailBroadcaster now selects either video or image thumbnails for each peer, based on what is supported.
  • Improved signaling logic when joining a conference.
  • ThumbnailBroadcaster now sends thumbnails using a slightly more efficient format.
  • Fix for ThumbnailBroadcaster not always using video when it was able to.
  • Fix a race in ThumbnailBroadcaster where plugin images would sometimes fail to render.
  • When trying to send a message on a closed channel, the returned promise is not rejected, instead of an error being thrown.
  • Fix media stream type checking to support Safari 11.

Media

  • Added PersistenceSink, which can be used to avoid flickering when switching between different video sources.
  • Fix documentation for HtmlSink constructor.

Dom sharing

  • Fix for scroll sometimes ending up out of sync.

0.21.0 (Nov 7, 2017)

This version introduces a new a smarted algorithm for the conference switcher, along with a bunch of bug and stability fixes for conferences.
It also adds utilities for implemented improved user media access flows, such as a method for querying whether the page has permission to access devices, and a method for asking for permission.

Base API

  • A warning will now be printed if the back-end version is too old to support all features available in the client SDK.

WebRTC

  • Added deviceSource.reconfigure, which allows reconfiguration of an active device source.
  • Added DeviceSource.queryPermissions, which returns the permission state of the different media types.
  • Added DeviceSource.requestPermissions, which requests permission to use audio and/or video devices, if needed.
  • Added DeviceSource.observeDeviceChanges, which can be used to detect changes to the available media devices.
  • DeviceSource.enumerateDevices now provides a list of default devices if the browser does not support device enumeration.
  • Added WaveformView, which renders an audio waveform to a canvas, which is useful for previewing audio devices.
  • Deprecated iceServers.url, use iceServers.urls instead.
  • Removed ProxySink and ProxySource, to be replaced by more specialized components.
  • Fix for passive calls not resetting properly when disconnecting, breaking the subsequent call.
  • Improved conflict resolution logic between Chrome and Firefox, speeding up average call setup time and improving reliability.

Conferences

  • Fixed a timeout that was too short, causing high-latency connections to frequently fail.
  • Fixed several bugs fixes and tweaks for conference connection setup logic and conference switcher.
  • Voice activity detector will now treat locally muted audio streams as silent.
  • Added MediaBroadcaster.createAudioBroadcaster, a convenience method to avoid some boilerplate when setting up a simple full-mesh audio within a conference.

Devtools

  • RelayTreeVisualization can now highlight the own user by passing in ownId. It also show the secondary speaker stream as a red arrow, and uses stable colors based on user id.