Releases: livekit/egress
Releases · livekit/egress
Version 1.13.0
Changelog
Added
- V2 egress API — unified source and output config (StartEgressRequest, MediaSource, Output,
StorageConfig), per-participant audio channel routing (AudioRoute), and request-level storage
overrides (#1155) - Support for egress auto retry (#1138)
- Faster than realtime recording (non-live) (#1192)
- Cgroup-aware memory monitoring for admission control and OOM kill (#1118)
- Support for mulaw and alaw input codecs (#1105)
- Add handler outcome Prometheus metric for SLO-based kill rate alerting (#1230)
- Add livekit_load_ratio metric for composite load-based autoscaling (#1234)
- Better multi-publisher support (#1214)
- Read K8s CPU requests to automatically set GOMAXPROCS for cgroup-aware scheduling (#1204)
- Backup storage observability — including storage event IPC for tracking uploads across
primary/backup stores (#1120, #1184) - Enable one-shot sender report sync mode for room composite behind config (#1158)
- Export InitLogger with configurable service name (#1218)
- Allow specifying affinity timeout (#1104)
- Instrument all leaky queues (#1116)
- Instrument data loss on video leaky queues (#1109)
- Add a 1G memory buffer for accepting requests (#1088)
- Log rss periodically (#1151)
- Log pipeline time to playing (#1103)
- Log file upload stats (size, duration) (#1096)
- Chrome 146 (#1173)
Fixed
- Fix s3-compat multi-part uploads (#1228)
- Fix deadlock when AbortProcess/KillProcess call kill() under pm.mu lock (#1226)
- Use statistical cadence check to tolerate WebRTC NetEQ time-stretching (#1223)
- Fix MP3 duration metadata and CBR encoding (#1187)
- Fix room composite duration to include post-participant silence tail (#1169)
- Fix awaitMediaTracks race (#1165)
- Fix for x264 encoder errors causing egress failures at the end of the recording (#1095)
- Fix for data race inside monitor (#1091)
- Fixing one of the causes of pipeline frozen errors (#1129)
- Potential fix for rare issue causing tracks not to be recorded (#1130)
- Handle EOS when removing source bin (#1093)
- Drain appwriter (#1090)
- Drain audio tracks before removing their appsource (#1085)
- Heal track which enters into continuous flow flushing loop on pushing packets (#1142)
- One pacer per audio track (#1235)
- Set time provider only after pipeline reaches playing state (#1212)
- AbortProcess is not safe to be executed by multiple goroutines (#1208)
- Fixing unprotected state write from timer goroutine (#1206)
- Disable PTS adjustments on sender reports for track egresses (#1134)
- Disconnect from room on failing to await for some track (#1132)
- Retry chrome egress navigation on chrome cert verifier change (#1194)
- Return a 500 if handler fails to start (#1137)
- Make sure all data is read from LK server (#1111)
- Always check video dimensions (#1119)
- Fail web egress on HTTP 4xx/5xx page load errors (#1106)
- Avoid panic if we fail to parse a gst pipeline error (#1086)
- Address unsafe int casting (#1126)
- Get original room name from Start request (#1189)
- Suppress noisy colorimetry warnings (#1163)
- Don't log error on manifest upload failure if backup storage wasn't used (#1152)
- Don't count room composite SDK source against Pulse limits (#1114)
- Use a 10 min deadline for the RPC watchdog (#1207)
- Remove enable_room_composite_sdk_source and always enable sdk source when conditions allow
it (#1122) - Gstreamer logs based on configured level (#1161)
- Reintroduce sdk logs filtering (#1213)
- Using variant of OnDisconnected callback which passes a reason (#1221)
- AV sync content verification in integration tests (#1215)
- Fixing arm64 chrome installer (#1175)
- Use separate token with delete permission (#1172)
- Update module go.opentelemetry.io/otel to v1.41.0 [SECURITY] (#1201)
- Update module github.com/aws/aws-sdk-go-v2/service/s3 to v1.97.3 [SECURITY] (#1178)
- Update module github.com/go-jose/go-jose/v4 to v4.1.4 [SECURITY] (#1170)
- Update module google.golang.org/grpc to v1.79.3 [SECURITY] (#1153)
- Rename IOClient to SessionReporter (#1097)
- Move ProcessManager to interface and create a fake implementation (#1147)
- Enable staticcheck (#1094)
Version 1.12.0
Changelog
Added
- Ability to request dot file dumping through gst callbacks (#1072)
- Invoke UpdateEgress on each stream retry attempt (#1055)
- Logging for file outputs exceeding set of file size thresholds (#1079)
- Ability for configuring max file size in bytes as a storage quota (#1080)
- Setting chrome.log debug file size limits & rotation (#1081)
Fixed
Version 1.11.0
Changelog
Added
- Allow setting a default role ARN for S3 upload requests (#958)
- Agent testing (#960)
- Adding audio mixer QoS stats processing (#969)
- Add content checks to file integration tests (#988)
- Basic content checks for segment tests (#990)
- Handle small audio gaps by the signal time stretching/compression instead of having discontinuities (#974)
- Adding MP3 to the supported audio types for audio only recordings (#1007)
- Adding burst estimator (#1026)
- Adding gstreamer pipeline running/playhead time accessors (#1025)
- Adding latency overrides per request types (#1050)
- Add PSRPC observability to IOInfoClient (#1056)
- Add a watchdog to shutdown egress on PSRPC failures (#1061)
Fixed
- set status to failed when an egress is killed (#961)
- Log SDK app writer source stats on EOS (#963)
- Align test source output buffer duration with opus frame size (#966)
- disable rtcp for room composite (#971)
- Don't log every single audio discontinuity (#985)
- Switch from react-scripts to vite for egress-templates build (#989)
- Use specific template version with egress versions (#1000)
- Snap audio PTS back to the regular time grid (#1002)
- Speed up build time (#1004)
- Don't delete test results immediately - keep them for eventual after run analyisis (#1005)
- do not send eos on participant composite video tracks (#1008)
- Skip dummy video packets (#1013)
- Extend max allowed RTP timestamps diff (#1016)
- Use arrival time and one way delay estimation in PTS calculation. (#1015)
- Stair step discrete corrections of track start time (#1019)
- Update sdk to include quanitzed SRs adjustments (#1020)
- Go SDK for track synchronizer packet stats (#1021)
- Go SDK to set initial PTS to estimated PTS (#1022)
- Restore defaultRTPMaxAllowedTsDiff setting (#1023)
- Drop old samples when sample queue overflows. (#1024)
- Add controller nil checks to IPC handler (#1027)
- Update server-sdk to pull in the fix for initialize timing (#1029)
- RemoveTrack after finish. (#1030)
- Adding linters (#1033)
- Update server-sdk to pull in logs sampling fix (#1035)
- Update server-sdk to pull in the fix for ensuring no PTS regressions (#1039)
- Adding more logs around stopping pipeline (#1042)
- Update server-sdk to include the fix for sanitized SRs (#1043)
- Detect & handle missing PTS after vp9parse element (#1046)
- Adjusting UpdateEgress retry logic (#1048)
- VP9 - Drop a frame with an invalid PTS and wait for key frame (#1047
- Adding a workaround for baseparse gstreamer bugs which could produce buffer with no valid PTS (#1049)
- Fix filename templating in case of multi output (#1051)
- Log egressID in io client worker (#1054)
- Pay attention to context deadline on IO update (#1062)
- Close grpc ClientConn in the main process (#1064)
- Logging significant IPC callbacks (#1066)
- retry S3 upload on 409 or 429 (#1069)
- Disable scenecut when keyframe interval is set (#1070)
Egress version 1.10.0
Changelog
- fix segment panic for very large durations (#869)
- update logger (#870) (#874) (#878) (#894) (#898) (#918)
- fix panic on reading stream stats (#881)
- fix for sdk room composite (#883)
- do not log an empty string an error for glib errors/warnings (#885)
- use core.Fuse in the source logic (#888)
- do not fail image output if no dimension is set (#890)
- support extra webhooks in egress requests (#891)
- fix race between track subscriptions and audio bin creation (#892)
- chrome logging + extended logging controls (#897)
- add support for IMAGE_SUFFIX_NONE_OVERWRITE (#895)
- update dependency @babel/runtime to v7.26.10 [SECURITY] (#875)
- update all deps and go version (#901)
- update template deps (#902)
- update jitter buffer (#903)
- fix audio gaps (#905)
- use the livekit go-gst fork (#904) (#906) (#933)
- update nth-check template dep (#907)
- improved update management (#909)
- SDK timing (#910)
- update README yaml config regarding storage (#916)
- move latencies to config (#915)
- remove process handler on launch failure (#917)
- nil check primary error (#919)
- fix json ignore (#920)
- fix audio mixer (#924)
- adopt storage version of blob uploader (#925)
- update storage, handler logger (#930)
- feat(cli): update to urfave/cli/v3 (#928)
- limit pulse clients (#931)
- allow setting GST_DEBUG env at runtime (#876)
- add GetAvailableMemory to monitor (#932)
- fix azure urls (#935)
- memory updates (#936)
- delete the handler temporary context rehardless of the handler termination status (#934)
- increase audio alignment threshold (#937)
- fix race in audio track subscription (#938)
- add duration to presigned urls (#941)
- use gstreamer 1.24.12 (#943)
- allow uploading to S3 using AssumeRole (#940)
- update pion dependencies (#946)
- fix for AssumeRole credential insertion (#948)
Version 1.9.0
Changelog
Added
- Support for backup storage (#792) (#793) (#795) (#825)
- Log per egress memory usage (#821)
- Support for participant egress screen share (#829)
- Use the SDK to handle audio only room composite requests with the default template (#817)
Fixed
- Skip AWS logging on successful upload (#762)
- Reduce duplicate test runs (#763)
- Fix s3logger memory usage (#764)
- Disable SDK Async-connect (#768)
- Faster startup (#769)
- Queue 15 min worth of segments (#770)
- Use config value for max upload queue size (#772)
- Disable-features Translate in headless Chrome (#775)
- Add a back off top laylist upload retries (#779)
- Remove audio with image-only egress (#782)
- Adopt AWS SDK v2 (#783)
- Force CBR for streams output (#785)
- Don't update bucket region with custom endpoints (#786)
- Set a region field when using a custom endpoint (#788)
- Ignore websocket close errors (#790)
- Avoid recording room composite before video is decoded (#806)
- Fix max concurrent web check (#810)
- Use Ubuntu 24.04 base image (#811)
- Move IO timeouts to config (#814)
- Upgrade to pion/webrtc v4 (#818)
- Kill highest memory egress when OOM (#826)
- Udpate livekit JS dependencies and call setRoom in default template (#835)
v1.8.4
Changed
- Preset 0 (720p, 30fps) is now the default recording option (#640)
Fixed
- Zombie processes eventually causing chromium or X to fail (#673)
- Pipeline getting stuck with Participant composite when a track is unpublished (#635, #644)
- ImageOutputs broken when used with other outputs (#642)
- Fixes to jitter buffer and track synchronizer for track/track composite egress (#643, #660)
- Race on shutdown causing some final updates not to send (#666, #667, #674)
v1.8.2
Added
- Audio-only cpu requirements (#597)
- is_disabled prometheus metric for terminating nodes (#622)
- Details field in EgressInfo (#627)
Fixed
- Race condition with deadlock (#608)
- Critical gstreamer error with Participant egress (#624, #626, #628)
- Keyframe intervals for segments and streams (#611, #618)
- multi output use case with image outputs and local image save path (#614)
- Force IPv4 with GCP client (#623)
- Marking aborted egress as failed (#620, #625)
v1.8.0
v1.7.9
v1.7.8
Fixed
- Improved RTMP retry policy (#444)
- Pipeline frozen errors (#459)
- Websocket egress marked as failed after being stopped (#450)
- Negative waitgroup counter bug with track/track composite egress (#463)
Added
- Supports decoding vp9 tracks with track/track composite egress (#465)
Changed
- Chrome sandboxing is now a config option, disabled by default (#481)