Skip to content

feat(streaming): add native WebRTC compatibility mode - #1089

Merged
zortos293 merged 9 commits into
devfrom
capy/alliance-webrtc-fallback
Oct 4, 2026
Merged

zortos293 merged 9 commits into
devfrom
capy/alliance-webrtc-fallback

Conversation

@zortos293

@zortos293 zortos293 commented Oct 3, 2026 •

Copy link
Copy Markdown
Collaborator

Native WebRTC compatibility

Add a default-off WebRTC compatibility mode option under Settings → Network → Advanced. NVIDIA and alliance accounts can opt into WebRTC before launch. NVST remains the default; the setting warns that WebRTC is for compatibility and users should expect lower performance. The initial profile is capped at 1080p60 with H.264, 8-bit 4:2:0 SDR and stereo. Saved quality preferences are not overwritten.

The Rust streamer owns NVIDIA WebSocket signaling, SDP/ICE, and str0m media/input transport. Offers may contain microphone and inactive sections: their MIDs and order are retained, upload is disabled, and the selected incoming video MID is carried directly to feedback. Rejected microphone codecs retain valid SDP format identifiers. Compressed frames feed the existing native decoder and Qt GPU presenter; this does not restore Electron or add another renderer. Queues, startup/stall recovery, cancellation, and neutral input teardown are bounded. WebSocket signaling reads are nonblocking, with bounded buffered writes, so idle or partial signaling cannot hold up input and media feedback. GPU publication progress works across embedded platforms without treating compressed submissions or Windows initialization placeholders as decoded output.

Core-owned transport/profile provenance survives sparse polls, restart, and toggle-off resume. Explicit WSS descriptors are preferred; legacy RTSP-shaped descriptors for an owned WebRTC allocation resolve to the documented WSS service on port 443, matching Android. Redacted endpoint-shape diagnostics expose protocol/port selection without credentials or URLs. Foreign WebRTC seats require explicit opt-in. Contradictory native allocations are refused without converting, deleting, or replacing the cloud game. Legacy transport settings cannot bypass owned preparation.

Verification and limits

  • Application core: 730 tests passed; 4 existing integration tests ignored.
  • Native streamer workspace: 1,037 tests passed; 9 ignored. Strict workspace clippy and formatting pass.
  • Complete Linux Qt suite: 402/402 passed, including settings, recovery, windowed/fullscreen, graphics, and input tests. QML lint and localization validation pass.
  • Real local peers exercise signaling → ICE/DTLS/SCTP → H.264/Opus → OpenH264 decode, versioned input, pause, held-input teardown, and restart. Additional fixtures cover fragmented IDRs, retransmission, RTP wrap, H.264 level negotiation, stale callbacks, and queue backpressure.
  • The all-provider update covers NVIDIA and alliance allocation, owned preparation, restart, and opt-in guards. Application-core tests, strict lint, localization, and Qt settings/recovery checks pass.
  • Windows local verification: 198 streamer-core tests passed in three consecutive concurrent runs; 119 Qt orchestration tests passed. The extracted ZIP passes the network-settings smoke test without development runtime paths. The previous runtime revision passed Windows/Linux/macOS CI. The endpoint follow-up passes 733 application-core tests (4 existing ignored), strict lint, the before/after endpoint regression, and the extracted Windows package smoke; Windows/Linux/macOS CI now passes on the endpoint-fix revision. Live diagnostics confirm the endpoint fix reaches the server offer. The follow-up removes the incorrect three-section cap; four-section peers, unsupported PCMU microphone rejection, video/audio/input delivery, and an inactive video preceding the selected video are covered. Windows local core/transport tests pass 198/338 and the extracted ZIP smoke passes. Windows/Linux/macOS CI now passes on this offer-fix revision; live gameplay still needs the user’s retry.
  • Updated unsigned Windows portable ZIP: OpenNOW-WebRTC-offer-fix-a788825c-Windows-x64.zip, built locally from a788825c and attached in the implementation thread. SHA-256: 04c0ce183a5319fa28f4ae288dc14fb8fa272f88df1e4d737743b6a12c4144d0. This supersedes previous test artifacts.

This is an opt-in compatibility alternative, not automatic mid-seat NVST conversion. Direct UDP connectivity is required; TURN gathering, microphone upload, clipboard text, and native HID passthrough are not implemented. No live alliance account was exercised, so provider interoperability, congestion behavior, and real Windows gameplay remain acceptance gates. The runbook documents those checks.

WebRTC compatibility performance warning

Open in Capy

@coderabbitai

coderabbitai Bot commented Oct 3, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 47caa99a-55dc-4ff7-9930-275c64d06dc4

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@capy-ai capy-ai Bot changed the title feat(streaming): add native WebRTC compatibility for alliance partners feat(streaming): add native WebRTC compatibility mode Oct 4, 2026
@zortos293
zortos293 merged commit a4aaaa0 into dev Oct 4, 2026
14 checks passed
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