feat(streaming): add Sunshine-based streaming for split-screen sessions#22
Open
hikaps wants to merge 6 commits into
Open
feat(streaming): add Sunshine-based streaming for split-screen sessions#22hikaps wants to merge 6 commits into
hikaps wants to merge 6 commits into
Conversation
…tance streaming Add standalone spike scripts that validate Sunshine can run as a managed subprocess with per-display capture. Covers multi-instance concurrent execution, virtual display creation, config generation, and virtual input device detection patterns.
…ine config generator Add per-instance output mode (physical/streaming) to InstanceConfig with streaming-specific fields. Extend D-Bus helper with virtual display and PipeWire null-sink creation. Add SunshineConfig utility for per-instance config generation with port spacing and codec support.
Add StreamManager for Sunshine subprocess lifecycle with crash recovery and configurable startup timeout. Extend GamescopeInstance with virtual output mode for streaming targets. Wire SessionRunner for mixed physical and streaming sessions with Sunshine device attribution. Extend VirtualDeviceWatcher to recognize Sunshine virtual input patterns.
Add output mode selector and streaming options (resolution, FPS, bitrate, codec) to SessionSetupPage with i18nc strings and streaming profile indicator. Add integration tests for mixed session configuration and StreamManager link fix in test CMake targets.
Spike validation scripts served their purpose proving the Sunshine subprocess approach. Remove before merge — production code is in src/core/StreamManager and src/core/SunshineConfig.
P1 fixes: - Fix command injection in DestroyNullSink (validate sinkName) - Remove global D-Bus disconnect breaking multi-stream monitoring - Guard startStream against entry overwrite during auto-restart - Write Sunshine credentials.json with proper SHA256(salt+password) format - Clean up streaming resources on natural gamescope exit - Fix log_file -> log_path config key P2 fixes: - Persist virtual display/null-sink state across helper restarts - Add port range validation (clamp to [MIN_PORT, MAX_PORT]) - Fix startup timeout dead code (Waiting -> Streaming on grace period) - Fix stopInstance cleanup order (stop gamescope before destroying display) - Use per-instance borderless instead of global setting - Fix ComboBox currentIndex bindings breaking on user interaction - Add cleanupTestCase to test_sunshine_config
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.
Summary
Implements streaming support via Sunshine, enabling mixed physical + streaming split-screen sessions. Closes #21.
What it does
New test coverage
test_streaming_config— SunshineConfig unit teststest_streaming_session— mixed session integration teststest_streammanager— StreamManager unit testsTest results
All 3 new streaming tests pass.
Files changed