Releases: k4idyn/Moonlight-PSP
v0.2.3-beta — CABAC Dialog, MS LED Disable, Encoder Docs
PSP Moonlight v0.2.3-beta
What's New
- CABAC warning dialog: Alerts user when host sends CABAC-encoded H.264 (PSP only supports CAVLC). Decoder and audio are gated until dialog is dismissed.
- Memory Stick LED disabled: LED turned off during streaming via kernel PRX (sceSysconCtrlLED) to reduce distraction and save power.
- Encoder tuning guides: Comprehensive Sunshine encoder configuration docs for AMD, NVIDIA, Intel, and software encoding — optimized for PSP's constrained decoder.
- ms0: write gating: All Memory Stick writes disabled in retail builds (diag logs, debug dumps) to eliminate stutter from flash I/O during streaming.
Hardware Test Results (PSP-1000, 802.11b WiFi)
| Resolution | FPS | Status |
|---|---|---|
| 480×272 @ 30 | 13.8 | ✅ Playable |
| 480×272 @ 30 | 9.5 | ✅ Game grid |
| 368×208 @ 20 | 12.3 | ✅ Custom res |
| 368×208 @ 15 | 10.5 | ✅ Low FPS |
| 640×360 @ 15 | — | |
| 854×480 @ 15 | — | ❌ No decode |
| 1280×720 @ 15 | — | ❌ No decode |
| 480×272 @ 15 | 6.8 | ✅ Stress test |
AMD Encoder A/B Test Results (14 Combos)
Best-performing Sunshine settings for PSP streaming (480×272 @ 30fps):
| Rank | Combo | Usage | Quality | RC | FPS | Decode ms |
|---|---|---|---|---|---|---|
| 🥇 | #13 LowLat HQ | lowlatency_hq | speed | vbr_latency | 38.2 | 25.9 |
| 🥈 | #6 Quality | quality | quality | vbr_latency | 28.1 | 35.2 |
| 🥉 | #3 Speed | ultralowlatency | speed | vbr_latency | 24.9 | 39.7 |
| ❌ | #1 Baseline | ultralowlatency | balanced | vbr_latency | FAIL | — |
| ❌ | #4 CQP | ultralowlatency | speed | cqp | FAIL | — |
| ❌ | #14 CBR+HRD | ultralowlatency | balanced | cbr | FAIL | — |
Key finding: \lowlatency_high_quality\ + \speed\ + \�br_latency\ + \cavlc\ is the optimal AMD config for PSP.
📖 Encoder Settings Guides
New docs for tuning Sunshine per GPU vendor — critical for PSP compatibility:
- AMD (AMF) — 13 settings with Web UI locations and recommended values
- NVIDIA (NVENC) — 8 settings covering presets, rate control, and AQ
- Intel (QSV) — 3 settings with generation-specific notes
- Software (x264) — CPU fallback preset and tune options
These guides matter because the PSP's software H.264 decoder is extremely constrained — wrong encoder settings on the host will cause failed streams, visual corruption, or massive frame drops. The guides explain which settings work and why.
Installation
- Extract both files to \ms0:/PSP/GAME/Moonlight/\
- Both \EBOOT.PBP\ and \moonlight_me_helper.prx\ must be in the same directory
- Requires custom firmware
- Host must run Sunshine on the same LAN
Full changelog
See CHANGELOG.md
v0.2.2-beta — Adaptive Quality & Protocol Enhancements
PSP Moonlight v0.2.2-beta
What's New
- Adaptive quality system: PID-based bitrate controller, IDR exponential backoff, quality hysteresis, FEC predictive burst loss detection
- Keyboard & scroll input: Type 5 keyboard events, mouse scroll (0x09), hi-res scroll (0x33)
- Controller battery reporting: PSP battery % forwarded to host (Type 0x40)
- Dynamic resolution scaling: 4-step ladder (256x144 → 480x272)
- RTCP Receiver Reports: Server-side quality stats
- Audio improvements: Quality-adaptive PLC, dynamic ring depth
- Video improvements: Frame pacing, P-frame skip-ahead, enhanced watchdog
Hardware Test Results (PSP-1000, 802.11b WiFi)
| Resolution | FPS | Status |
|---|---|---|
| 480×272 @ 30 | 13.8 | ✅ Playable |
| 480×272 @ 30 | 9.5 | ✅ Game grid |
| 368×208 @ 20 | 12.3 | ✅ Custom res |
| 368×208 @ 15 | 10.5 | ✅ Low FPS |
| 640×360 @ 15 | — | |
| 854×480 @ 15 | — | ❌ No decode |
| 1280×720 @ 15 | — | ❌ No decode |
| 480×272 @ 15 | 6.8 | ✅ Stress test |
Installation
- Extract both files to \ms0:/PSP/GAME/Moonlight/\
- Both \EBOOT.PBP\ and \moonlight_me_helper.prx\ must be in the same directory
- Requires custom firmware (6.60 PRO-C2 or 6.61 LME)
- Host must run Sunshine on the same LAN
Full changelog
See CHANGELOG.md
Moonlight-PSP v0.2.1-beta — OpenH264 Decoder + Audio Streaming
Moonlight-PSP v0.2.1-beta
OpenH264 decoder, first-time audio, custom button mapping — building on the v0.2.0-beta foundation.
What's New (vs v0.2.0-beta)
- OpenH264 decoder — replaces FFmpeg (1/10th binary size, native MIPS ASM, constrained-baseline H.264)
- Audio streaming — Opus 48kHz stereo with PLC recovery, FEC, and volume ducking (enable/disable in settings)
- Custom button mapping — per-action controller configuration via settings menu
- Zero-delay display mode — direct ME output to framebuffer (bypasses safety buffer)
- WiFi keepalive — active during streaming (3-second interval prevents drops)
- Signal strength HUD — real-time WiFi signal overlay
- 480×272 native resolution — fills the PSP screen
Changed
- Dual watchdog upgraded (decode + display monitoring)
- RTP reassembly improved with FEC piggyback every 5th ping
- Settings menu revamped with toggle controls
- PLC threshold tuned to 45ms with consecutive-loss tracking
- Deblocking filter disabled for performance (known visual trade-off)
Fixed
- Server-side stream stall from excessive IDR requests
- Audio underruns reduced from 31.2% to 0.47%
- IDR flood during packet loss (capped at 1 per 500ms)
- Display watchdog false positives during startup
Test Results (Xbox Cloud Gaming via Sunshine)
| Metric | v0.2.0-beta | v0.2.1-beta |
|---|---|---|
| Decoder | FFmpeg (sw) | OpenH264 (hw-assisted) |
| Resolution | 256×144 | 480×272 |
| FPS | 14–17 | 10–18 |
| Audio underruns | N/A (no audio) | 0.47% |
| Watchdog restarts | 0 | 0 |
| WiFi stability | Drops after ~30s | Stable 140s+ |
Installation
- Download both files below
- Copy to
ms0:/PSP/GAME/Moonlight/on your PSP - See INSTALL.md for full setup guide (Sunshine configuration, first launch, troubleshooting)
Requirements
- PSP-2000 or PSP-3000 (Media Engine access required)
- Custom firmware (ARK-4 recommended, PRO-C2 / ME-LME also supported)
- Sunshine host on local network
Downloads
| File | Description |
|---|---|
EBOOT.PBP |
Main application (2.1 MB) |
moonlight_me_helper.prx |
Kernel helper for Media Engine access (3 KB) |
Moonlight-PSP v0.2.0-beta — First Public Beta
Moonlight-PSP v0.2.0-beta
Complete ground-up rewrite — the first public beta of the PSP Moonlight streaming client.
What's New (vs v0.1.x alpha)
- Hardware H.264 decoding via the PSP Media Engine (replaced software CAVLC pipeline)
- RTP reassembly with Reed-Solomon FEC error correction
- Opus audio — 48kHz stereo decoded and resampled to 44.1kHz PSP native
- GPU-accelerated display — VFPU YCbCr→RGB conversion + GE DMA blit
- Full game discovery — SSDP host scan, pairing, game list with icon caching
- Dual-watchdog crash detection monitoring ME and main CPU
- Comprehensive UI — game grid, pairing PIN entry, settings, stream connect, exit dialog
- mbedTLS crypto — DTLS/TLS for Sunshine pairing and stream encryption
- ARK-4 CFW support — tested and documented
Installation
- Download both files below
- Copy to \ms0:/PSP/GAME/Moonlight/\ on your PSP
- See INSTALL.md for full setup guide (Sunshine configuration, first launch, troubleshooting)
Requirements
- PSP-2000 or PSP-3000 (Media Engine access required)
- Custom firmware (ARK-4 recommended, PRO-C2 / ME-LME also supported)
- Sunshine host on local network
Downloads
| File | Description |
|---|---|
| \EBOOT.PBP\ | Main application (2.6 MB) |
| \moonlight_me_helper.prx\ | Kernel helper for Media Engine access (3 KB) |
Moonlight PSP v0.1.0.3-alpha
Overview
This release implements a series of architectural refinements and toolchain standardizations. The focus is on improving ABI safety, project-wide consistency, and build reproducibility.
Architectural Improvements
- Header Guard Standardization: Applied the
MOONLIGHT_*_Hconvention project-wide to ensure consistent symbol resolution and eliminate reserved identifier usage. - ABI Safety & Encapsulation: Refactored the XML parsing layer in
xml.cto use public Mini-XML accessor APIs, ensuring compatibility with modern library versions. - Toolchain Stabilization: Normalized the PSP SDK environment to dynamically use standard paths via
psp-config --pspsdk-path, completely removing hard-coded Windows drive dependencies and local validation scripts. - Linker Integrity: Optimized the
Makefilelibrary sequence to resolvepsp-fixup-importsordering requirements.
Verification Results
- System Parity: Verified successful network initialization and pairing sequence via PPSSPP emulator.
- Pairing Success: Successful generation of pairing PIN confirms core protocol stability.
- Build Integrity: Verified generation of standard
EBOOT.PBP(1,794,994 bytes) compiled natively from the newly cleaned source tree.
Moonlight PSP v0.1.0.2-alpha (Architectural Stabilization)
Release Notes v0.1.0.2-alpha
Overview
This alpha release identifies and resolves the primary driver of the 0x80020320 (too many open files) error during the pairing and certificate loading process.
Technical Findings
- Socket Descriptor Leak: The
libgamestreamHTTP implementation used standard POSIXclose()for sockets. On the PSP, network sockets are managed by thepspnet_inetstack and requirecloseSocket()(mapped tosceNetInetClose) to be properly released to the system pool. - FAT Driver Asynchronicity: The PSP's Memory Stick driver (FAT/sceIo) handles file closures asynchronously. High-frequency logging (opening/writing/closing 50+ times per second) during the pairing handshake overwhelmed the system, leaking effective handles until the system reached the hard kernel limit.
Fixes
- MFILE Protection: Rewrote
logger.cto use a global persistent file handle initialized at boot. This bypasses the asynchronous close queue and significantly improves I/O performance. - Socket Integrity: Patched
http.cand associated TLS cleanup macros to usecloseSocket().
Known Issues
- 0x80 (ENOTCONN): Connection to the host's control stream ends prematurely with error code 128 (ENOTCONN). This is currently being investigated as a possible ENet protocol handshake failure or Sunshine server-side rejection.
v0.1.0.1-alpha (Standalone Build Verification)
Release v0.1.0.1-alpha
Status: Alpha / Experimental
This release marks the first fully standalone build of the Moonlight PSP client.
All dependencies (mbedtls, enet, opus, mxml) are now bundled within the repository.
Key Changes:
- Standalone Portability: No manual dependency building required.
- Environment Verification: Successfully verified clean-room build on Windows.
Important Note: While initial connectivity and environment setup are verified, long-term streaming stability is still under active testing. Use PPSSPP for debugging.
v0.1.0-alpha: Initial Alpha Build
This is the initial alpha release of the Moonlight PSP Core. While functional, it is currently in an active debugging phase.