After both stdout and stderr readers exited, the Child handle was just dropped at the end of the match arm. On Windows std::process::Child's Drop neither kills nor waits, so the OS process kept its kernel object (and its bound ports) alive until either the JobObject KILL_ON_JOB_CLOSE fired on shell exit or init adopted it. In the crash-restart path this is worse: a fresh start() is launched while the previous runtime is still being reaped, and both processes race for port 11470. Explicitly kill().ok() + wait().ok() once the readers see EOF so the previous runtime is gone before we report 'Server terminated.' and fire the crash notice. Errors from killing an already-exited child are intentionally swallowed. Closes #50 |
||
|---|---|---|
| .github/workflows | ||
| bin | ||
| bin-arm64 | ||
| images | ||
| mpv-arm64 | ||
| mpv-x64 | ||
| setup | ||
| src | ||
| .gitignore | ||
| build-arm64.ps1 | ||
| build.ps1 | ||
| build.rs | ||
| Cargo.lock | ||
| Cargo.toml | ||
| generate_descriptor.js | ||
| libmpv-2_arm64.zip | ||
| libmpv-2_x64.zip | ||
| README.md | ||
| rust-toolchain.toml | ||
| server.js | ||
| stremiover.js | ||
| upload.ps1 | ||
Stremio shell: new gen
A Windows-only shell using WebView2 and MPV
Goals:
- Performance
- Reliability
- Easy to ship
In all three, this architecture excels the Qt-based shell: it is about 2-5x more efficient depending on the use case, as it allows MPV to render directly in the window through it's optimal video output rather than using libmpv to integrate with Qt.
This is due to Qt having a complex rendering pipeline involving ANGLE and multiple levels of composing and drawing to textures, which inhibits full HW acceleration.
Meanwhile in this setup MPV uses whichever pipeline it considers to be optimal (like the mpv desktop app), which is normally d3d11, allowing full HW acceleration.
For web rendering, we use the native WebView2, which is Chromium based but shipped as a part of Windows 10: therefore we do not need to ship our own "distribution" of Chromium.
Finally, this should be a lot more reliable as it uses a much simpler and more native overall architecture.