Skip to content

Releases: k4idyn/Moonlight-PSP

v0.2.3-beta — CABAC Dialog, MS LED Disable, Encoder Docs

16 Apr 03:28

Choose a tag to compare

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 ⚠️ Splash only
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

  1. Extract both files to \ms0:/PSP/GAME/Moonlight/\
  2. Both \EBOOT.PBP\ and \moonlight_me_helper.prx\ must be in the same directory
  3. Requires custom firmware
  4. Host must run Sunshine on the same LAN

Full changelog

See CHANGELOG.md

v0.2.2-beta — Adaptive Quality & Protocol Enhancements

15 Apr 03:05

Choose a tag to compare

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 ⚠️ Splash only
854×480 @ 15 ❌ No decode
1280×720 @ 15 ❌ No decode
480×272 @ 15 6.8 ✅ Stress test

Installation

  1. Extract both files to \ms0:/PSP/GAME/Moonlight/\
  2. Both \EBOOT.PBP\ and \moonlight_me_helper.prx\ must be in the same directory
  3. Requires custom firmware (6.60 PRO-C2 or 6.61 LME)
  4. Host must run Sunshine on the same LAN

Full changelog

See CHANGELOG.md

Moonlight-PSP v0.2.1-beta — OpenH264 Decoder + Audio Streaming

14 Apr 08:32

Choose a tag to compare

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

  1. Download both files below
  2. Copy to ms0:/PSP/GAME/Moonlight/ on your PSP
  3. 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

12 Apr 03:03

Choose a tag to compare

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

  1. Download both files below
  2. Copy to \ms0:/PSP/GAME/Moonlight/\ on your PSP
  3. 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

21 Mar 18:37

Choose a tag to compare

Pre-release

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_*_H convention project-wide to ensure consistent symbol resolution and eliminate reserved identifier usage.
  • ABI Safety & Encapsulation: Refactored the XML parsing layer in xml.c to 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 Makefile library sequence to resolve psp-fixup-imports ordering 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)

21 Mar 17:16

Choose a tag to compare

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

  1. Socket Descriptor Leak: The libgamestream HTTP implementation used standard POSIX close() for sockets. On the PSP, network sockets are managed by the pspnet_inet stack and require closeSocket() (mapped to sceNetInetClose) to be properly released to the system pool.
  2. 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.c to 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.c and associated TLS cleanup macros to use closeSocket().

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)

21 Mar 06:52

Choose a tag to compare

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

21 Mar 05:43

Choose a tag to compare

Pre-release

This is the initial alpha release of the Moonlight PSP Core. While functional, it is currently in an active debugging phase.