Skip to content

Releases: livekit/egress

Version 1.13.0

28 May 17:41
7d3572a

Choose a tag to compare

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

05 Dec 19:15
49c7d7b

Choose a tag to compare

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

  • Update eslint for js-yaml vuln fixes (#1074)
  • Update protocol and x/crypto (#1082)
  • Make stats meaningful for SRT and prevent log noise (#1075)
  • Fix for racy addition of app sources (#1073)
  • Ensure pipeline is at least in PAUSED state before pushing data to app sources by (#1076)

Version 1.11.0

17 Nov 23:42
a343ada

Choose a tag to compare

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

06 Aug 13:19
19c96f5

Choose a tag to compare

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

07 Jan 00:53
2dc12c4

Choose a tag to compare

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

21 May 05:37
95713d5

Choose a tag to compare

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

08 Mar 00:37
84452bb

Choose a tag to compare

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

13 Jan 17:48

Choose a tag to compare

Requires livekit-server v1.5.1+

Fixed

  • Track/Track composite failures when video track begins muted (#524)
  • Segment upload failures if queue gets backed up (#509)
  • Sync issues (#498, #507)
  • Stream reconnections (#503)

v1.7.9

13 Sep 19:20

Choose a tag to compare

Fixed

  • Pulse not closing properly eventually causing all room composite and web egress to fail (#486)

v1.7.8

08 Sep 22:39

Choose a tag to compare

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)