Compare commits

..

1 Commits

Author SHA1 Message Date
lebaudantoine 089d016d12 🐛(frontend) cache supportsBackgroundProcessors WebGL2 probe result
`supportsBackgroundProcessors()` creates a live WebGL2 context on
every call and never releases it. The method is called from render
paths (e.g. the Effects button on the join screen), so without
caching, each re-render leaks a context until the browser hits its
live-context limit.

This is one of the ways MediaPipe later fails with:

  "emscripten_webgl_create_context() returned error 0"

Support cannot change within a session, so probe once and cache the
result.
2026-09-02 18:26:12 +02:00
4 changed files with 9 additions and 9 deletions
-4
View File
@@ -13,10 +13,6 @@ and this project adheres to
- ✨(frontend) add 1080p sending resolution option #1660 - ✨(frontend) add 1080p sending resolution option #1660
- ✨(backend) add Traefik support via configurable media-auth url header #1649 - ✨(backend) add Traefik support via configurable media-auth url header #1649
### Changed
- ⬆️(dev) pin LiveKit server to v1.13.6
### Fixed ### Fixed
- 🐛(frontend) keep the sending resolution picked while the camera is off #1667 - 🐛(frontend) keep the sending resolution picked while the camera is off #1667
+1 -1
View File
@@ -207,7 +207,7 @@ services:
- kc_postgresql - kc_postgresql
livekit: livekit:
image: livekit/livekit-server:v1.13.6 image: livekit/livekit-server
entrypoint: /livekit-server --dev --bind 0.0.0.0 --config ./config.yaml entrypoint: /livekit-server --dev --bind 0.0.0.0 --config ./config.yaml
ports: ports:
- "7880:7880" - "7880:7880"
+1 -1
View File
@@ -1,4 +1,4 @@
FROM livekit/livekit-server:v1.13.6 FROM livekit/livekit-server:v1.9.4
# We inject the nip.io certificate manually because the livekit chart doesn't support volume mounting # We inject the nip.io certificate manually because the livekit chart doesn't support volume mounting
COPY rootCA.pem /etc/ssl/certs/ COPY rootCA.pem /etc/ssl/certs/
@@ -32,14 +32,18 @@ export interface BackgroundProcessorInterface extends TrackProcessor<Track.Kind>
} }
export class BackgroundProcessorFactory { export class BackgroundProcessorFactory {
private static _isSupported?: boolean
static hasModernApiSupport() { static hasModernApiSupport() {
return ProcessorWrapper.hasModernApiSupport return ProcessorWrapper.hasModernApiSupport
} }
static isSupported() { static isSupported() {
return ( if (this._isSupported === undefined) {
supportsBackgroundProcessors() || BackgroundCustomProcessor.isSupported this._isSupported =
) supportsBackgroundProcessors() || BackgroundCustomProcessor.isSupported
}
return this._isSupported
} }
static getProcessor( static getProcessor(