Skip to content

Initialize URL ingress with BUFFERING status#333

Merged
biglittlebigben merged 1 commit intomainfrom
benjamin/url_ingress_race
Mar 5, 2025
Merged

Initialize URL ingress with BUFFERING status#333
biglittlebigben merged 1 commit intomainfrom
benjamin/url_ingress_race

Conversation

@biglittlebigben
Copy link
Copy Markdown
Contributor

@biglittlebigben biglittlebigben commented Mar 5, 2025

Make sure to initialize the ingress state for URL ingresses that are created directly by the Ingress server

@biglittlebigben biglittlebigben requested a review from a team as a code owner March 5, 2025 22:59
@biglittlebigben biglittlebigben merged commit 76d31be into main Mar 5, 2025
@biglittlebigben biglittlebigben deleted the benjamin/url_ingress_race branch March 5, 2025 23:16
@biglittlebigben biglittlebigben mentioned this pull request Apr 22, 2026
biglittlebigben added a commit that referenced this pull request Apr 22, 2026
 # 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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants