Releases: livekit/ingress
Releases · livekit/ingress
Version 1.5.0
Changelog
Added
- Allow passing
projectIDfor URL requests (#429) - Introduce linter configuration shared with egress, fixing a wide range of issues including unused params, deprecated APIs, unexported return types, typos, a
TrimLeftbug, and a mutex-copy bug in a proto message (#425) - Add segment start to adjusted buffer PTS; simplify event probe (#398)
- Log segment events to help diagnose non-~0s segments that could push buffer PTSs outside the segment range (#397)
- Observe buffer processing latency and expose it as a Prometheus metric (#392)
- Gate excess pre-roll buffered media to reduce end-to-end latency (#386)
- Ingress metrics (#383)
- Pass WHIP through to the SFU directly, with a config option to choose between SFU and native paths; includes WHIP HTTP header handling and RTC closing notify support (#372)
IngressIDandResourceIDattributes on ingress participants (#344)- Custom
HandlerLoggerimplementation (#339) - Media watchdog at the tail of the pipeline (input of the Go SDK) to close the ingress if no media is received on any track for 1 minute — needed for cases like SRT where GStreamer may retry connecting forever without emitting any failure event (#334)
- Backpressure-aware synchronizer: monitor a queue between the appsink and the Go SDK; if it grows past 2 buffers, reduce the synchronizer wait time in 10ms steps until the queue shortens. Addresses a deadlock case in SRT where the reference/wait time was only ever increased, causing the input buffer to fill to its max. Disabled for HLS, where back pressure at the output is expected. (#337)
- Announce out-of-network splice events as participant attributes (derived from SCTE-35 tables in MPEG-TS streams, e.g. SRT). Implemented by monitoring SCTE-35-related GStreamer events pushed down the pipeline — message-bus-based events lack pipeline-timebase timing and the MPEG-TS demuxer doesn't expose the needed info to regenerate timestamps. Relies on a forked
go-gstfor now. (#326) - Reject ingress if the
Enabledflag is false (#319)
Changed
- Log caps existence when connecting to caps notifier (#431)
- Replace deprecated
io/ioutil.ReadFilewithos.ReadFilefor config loading (#424) - Refactor ingress handler RPC server: remove PSRPC support from the ingress handler and move the full PSRPC server implementation into the server process; introduce a
StateNotifierfamily of objects for injecting state-update behavior; add an (initially empty)ProjectIDfield toStateNotifiercalls (#413) - Only report packet loss if
trackStatsis set (#401) - Update GStreamer to 1.26.7 (#396)
- Update Go to 1.25 (#388)
- Use
FeatureFlagsfromGetIngressInfoResponseorStartIngressRequest; rename theSFUTranscodingBypassedWHIPconfig option toWHIPProxyEnabled(#382) - Fix the format of the logging field in the sample config (#377)
- Delay deregistering the WHIP RPC handler to avoid SFU notify warnings (#373)
- Switch to the
livekit/gst-gofork ofgo-gst(#367) - Update CLI to
urfave/cli/v3(#364) - Set logging parameters on Pion; ignore Pion ICE candidate warning (#348)
- Throttle "too slow" logs (#340)
- Disable output queue-length monitoring for RTMP and WHIP (#338)
- Disable max-buffer limit on URL input queue; log SRT stats every minute (#335)
- Initialize URL ingress state with
BUFFERINGwhen created directly by the Ingress server (#333) - Use logger utilities in ingress (#332)
- Remove
actions/cachefromworkflows/build.yaml— the cloud-ingress build uses Docker, so caching Go modules from the host is pointless (#325)
Fixed
- Fix
intcast flagged by Copilot (#416) - Ensure the logger is initialized before the output registers for EOS, preventing a race that could cause a panic if EOS arrived during creation (#415)
- Ignore all errors from
writeSampleonce the output is already closed — not just EOF — so hitting the shutdown timeout no longer setspipelineErrorand flips the pipeline to a failed state (#412) - Do not treat
io.EOFas a pipeline error during shutdown;handleSample()keeps returningFlowOKwhile samples are dropped so GStreamer can drain its queues without interpreting earlyFlowEOSas a mid-stream failure (#411) - Make sure EOS reaches sinks: signal "EOS seen on source" out-of-band so the output can decide to wait briefly for remaining data (or cancel), preventing the pipeline from freezing when the appsink thread is stuck on a blocking push (#408)
- Safer fallback logic for latency reduction: if A/V arrival rates don't stabilize, skip applying offsets entirely instead of taking the current max of calculated offsets (#406)
- Initialize logger before the handler starts (#399)
- Fix superfluous
response.WriteHeadercall: only send a status code if data hasn't already been written (an implicit 200) (#395) - Make sure an ingress session is terminated when sending on the app source doesn't cause the pipeline to emit an EOS event (#379)
- Propagate sink errors when the input error is (generic, consequential)
context.Canceled(#381) - Fix "disonnected" → "disconnected" typo in error messages (#360)
- Fix flaky/broken tests (#378, #374)
Security
Version 1.4.3
Changelog
Fixed
- Log WHIP user agent and RTP packet if unmarshalling fails (#274)
- Tear down full WHIP session of one of the track handlers fail (#277)
- nil check on SDK teardown (#278)
- Be sure to cancel input initialization when shutting down an ingress during start up (#279)
- Update module golang.org/x/image to v0.18.0 [SECURITY] (#286)
- Implement KillIngressSession rpc (#282)
- Report failure when WHIP handler fails to initialize (#285)
- Stop output sdk watchdog on teardown (#287)
- Update go-gst (#305)
- Update to pion/webrtc v4 (#312)
Version 1.4.2
Version 1.4.1
Version 1.4.0
CHANGELOG
This version decreases significantly the glass to glass latency of the
bypass_transcoding WHIP pipeline.
ADDED
- Set participant metadata (#222)
- Report the region in CreateIngress and UpdateIngressState RPC calls (#227)
- Use pacer when transcoding is enabled (#230)
- Try restarting the output part of the pipeline up to 3 times if the room disconnected (#240)
- Remove the jitter buffer in the non transcoded WHIP path (#245)
FIXED
- Call RegisterListActiveIngressTopic on start (#216)
- Switch server-sdk-go to v2 (#219)
- Pick up NULL CPU monitor from protocol (#220)
- Remove some verbose logs. Gather PLI count in the stats object. (#221
- Fix typo and handle backward compatibility with livekit-server properly (#229)
- Fix panic if the whip handler receives data before the stats gatherer is set (#233)
- Use a different idle threshold in availability handler and when deciding to accept a request (#234)
- Avoid nil pointer dereference if NewLKSDKOutput fails to connect to the room (#235)
- Make sure to forward Sender Reports to the synchronizer in the WHIP handler (#243)
- Update to Go SDK 2.1.0 to fix SCTP compatibility issue (#246)
- Ensure we match WHIP simulcast layers properly (#247)
Version 1.3.0
Changelog
Added
- Add EndedAt field to Ingress State (#40)
- Log room name and participant ID (#191)
- Gather input stats for url pull sessions (#192)
- Add support for SRT in URL Pull ingress (#206)
- Compute input media jitter (#205)
- Gather pipeline output statistics (#207)
- Add WHIP Simulcast Support (#209)
Fixed
Version 1.2.2 (#184)
Version 1.2.1
Changelog
Fixed
- Flush between each frame when copying data on the WHIP relay (#157)
- Fix CanAccept logic (#159)
- Avoid panic when querying the stats monitor before service start (#161)
- Allow reconnections when the output fails (#164)
- Do not an error if ingress update failed because the ingress is not found (#163)
- Make sure that we resize layers to even dimensions (#172)
Ingress version 1.2.0
Changelog
Added
- Implement high motion presets (#153)
Fixed
- Add queues between pipeline steps (#146)
- Small quality/resource usage/latency tuning for x264 and vp8 encoding parameters (#147)
- Adopt COMPLETE state for URL ingress. Use udp port multiplexing by default for WHIP (#148)
- Do not attempt to unpublish a track from a closed room (#150)
- Use souphttpsrc as it provides better error messages (#151)
- Improve Ingress A/V sync (#154)
Ingress version 1.1.0
This is the v1.1.0 release of the ingress service. This release adds support for pulling media from URLs and fixes source resolution handling
Changelog
Added
- Log redacted ingress info and set stereo and disableDTX publication options (#130)
- Add Debug handler with pprof support (#131)
- Report average bitrate in the ingress state (#133)
- Support for GST pipeline debug dot files on the debug handler (#136)
- Support for pulling URLs (#138)
Fixed
- Do not report instance as available while draining (#124)
- Handle better the case where 2 publishers with the same ingress ID connect to the same ingress instance (#125)
- Check stream key in WHIP DELETE call (#126)
- Make sure handler processes use the same node id as the service (#129)
- Update the WebRTC settings engine to match the sessions parameters (#139)
- Adopt jitter.PopSamples in the WHIP handler (#141)
- Only accept specific file types in url pull (#142)
- Fix layer dimension calculation logic (#143)