Merged
Conversation
# 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)
boks1971
approved these changes
Apr 22, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changelog
Added
projectIDfor URL requests (Allow passing projectID for URL requests. Also cleanup some fucntion parameters #429)TrimLeftbug, and a mutex-copy bug in a proto message (Adding linters take 2 #425)IngressIDandResourceIDattributes on ingress participants (Add IngressID and ResourceID attributes for the ingress participants #344)HandlerLoggerimplementation (Update protocol and implement custom HandlerLogger #339)go-gstfor now. (Add support for announcing out of network splice events ad participant attributes #326)Enabledflag is false (Reject ingress if Enabled flag is false #319)Changed
io/ioutil.ReadFilewithos.ReadFilefor config loading (Replace deprecated io/ioutil with os.ReadFile #424)StateNotifierfamily of objects for injecting state-update behavior; add an (initially empty)ProjectIDfield toStateNotifiercalls (Refactor ingress handler RPC server #413)trackStatsis set (Report packet lost only if trackStats is set #401)FeatureFlagsfromGetIngressInfoResponseorStartIngressRequest; rename theSFUTranscodingBypassedWHIPconfig option toWHIPProxyEnabled(Use FeatureFlags from GetIngressInfoResponse or StartIngressRequest #382)livekit/gst-gofork ofgo-gst(GStreamer 1.24 #367)urfave/cli/v3(feat(cli): update to urfave/cli/v3 #364)BUFFERINGwhen created directly by the Ingress server (Initialize URL ingress with BUFFERING status #333)actions/cachefromworkflows/build.yaml— the cloud-ingress build uses Docker, so caching Go modules from the host is pointless (Remove actions/cache usage in workflows/build.yaml #325)Fixed
intcast flagged by Copilot (Fix Int cast flagged by copilot #416)writeSampleonce the output is already closed — not just EOF — so hitting the shutdown timeout no longer setspipelineErrorand flips the pipeline to a failed state (Ignore all errors from writeSample when the output is already closed #412)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 (Don't treat EOF as pipeline error #411)response.WriteHeadercall: only send a status code if data hasn't already been written (an implicit 200) (Fixing superfluous response.WriteHeader call #395)context.Canceled(Propage sink error in case it exists and input error is context canceled (generic and consquential) #381)Security
golang.org/x/imageto v0.38.0 (Update module golang.org/x/image to v0.38.0 [SECURITY] #426)golang.org/x/netfrom 0.35.0 to 0.38.0 (Bump golang.org/x/net from 0.35.0 to 0.38.0 #358)golang.org/x/cryptofrom 0.32.0 to 0.35.0 (Bump golang.org/x/crypto from 0.32.0 to 0.35.0 #355)golang.org/x/netfrom 0.31.0 to 0.33.0 (Bump golang.org/x/net from 0.31.0 to 0.33.0 #321)