Skip to content

Add runtime-gated libwebrtc ICE re-nomination - #5

Draft
fergusean wants to merge 3 commits into
mainfrom
agent/legacy-ice-renomination
Draft

fergusean wants to merge 3 commits into
mainfrom
agent/legacy-ice-renomination

Conversation

@fergusean

@fergusean fergusean commented Jul 21, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • add authenticated legacy libwebrtc ICE re-nomination support through an immutable zyno-io/str0m fork revision
  • keep accepted remote nomination order monotonic even when candidate pairs are pruned
  • expose a disabled-by-default runtime flag and retain ICE restart as the fallback and kill-switch behavior
  • record authoritative selected-pair switches in logs and Prometheus metrics
  • include the exact M144 protocol/media experiment and its reproducible fault harness
  • gate and publish same-repository pull request images as ghcr.io/zyno-io/rtpbridge:pr- for staging

Why

M144 already supports continual gathering and legacy re-nomination, but the controlled ICE-lite side did not understand authenticated NOMINATION attributes. During a path change, the client therefore had to wait for media failure detection and perform an ICE restart, which made the Reconnecting audio banner visible. The experiment proves the same peer connection can move between candidate pairs without replacing ICE, DTLS, SRTP, RTP timelines, or SSRCs.

The synthetic hard-blackhole gap is still too long to call seamless, so the capability is off by default until real iOS and Android staging measurements pass. Disabling legacy_ice_renomination immediately restores baseline negotiation.

Dependency

Pinned fork commit: https://github.com/zyno-io/str0m/commit/750888c45c338bcbad64c51f009417b0bf459bd1

Checks

  • cargo fmt -- --check
  • cargo clippy -- -D warnings
  • cargo check --all-targets
  • 679 library tests
  • complete integration test suite
  • runtime-enabled and runtime-disabled SDP tests
  • experiment fault-injector test
  • clean Docker release build using only the remote pinned dependency
  • built image reports the expected BUILD_VERSION and --legacy-ice-renomination flag

Staging

Current audited image: ghcr.io/zyno-io/rtpbridge@sha256:2a6f8d29e640d7dbab277bc5e23c0a72a1138177b837e754333d1ec908ece32a (head 39e2c79).

After the docker-push-pr check succeeds, deploy ghcr.io/zyno-io/rtpbridge:pr- and add --legacy-ice-renomination to the container arguments. The standard image excludes the experiment-only path fault injector.

fergusean and others added 2 commits July 21, 2026 19:53
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
@fergusean

fergusean commented Jul 22, 2026 •

Copy link
Copy Markdown
Contributor Author

Staging image published and registry-verified from PR head 39e2c79adf5ba50138361ec00358a6c790d92d10: ghcr.io/zyno-io/rtpbridge:pr-5 (sha256:2a6f8d29e640d7dbab277bc5e23c0a72a1138177b837e754333d1ec908ece32a). The immutable image reports version pr-5-39e2c79adf5ba50138361ec00358a6c790d92d10 and exposes --legacy-ice-renomination. Enable the flag only for the staging experiment; omit it for baseline behavior.

Co-authored-by: Codex <codex@openai.com>

This branch has not been deployed

No deployments
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.

1 participant