Releases: andygrundman/moonlight-xbox
Release list
1.17.11-pre4
Changes since 1.17.11-pre3:
-
Added a setting to choose between frame pacing methods, which are called Immediate (for Series) and Dispkay-locked (for Xbox One). One will clearly be better than the other depending on console, but you be the judge.
-
Both frame pacers are now a little more aggressive at trying to keep their frame queues from growing above 2.0.
-
Fix hang on server disconnection by going back to the host list.
-
Tried to improve reliability of Disconnect and Disconnect & Close, which sometimes could leave you at an empty screen. There are still some bugs in this area, just kill and restart the app if you don't see your host after disconnecting.
-
Fixed bug where the View or Menu button would be sent to the host when activating the popup menu combo (the button pressed first would be sent). Those 2 buttons are now buffered 125ms before sending to the host, leaving enough time to hit both of them. The 4-button alternate combo has also been removed, because we can't buffer any real buttons like this. Let me know if the delay is too long or too short, it might get a setting.
-
Added a Show Keyboard button. It will show the experimental keyboard if it's enabled (Global Settings) or the normal Xbox keyboard. I also cleaned up a lot of the button handling code in the mouse and keyboard modes, so they should hopefully feel a bit better.
1.17.11-pre3
Changes since 1.17.11-pre2:
- Xbox One consoles now use a different rendering mode that locks the rendering frame rate to the refresh rate and uses the current stream framerate to evenly pace new frames with repeated prior frames. This should avoid most artifacts at the cost of slightly higher latency. This mode is more complex and needs additional frame drop logic, so you will probably notice a few more dropped frames. You will notice the stat for "Rendering frame rate" being equal to the refresh rate (usually 59.94 or 119.88 with a TV). It's ok if you see something else here, especially with PC monitors. I have a portable 1440p panel that runs at 61.07hz for some reason.
- Xbox Series S/X continue to use the prior mode, where frames are rendered as they arrive with the task of displaying repeated frames left to the OS. This results in the lowest latency and works well on the faster systems.
I don't have good names for these 2 rendering modes. Please let me know if you have any suggestions.
Important: If you have graphs enabled on Xbox One and notice stuttering, artifacts, screen tearing, or if the render time value is more than a couple milliseconds, please disable the graphs. Dropping to a lower streaming resolution can also help.
Also, this mode on Xbox One requires a Sunshine version that supports accurate frame RTP timestamps, making it incompatible with very old versions of Sunshine and probably GeForce Experience. Always use the latest nightly build if you have problems. You should also set the Minimum FPS Target value in Sunshine to 20 or less (but not 0).
1.17.11-pre2
Changes from pre1:
- Further optimize the render loop for lower latency and less locking of the decoder thread.
1.17.11-pre1
This dev build includes the following changes from 1.17.10:
- Fix Xbox One performance regressions.
- Port new D3D shaders from moonlight-qt. This improves YUV->RGB conversion accuracy. These can be tested by experimenting with system settings under Video Fidelity -> Color depth (8 and 10-bit) and Color space (Standard/limited vs PC RGB/full).
- Fix incorrectly held View or Menu button when activating View+Menu combo that could activate Sunshine's Guide button emulation.
- Fix crash that could occur when reconnecting.
I've tested this on Xbox One X up to 4K60 and 1440p120. If you still experience visual artifacts, try the following things in order:
- Run the latest Sunshine nightly build.
- If you must use Apollo, ensure your stream FPS exactly matches the Xbox refresh rate which is usually 59.94 or 119.88hz.
- Disable Performance Graphs in host settings.
- Stream at the next lower resolution. Leave Xbox system output at 4K or you will lose HDR.
- Hide stats.
Performance on Xbox Series S/X should be the same as the previous version.
Known issues: (kill and restart the app if these happen)
- Stream may lock up on reconnect.
- Disconnecting may cause the host to no longer be seen.
1.17.10-pre3
Changes since pre2:
- Fixed crash at startup caused by using the wrong shader version. This only affected Xbox One consoles.
1.17.10-pre2
Changes since pre1:
- Sync recent SDR/HDR shader improvements from moonlight-qt. Improves YUV->RGB conversion accuracy.
- Don't trigger Sunshine's "hold View button" logic when opening the menu. It would cause the Guide button to trigger after a few seconds.
You may want to test this build in both SDR and HDR, as well as in both full and limited range (Settings -> Video Modes - >Color Space, PC RGB is full, Standard is limited). To report issues, please take an SDR screenshot by going to https://xbox-ip-address:11443/#Media%20capture It's not possible to capture an HDR screenshot with this tool.
1.17.10-pre1 - No more screen tearing, improved frame pacing, 60fps fixes
This build is focused on improving the frame pacing at both 60 and 120fps with a focus on providing a smooth 60fps experience on all consoles. Xbox Series S/X should work well at all resolutions and refresh rates. For older consoles the goal is smooth 60fps streaming. I have tested up through 1440p120 on Xbox One X with fairly good results. More testing is needed on older consoles and YMMV.
If you have problems at 120fps, try letting the stream run for a minute or so and see if it settles. When reporting issues, please mention which Xbox model you have, your system output resolution, refresh rate, stream resolution/framerate, and bitrate. When in doubt, try using the default bitrate and dropping down one resolution. Hide stats and graphs for maximum performance. Prefer using the "Disconnect and Close" option when changing settings, because an existing session may use old settings that confuse the client.
I recommend using a recent Sunshine nightly build which has support for NTSC refresh rates of 59.94 and 119.88. You should also change the "Minimum FPS Target" setting to 20 or less. Apollo lacks support for NTSC refresh rates, so please do not report problems with Apollo. If using a VDD you may have some luck by setting its refresh rate manually to match your TV.
About stats changes:
Average frames in queue: 1.0
Average frame queue/render/present time: 0.09/0.52/4.96 ms
-
Frame Queue: Frames are decoded by a separate thread and added to the queue, which is currently configured with a high water mark of 3 frames. 1.0 is the ideal value. At 3.0, it will start to drop frames in an alternating fashion, meaning the worst case frame drop situation would halve the framerate but still be smooth. If the queue gets into trouble, the best way to clear it out is to view low-framerate content such as the Windows desktop until it clears out. You can also try lowering your bitrate if you have dropped frame issues.
-
Average frame queue time: The amount of time between the frame being decoded and rendered for display. If the number is higher than 1 frame it means the frame queue has buffered more than 1 frame, for a variety of reasons.
-
Render time: On Xbox this number indicates how long the graphical elements of 1 frame took to render, including the decoded frame, and if enabled, text stats, graphs, and logs. Stats & graph overhead is low, although graphs are slower on Xbox One consoles. You can disable only the graphs in host settings if this number concerns you. Log render cost is very high, you can see the impact of viewing logs directly in this number. Never leave logs open during normal use.
-
Present time: This is the amount of time the render loop waited to align with the next vsync interval. This is the primary method of frame pacing. This will never exceed 1 frame and seeing high numbers up to 15ms should not concern you. You can think of this number as a measure of how "out of phase" your client's display is from that of the host. This out-of-phase nature is why the host should not make use of vsync, and should use a global frame limiter set to either 60 or 120fps. You don't need to set your limiter to a fractional rate.
1.17.7-pre3
Frame Pacing:
- Refactored and optimized FFMpegDecoder to run in DIRECT_SUBMIT mode on its own thread.
- Add frame pacing originally based on moonlight-qt but heavily rewritten at this point.
- Automatic support for NTSC refresh rates 59.94 and 119.88 when using the latest Sunshine.
- Switch to SetMaximumFrameLatency(1) with GetFrameLatencyWaitableObject and precise Present() timing.
120fps:
- Disables hardware vsync, use a custom 120hz vsync emulation.
- Backend supports adjusting the present delay to move the location of the screen tearing line, no UI for this yet.
Misc:
- 60fps streams wil always enable vsync and have no screen tearing.
- Add auto-bitrate calc from moonlight-qt when changing resolution or fps.
- Add warning to LogRenderer about it reducing performance.
- Add message about HDR requiring 4K system resolution.
- Removed host settings for tearing and vsync.
- Update ffmpeg to 7.1.1.
- Fix 10-bit offsets in BT2020 shader.
1.17.7-pre1
This is a self-signed development snapshot from commit 496d5ab. The app is named "Moonlight UWP (AndyG)"
Important:
- Uncheck "Enable V-sync" to use 120fps.
- Xbox Dev Mode will not keep your video/audio settings, so be sure to setup 4k120, disable VRR, enable HDR. Set color depth to 30-bit and color space to Standard.
- If you get into a state with washed-out HDR, use the Toggle HDR menu item 2 times to switch to SDR and then back to HDR.
- The web portal has a handy screenshot feature on the Media Capture page. You can quickly grab a huge PNG image if you need to report a bug.
To install: Using MS Edge, from the Xbox Device Portal (port 11443 when in dev mode), click the Add button on My Games & Apps. Drag and drop the msixbundle file. You probably won't need the 2 appx files but if you get an error about dependencies, upload those too. The app should appear in the Games and Apps box on the Developer home screen. Before launching, use Select -> View Details on the app and ensure that the UWP option is set to Game. Game mode allows the app to use more system resources.