Skip to content

Releases: livekit/ingress

Version 1.5.0

22 Apr 22:59
363f609

Choose a tag to compare

Changelog

Added

  • Allow passing projectID for 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 TrimLeft bug, 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)
  • IngressID and ResourceID attributes on ingress participants (#344)
  • Custom HandlerLogger implementation (#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-gst for now. (#326)
  • Reject ingress if the Enabled flag is false (#319)

Changed

  • Log caps existence when connecting to caps notifier (#431)
  • Replace deprecated io/ioutil.ReadFile with os.ReadFile for 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 StateNotifier family of objects for injecting state-update behavior; add an (initially empty) ProjectID field to StateNotifier calls (#413)
  • Only report packet loss if trackStats is set (#401)
  • Update GStreamer to 1.26.7 (#396)
  • Update Go to 1.25 (#388)
  • Use FeatureFlags from GetIngressInfoResponse or StartIngressRequest; rename the SFUTranscodingBypassedWHIP config option to WHIPProxyEnabled (#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-go fork of go-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 BUFFERING when created directly by the Ingress server (#333)
  • Use logger utilities in ingress (#332)
  • Remove actions/cache from workflows/build.yaml — the cloud-ingress build uses Docker, so caching Go modules from the host is pointless (#325)

Fixed

  • Fix int cast 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 writeSample once the output is already closed — not just EOF — so hitting the shutdown timeout no longer sets pipelineError and flips the pipeline to a failed state (#412)
  • Do not treat io.EOF as a pipeline error during shutdown; handleSample() keeps returning FlowOK while samples are dropped so GStreamer can drain its queues without interpreting early FlowEOS as 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.WriteHeader call: 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

  • Bump golang.org/x/image to v0.38.0 (#426)
  • Bump golang.org/x/net from 0.35.0 to 0.38.0 (#358)
  • Bump golang.org/x/crypto from 0.32.0 to 0.35.0 (#355)
  • Bump golang.org/x/net from 0.31.0 to 0.33.0 (#321)

Version 1.4.3

13 Dec 17:44
0af8f0e

Choose a tag to compare

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

21 May 23:09
44a16e9

Choose a tag to compare

Version 1.4.2 (#271)

Changelog

Added

  • Add WHIP ICE Restart Support (#267)

Version 1.4.1

26 Apr 15:26
5620351

Choose a tag to compare

Changelog

Added

  • Support for EnableTranscoding (#256)

Fixed

  • Avoid panic if the config is changed before the service is started (#249)
  • Deregister psrpc topics (#251)
  • Connect to room asynchronously (#250)
  • Populate the updated_at state field (#254)
  • Bump golang.org/x/net from 0.22.0 to 0.23.0 (#255)

Version 1.4.0

05 Apr 19:58
c2b9212

Choose a tag to compare

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

03 Feb 00:32
09377cc

Choose a tag to compare

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

  • Use a secret token to authenticate relay connections (#186)
  • Update go-sdk to fix pli missed (#188)
  • Use new upstream go-gst repository (#189)
  • Refactor stats gathering functionality (#201)
  • Add nil check in media stats merging code (#204)
  • Do not use sample providers in the go SDK (#212)

Version 1.2.2 (#184)

21 Dec 01:18
e361b31

Choose a tag to compare

Changelog

Fixed

  • Refactor configuration module and support updating the service configuration (#174)
  • Refactor health handler (#176)
  • Count URL requests in the prometheus requests gauge (#179)
  • Stop the gstreamer pipeline cleanly when deleting an ingress (#181)
  • Drain output channel on EOS (#183)

Version 1.2.1

29 Nov 03:29
83ab7bc

Choose a tag to compare

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

18 Oct 00:12
faf2a25

Choose a tag to compare

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

17 Aug 16:48
2c0e42d

Choose a tag to compare

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)