Repository navigation
This release adds a second video stream to the host, off by default. A paired MoonlightVibe client can show a second picture from the same session in a window of its own. Everything from ms7 is included.
Second video stream
With second_video_stream off, which is the default, a session behaves exactly as in ms7. When an administrator turns it on, a client can ask for a second picture. It is one of two things:
- A window. The host captures one window, picked by its title, with Windows.Graphics.Capture. It follows the window if it moves, raises it when the stream starts, and ends the stream if the window stays gone.
- A display of its own. The host makes a SudoVDA virtual display of the size the client asked for, captures it, and removes it when the second stream ends. Windows left on it move back to the other display.
The client can ask for the second stream to stop, for example when the user closes that window, without ending the session.
- Settings. New options
second_video_stream(off by default),capture_window,capture_window_wait_timeout(default 10 seconds) andcapture_window_raise(default on). They are indocs/configuration.md. - Protocol. The second stream has its own RTSP
SETUP streamid=video2and shares the video UDP port. The host offers it in the DESCRIBE, and offers the display kind only where it can make one. New control messages ask for a keyframe for one stream, tell the client a stream ended, and let the client stop the second stream. The details are in ApolloVibe PR 16. - Capture. The second stream has a capture thread of its own, so the first stream's capture is never touched.
- Older clients never see the new attributes and are unaffected.
What it needs
- MoonlightVibe 6.4.0 or newer on the client, with "Show a second window" turned on in Settings.
- For a window: nothing extra. It works wherever the first stream does, including a MultiSeat seat.
- For a whole display: the console session. The host offers it only when the SudoVDA driver works and the session is not a remote-desktop session. A MultiSeat seat is a remote-desktop session, so a seat can show a window but not a display. If a client asks a seat for a display, it gets one stream.
Seats
MultiSeat's master branch has a SecondVideoStream option that switches this on for its seats. It is off by default, and no MultiSeat release has it yet. A released MultiSeat leaves it off.
How this was checked
- Tested by hand on one console host with a handheld client on ethernet. Both kinds of second stream ran, clicks reached the right window, and closing the second window removed the display and left the first stream running.
- The window stream also ran in a remote-desktop session of the kind a MultiSeat seat uses.
- The Gaming seat on that host runs this exact
sunshine.exewith the option on. A second window was not tried there.
Not verified
- There are no automated tests for the second stream.
- It was not run against an older client or an older host end to end. That was checked by reading the code.
- One window-source stream per Apollo process.
- A window that is not 16:9 shows black bars in the second picture.
- The second picture takes absolute pointer input only, with no relative mouse.
- A short hitch in the first stream can happen when the second display is removed. Starting both streams adds a little time to the connect.
- The encoder limit on concurrent sessions per GPU is not measured on a seat.
Install
Download apollovibe-windows-x64.zip, unzip it, and run sunshine.exe. MultiSeat's installer fetches this asset by itself.