LiveSwitch 1.27 Release
LiveSwitch 1.27 includes two significant infrastructure changes that require attention before upgrading:
- .NET 10 — All LiveSwitch server services (Gateway, Media Server, Recording, and SIP Connector) now run on .NET 10 (LTS), keeping your deployment on a fully supported runtime ahead of the previous .NET version reaching end of support on November 10, 2026, and lowering CPU usage under load by roughly 4–5% for SFU broadcast and 2–3% for two-way SFU calls. Self-hosted customers must run the services on the .NET 10 runtime or update to the v1.27 container images, which are now based on Ubuntu 24.04 LTS.
- PostgreSQL 12+ — PostgreSQL 11 and earlier are no longer supported. Upgrade your database server before updating LiveSwitch; there's no database migration to run and no schema changes, so the services start against your existing database as-is. If you connect over TLS, certificate trust behavior is unchanged, but test the connection in staging before rolling out to production.
Release Notes for LiveSwitch Server v1.27
1.27.0.22319
Release date: July 31, 2026
Client SDK
Improvements
- [LS1-3462] [Web] The example app now displays a remote mute indicator, so participants can see when another participant has muted their microphone.
- [LS1-3733] [Web] The example app now shows audio and video mute state overlays on video tiles.
Bug Fixes
- [LS1-2613] [MAUI Android] Fixed an issue in the example app where backgrounding the app during a call caused video to freeze and the connection to reconnect on return. The example now runs the call in a foreground service while the app is in the background. Because Android requires each app to declare its own foreground service and lifecycle handling, this isn't something the SDK applies for you — see the MAUI Chat example for the pattern, or contact support for guidance on applying it to your own app.
- [LS1-2876] [MAUI Android] Fixed an app crash when accepting the notification prompt while joining in Screen Share Only mode. Joining a Screen Share Only session now works reliably across P2P and SFU connections.
- [LS1-3472] [Unity iOS] Fixed an issue where call audio played through the earpiece instead of the loudspeaker when joining an SFU call, making calls hard to hear. Audio now routes to the loudspeaker by default.
- [LS1-3522] [MAUI Android] Fixed the device screen turning off and going to sleep during an active call, which could interrupt video and audio. The screen now stays awake for the duration of a call.
- [LS1-3523] [MAUI Android] Fixed local self-video freezing after the app returned from the background. The camera now resumes automatically on return to the foreground.
- [LS1-3670] Fixed an issue where peer-to-peer calls could unnecessarily fall back to TURN relay even when a direct connection between clients was available, resulting in avoidable relay bandwidth usage and added connection latency.
- [LS1-3678] [Web] Fixed an issue in P2P mode where the answer SDP always contained
sendrecvregardless of the joining client's configured direction (receive-only or send-only), causingsetRemoteDescriptionto fail with anInvalidAccessError. - [LS1-3694] [.NET] Fixed an issue where the SDK NuGet packages were missing the native OpenSSL library (
libopensslfm.dylib) on macOS, causing applications referencing SDK 1.23.0 or later to fail at runtime with a missing native library error. - [LS1-3705] [Web] Fixed an issue in the example app where muting audio or video after switching from SFU to MCU mode would throw an error instead of updating the connection.
- [LS1-3706] [Web] Fixed several connection lifecycle issues in the example app, including stale connection references and missing cleanup.
- [LS1-3723] Fixed an issue where channel update messages could be silently discarded, so
OnRemoteClientUpdatenever fired for other participants even though the sending client'supdate()call succeeded. - [LS1-3739] [Web] Fixed an issue in the example app where audio and video mute buttons had no effect in P2P mode before any peer had joined the channel.
- [LS1-3742] Fixed a race condition where calling
Update()twice in rapid succession (e.g. muting audio and video within ~100ms of each other) could silently drop one of the state changes. - [LS1-3744] Fixed an issue where a connection's reported maximum video resolution could incorrectly reflect the send stream dimensions instead of the larger receive stream dimensions.
- [LS1-3746] [Unity] Fixed an issue where
libopensslfm_stub.cwas missing from the package, causingLNK2019linker errors when building IL2CPP targets. - [LS1-3747] [MAUI iOS] Fixed an issue in the example app where backgrounding the app during a call dropped audio and caused the connection to reconnect on return. The example now declares background audio/VoIP modes and pauses/resumes the camera on background/foreground transitions. As with the Android fix above, this is an application-level change you'll need to replicate yourself — see the MAUI Chat example for the pattern, or contact support for guidance on applying it to your own app.
All Server Services
Breaking Changes
- [LS1-3438] All LiveSwitch server services — Gateway, Media Server, Recording, and SIP Connector — now run on .NET 10 (LTS) on Ubuntu 24.04 LTS-based container images, and now require PostgreSQL 12 or later. Upgrade action: self-hosted customers must run the services on the .NET 10 runtime or update to the v1.27 container images.
Improvements
- [LS1-3510] Expanded internal dependency vulnerability scanning to cover transitive dependencies, not just direct references, reducing the risk of known CVEs shipping in LiveSwitch Server releases.
Bug Fixes
- [LS1-3788] [LS1-3792] Updated dependencies to address high-severity security vulnerabilities in third-party libraries.
Gateway
New Features
- [LS1-3758] Added a lightweight recording-status endpoint (
GET /admin/api/v1.0/applications/{applicationId}/channels/{channelId}/recording) to the REST API that returns whether recording is active on a channel, without the overhead of a full Media Server report.
Improvements
- [LS1-3089] Replaced a retired authentication library used for admin dashboard sign-in with a supported, actively maintained OAuth server, resolving a security advisory (GHSA-55p7-v223-x366). Admin usernames, passwords, and API keys are unchanged. Dashboard users will be signed out once after upgrading and will need to sign in again — a one-time event that doesn't affect any accounts or credentials; browser-only dashboard users need no other action.
Bug Fixes
- [LS1-3715] Fixed an issue where zombie WebSocket connections were logged continuously as
Potential WebSocket Timeoutinstead of being closed. - [LS1-3721] Fixed a rare startup issue where, if webhook processing initialized on multiple requests at exactly the same time during a cold start, the Gateway could stall or briefly apply an incomplete set of webhook rules.
Media Server
Bug Fixes
- [LS1-3704] Fixed an issue where MCU receive-only clients would see permanently degraded, blocky video after all receivers disconnected and rejoined a session, because the server failed to request a new keyframe from the upstream publisher.
- [LS1-3722] Fixed a gradual memory leak on the Media Server cluster data path that could occur under certain error conditions during long-running sessions, improving stability for clustered deployments under sustained load.
- [LS1-3733] Fixed an issue where SFU downstream connections did not reflect the upstream participant's muted audio/video state until the first connection update after connecting.
1.27.1.22648
Release date: October 09, 2026
Client SDK
Bug Fixes
- [LS1-3771] [Web] Fixed an issue where muting or unmuting local audio logged just "local" instead of a descriptive message with the track ID and mute state.
- [LS1-3787] [Unity] Fixed a crash (SIGSEGV) in IL2CPP builds that occurred every time local video was muted while using
WebCamTextureSource. - [LS1-3803] [Web] Fixed an issue on Android browsers where switching cameras could fail with
NotReadableError: Could not start video source, depending on which cameras the device allows to be open at the same time. When this failure occurs, the SDK now releases the current camera and retries, and restores the previous camera if the switch still fails. - [LS1-3805] Fixed an issue where connections could time out with
ConnectionNotEstablishedduring the DTLS handshake, even after an active candidate pair was found, on networks that silently drop large UDP packets such as VPN and IPsec paths. DTLS handshake packets were sized for a 1500-byte MTU. DTLS now uses a 1280-byte MTU on all platforms, matching the conservative sizing browsers use. - [LS1-3811] [iOS] [macOS] Fixed
registerfailing with "Could not parse token." when the token was created by a standard JWT library that uses unpadded base64url encoding, a regression introduced in 1.26. The Android and Web SDKs also now accept base64url tokens containing-or_characters.
All Server Services
New Features
- [LS1-3806] LiveSwitch services can now authenticate to Redis with a client certificate (mutual TLS), for Redis servers that require it. Add the new
CacheClientCertificatesection to each service's configuration with a PEM certificate and key, or a PFX file. Intermediate CA certificates included in the certificate file are sent along with the client certificate, so Redis only needs to trust your root CA. See Redis TLS and Client Certificates for details.- No change unless you opt in. Deployments that don't configure
CacheClientCertificatebehave exactly as before. rediss://connection strings are now supported for theCacheconnection string.- Using a private CA? Install your root CA certificate in the server's or container image's trust store. If your CA doesn't publish a CRL or OCSP endpoint, add
checkCertificateRevocation=falseto theCacheconnection string.
- No change unless you opt in. Deployments that don't configure
Media Server
Improvements
- [LS1-3725] Removed unused reference assemblies from the Media Server Docker image that were causing security scanners to report false-positive CVEs.
Bug Fixes
- [LS1-3805] Fixed an issue where connections could time out with
ConnectionNotEstablishedduring the DTLS handshake, even after an active candidate pair was found, on networks that silently drop large UDP packets such as VPN and IPsec paths. DTLS handshake packets were sized for a 1500-byte MTU. DTLS now uses a 1280-byte MTU on all platforms, matching the conservative sizing browsers use.