Release Notes for LiveSwitch Server v1.12
1.12.4.49293
Release date: June 14, 2021
Bug Fixes
Client SDK
- [IL-3441] Fixed a bug in the UWP SDK that caused video streams to fail when trying to establish a connection due to an exception during image conversion.
1.12.3.46193
Release date: April 22, 2021
Bug Fixes
Media Streams
- [IL-3348] Fixed a bug preventing connectivity when Connection.MultiplexingPolicy was set to Negotiated (multiplexing here refers to RTP/RTCP multiplexing).
- [IL-3428] Fixed a bug in Camera2Source where local video on Android clients could be delayed at high resolutions.
Media Server
- [LS-5956] Fixed a bug where a Media Server would sometimes fail to clean up inactive channels right away.
Gateway
- [LS-5296] Fixed a bug where some response headers were not showing up in Web Client. The missing headers were making Web Client vulnerable.
- [LS-6016] Fixed a bug where Media Servers failed to register with the Gateway in a new installation due to cryptographic failures.
- [LS-6040] Fixed a bug where PostgreSQL connection strings containing URL encodings failed to parse correctly, resulting in errors when trying to connect to the PostgreSQL server.
Client SDK
- [LS-5724] Fixed a bug where an iOS client with both WiFi and LTE connectivity crashes after disconnecting the power or Internet cable from WiFi router, or after moving away from WiFi router until iOS client switches to LTE.
- [LS-5977] Fixed a bug that caused bad access error on iOS when attempting to mute video on screen sharing.
1.12.2.44189
Release date: March 17, 2021
Bug Fixes
Media Server
- [LS-5951] Fixed a bug where the Media Servers sometimes failed to clean up application and channel records after all connections were closed.
- [LS-5959] Fixed a bug where the Media Servers failed to report an immediate change in used capacity after a connection closed.
- [LS-5961] Fixed a bug where the Media Servers sometimes sent out premature upstream connection notifications.
Media Streams
- [IL-3421] Fixed a bug where a null reference exception could be thrown while closing an RTP receiver.
Client SDK
- [LS-5960] Fixed a bug where a Client failed to retry a streaming connection attempt when no Media Servers were available.
1.12.1.43711
Release date: March 12, 2021
New Features
JavaScript SDK
- [LS-5939] Screen sharing simulcast is now available for Google Chrome.
Bug Fixes
Media Server
- [LS-5873] Fixed a problem causing periodic frame freezes on video streams originating on web browser clients on SFU and MCU connections primarily for clients connecting over ethernet.
Media Streams
- [IL-3413] Updated JitterBuffer implementation to ensure that NACKs are sent more aggressively in higher round trip time and packet loss environments preventing frame freezing under suboptimal network conditions.
Gateway
- [LS-5857] Fixed webhooks and channels weren't deleted if the Application was deleted.
- [LS-5878] Fixed the Gateway would pause for a few seconds on shutdown waiting for long-poll and/or WebSocket requests to terminate instead of proactively ending them gracefully.
Client SDK
- [LS-5887] Fixed a bug in the WebSocket class for .NET, Java, and Cocoa where the reported exception for a broken receive operation would be replaced with an exception from a failure to send the final WebSocket close message.
- [LS-5261] Updated the signaling behavior of the client SDK, Media Server, and SIP Connector to tolerate temporary network-level failures, e.g. a broken WebSocket pipe, so Gateway scaling events don't cause streaming connections and/or client registrations to drop.
- [LS-5892] Fixed failures in the post-processing of a register request were not reported.
- [LS-5905] Fixed a bug where a client transition to the Registering state from the Unregistered state would log an exception if that was the cause of the registration failure.
- [IL-3415] Fixed an audio processing delay that impacted Android/Java and .NET/Xamarin/Unity platforms. Note that other platforms were unaffected by this issue.
- [IL-3419] Fixed a race condition in the media stream/track tear-down where an exception was raised about a failure to add/remove a null input/output.
1.12.0.43387
Release date: March 10, 2021
New Features
HoloLens Support
- Added ARM64 build configurations for LiveSwitch Release for libyuvfm, libopusfm, and libvpxfm (new ARM64 folders, dlls and .libs) (LS-5635);
- Update libyuvfm, libopusfm, and libvpxfm to Windows SDK 10 and Visual Studio 2019 for ARM64 compilation (LS-5635);
- Remove wrappers in lines 500 and 504 in libvpxfm.c to correspond to v1.9.0 "Quacking Duck" version (built on November 23, 2020) (LS-5635);
- Update libvpxfm header files for v1.9.0 "Quacking Duck" version to avoid ABI version mismatch (LS-5635);
- A new Unity Project labelled as "Hololens2Chat", containing all project files for the LiveSwitch Unity on Hololens 2 example (LS-5633);
- Imported Microsoft's Mixed Reality Toolkit to enable Hololens 2 input, spatial awareness and other capabilities onto Hololens 2 device and Hololens 2 Chat example (LS-5633);
- Added an ARM64 plugin folder containing ARM64 Windows variants for libvpxfm, libopusfm, and libyuvfm dynamically linked libraries (LS-5633);
- Added configuration in the package manager to automatically import Mixed Reality Toolkit package onto the project (LS-5633);
Services
- Added PostgreSQL support for non-ephemeral configuration data. Note that PostgreSQL will be required in 1.13 as the Redis Entity Framework Provider for configuration data is deprecated and will be removed in LiveSwitch 1.12.0. Redis will remain necessary for ephemeral data (LS-3339);
Load Balancing
- Adds SfuConnectionsPerCpuThreshold and McuConnectionsPerCpuThreshold to Media Server capacity thresholds to allow fine-grained control over how many SFU and/or MCU connections are allowed (LS-5684);
- Adds automatic retries when opening a new SFU or MCU connection if there are no Media Servers available. This helps mitigate connection failures during traffic bursts as well as when scaling out a cluster (LS-5641);
- Adds a new NoMediaServerTimeout property to ManagedConnection with a default of 120 seconds to control how long a connection will wait for a Media Server to come available (LS-5641);
- Updates capacity handling for consistency so single-server deployments can be considered over-capacity in the same way that multi-server deployments are (LS-5676);
- Adds OnNoMediaServersAvailable event to ManagedConnection, raised when no Media Servers are available after calling Open and while retry attempts are ongoing (LS-5723);
Rate-limiting
Added rate-limiting feature to protect the "sync" endpoint of the Gateway service. It can be set/changed dynamically via the Deployment Config (OnPrem Console). Rate-limits are described using policies and sets of rules per policy (LS-5268);
- Note: rate-limiting is available for clusters where both Gateways and Media Servers are version 1.11.0 and above (LS-5691).
Added rate limiting value validation for rule period/limit and for policy CIDR address (LS-5694);
Gateway
Added PublicHostnameTemplate and PublicHostnameTemplateIPv6 to the DeploymentConfig REST API (LS-5369).
PublicHostnameTemplate provides a way to define the PublicHostname for IPv4-based Media Servers using a template with {octet1}-{octet4} from the public IP address as parameters.
PublicHostnameTemplateIPv6 provides a way to do the same for IPv6-based Media Servers using a template with {hextet1}-{hextet8} from the public IP address as parameters.
Improved Gateway message processing rate for Media Servers (LS-5801);
Improved signalling performance in the Gateway and client SDK (LS-5816);
Config Tool (CLI)
- Updated the LiveSwitch CLI Tool to import/export configuration from Postgres databases (LS-4721);
Media Server
Updates the Media Server REST API to include additional details: architecture, machineName, networkInterfaces, operatingSystem, operatingSystemVersion, physicalMemory, publicIPAddress, serviceReport, tag, version (LS-5355);
Support for Rate limiting configuration in a clustered server environment where rate limiting configuration change need to be propagated to all Gateway servers (LS-5717);
Added DisableRemoteUpstreamConnectionEvents to ChannelClaim to allow clients joining a channel to opt-out of remote upstream connection open, update, and close events. Opting out provides faster response times at scale for large sessions that use media IDs (LS-5822);
Added Kick method for connections (LS-5841);
Added additional synchronization in inbound media processing to avoid a potential race condition that could cause a memory access violation crash in the Media Server.
Installer
- Updated the Windows installer to allow a PostgreSQL server to be used to store LiveSwitch configuration instead of a Redis server (LS-5806);
Dashboard
Removed Delay, Failed Connections, Failed Connections Expiry fields from the Clustering configuration and added Safe Mcu Connections Per CPU, Safe Sfu Connections Per CPU, Unsafe Mcu Connections Per CPU and Unsafe Sfu Connections Per CPU Thresholds (LS-5584, LS-5042);
Added an option for rate-limiting under Deployment configuration (LS-5271);
New Forbidden TURN peer CIDR UI in the Deployment page allows you to add the classless inter-domain routing (CIDR) range. The CIDR ranges will be forbidden as destinations for messages sent by TURN clients to avoid a security vulnerability where malicious clients could communicate with private network resources. (LS-5792)
TURN
Adds MinTurnPort and MaxTurnPort to DeploymentConfig to support customizing the TURN port range for relayed client traffic (LS-5787);
Adds MinIcePort and MaxIcePort to DeploymentConfig to support customizing the ICE port range for direct client traffic (LS-5788);
Recording
- Media server now provides recording start/stop timestamps in JSON file matching actual media duration (LS-5785);
Media Streams
Upgraded libvpx to version 1.9.0 (IL-3385);
Support for PCM uncompressed (L16/48000/2) audio format (LS-5370);
Cocoa
Updated our MacOS and iOS examples for Xcode 12 and Swift 5 compatibility (IL-3386);
Added arm64 architecture build for macOS, minimum deployment version bumped to 11.0 (Il-3400);
Update vpx headers to v1.3.1 (IL-3386);
Updated OpenSSL libs for Cocoa to v1.1.1i (IL-3400);
Bug Fixes
Gateway
Fixed a bug that could allow for a race condition where invalid application code may lead to multiple simultaneous registrations on the client (LS-5815);
Fixes a bug where capital letters in an application ID would result in Redis key leaks. (LS-5840)
Media server
Fixed a bug preventing connectivity when Connection.MultiplexingPolicy was set to Negotiated (multiplexing here refers to RTP/RTCP multiplexing) for Peer connections (IL-3348);
Allowed connectivity with peers not supporting RTP/RTCP multiplexing fo SFU and MCU connections (IL-3348);
Fixed a bug that causes inactive Media Servers to reactivate after a temporarily lost Gateway connection (LS-5820);
Fixed a bug where the REST API would allow capacity thresholds with zero values (LS-5830);
Updated the Media Server and client SDK so a final connection stats event is generated when a connection is closing or failing. This should eliminate the gap in information between the last connection stats event and the connection closing or failing event. (LS-5854)
Updated the LiveSwitch Server signalling layer to avoid potential problems with data integrity in Redis after timeouts (e.g. due to overload). (LS-5850)
Fixes a bug that allowed a Media Server to receive new connection traffic after being deactivated in the console or REST API. This bug impacts deployments that use the SpillOver or LeastConnections cluster strategy. It does not impact deployments that use the RoundRobin cluster strategy (LS-5829).
Recording
- The conflict between media server JSON file writing and recording service reading is mitigated (LS-5832);
SIP
Fixed a bug where URI for the previously deleted application cannot be re-used (LS-5662);
Updated the SIP Connector so unexpected failures to process outbound calls generate proper "invite" transitions in the client SDK (LS-5853);
Updated the SIP Connector to better handle the scenario where no SIP trunks are available for some reason (LS-5853);
Improved fault tolerance in the UDP transport used by the trunk signalling plane of the SIP Connector (LS-5858);
Fixed a bug where a network-level failure in a SIP handshake would not clean up the associated Redis records (LS-5853);
Unity
Exposed MipChain and Linear properties in RectTransformSink (LS-5057);
Implement ScaleMobileWebCamTexture() method to fill in screen (LS-4587);
Fixed a bug where a white square would appear before the camera is fully loaded in the Unity example (LS-4613);
Improved the performance of video rendering on Unity RectTransformSink (LS-5058);
Improved the documentation for the Orientation attribute in VideoBuffer, explicitly states what it is for (LS-5794);
Fixed a bug where the video feed is being inverted that's sending from the Unity example running in an Android/iOS device (LS-5794);
Cocoa
Fixes race condition that can cause EXC_BAD_ACCESS in native iOS/macOS apps when unregistering a client with active channels and connections (IL-3408);
Fixed an issue where a non-iOS device with touch input was being identified as an iOS device. (IL-3409)
ICE
- Reduced synchronization along the receive pipeline in ICE Transport ensuring that payload data is processed faster (IL-3304);
Media Streams
Added boolean value VerticallyMirrored in VideoBuffer for indicating whether this buffer should be mirrored over the Y-axis (LS-5701), Added boolean value HorizontallyMirrored in VideoBuffer for indicating whether this buffer should be mirrored over the X-axis (LS-5701);
Improved the efficiency of RTP retransmissions for encrypted streams (LS-5834);
Deprecations
Cocoa
Removed i386, armv7, and armv7s build support for iOS (IL-3385. IL-3400);
Removed i386 build support for macOS (IL-3385);
Redis for Configuration Data
- The Redis Entity Framework Provider for configuration data is deprecated. It's highly recommended that [you migrate your configuration from Redis to PostgreSQL]{.ul} as using Redis to store (persistent) configuration data will not be supported in LiveSwitch 1.13.0. There are no plans to remove Redis as the Ephemeral Data Store.