diff --git a/README.md b/README.md index e31423d..1902f78 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,16 @@ No capture card. No Remote Play. No cloud. Just your console and your network.by fstat13
++📖 How to use it — step-by-step guide + · +🇮🇹 Guida passo-passo in italiano + · +🔧 Build from source + · +🇮🇹 Build dai sorgenti +
+ --- ## ✨ What you get diff --git a/docs/BUILD.it.md b/docs/BUILD.it.md new file mode 100644 index 0000000..6a0cb71 --- /dev/null +++ b/docs/BUILD.it.md @@ -0,0 +1,162 @@ +# PSCapture — build dai sorgenti, passo per passo + +Tutto il necessario per passare da questi sorgenti a un `PSCapture.exe` +funzionante e a un `pscapture.elf` per la console. Ogni comando è scritto +esattamente come va eseguito, in ordine. Qui dentro non c'è magia: l'ordine +conta e ogni passo è spiegato. + +Ci sono due metà, che si compilano in posti diversi: + +| Metà | Output | Dove si compila | Toolchain | +|---|---|---|---| +| Payload console | `payload/pscapture.elf` | Docker (container Linux) | PS5 payload SDK (prospero-clang) | +| Lato PC | `pc/pscapture.exe` + `pc/pscapture.dll` | Windows | MinGW-w64 (`gcc` + `windres`) | + +🇬🇧 English version: [BUILD.md](BUILD.md) + +--- + +## Parte 1 — Il payload per la console + +### 1.1 Cosa serve + +- **Docker** (Docker Desktop su Windows, o Docker normale su Linux/macOS). +- **L'immagine del PS5 payload SDK.** È il payload SDK della community per + PS5 (`prospero-clang`, `make`, `PS5_PAYLOAD_SDK` nell'ambiente) impacchettato + in una immagine. Sulla macchina di sviluppo l'immagine si chiama `ps5sdk:18` + — qualsiasi nome va bene, basta adattare i comandi. + +Controlla che l'immagine ci sia: + +```bash +docker images | grep ps5sdk +``` + +### 1.2 Build + +Dalla radice della repo: + +```bash +docker run --rm -v "$PWD/payload:/payload" -w /payload ps5sdk:18 make +``` + +Su Windows (PowerShell/cmd) metti il percorso completo al posto di +`"$PWD/payload"`, es.: `-v "C:\Users\tuonome\PSCapture\payload:/payload"`. + +Risultato: **`payload/pscapture.elf`** (~175 KB). + +Il `Makefile` fa l'unica cosa che conta: compila `main.c` con il clang +Prospero dell'SDK e linka l'ELF finale. Nessun altro input. + +### 1.3 Opzionale — mandarlo alla console + +Con la console jailbroken (payload loader sulla porta 9021): + +```bash +docker run --rm -v "$PWD/payload:/payload" -w /payload ps5sdk:18 \ + make deploy PS5_HOST=192.168.0.36 +``` + +(oppure carica `pscapture.elf` con il loader che usi di solito). + +Come si presenta un avvio sano sulla console: + +- appare `/data/pscapture.log` con il log di partenza, +- appare `/data/pscapture.port` con la porta TCP dello stream, +- la console mostra la notifica *PSCapture is streaming on:PORT*. + +--- + +## Parte 2 — Il lato PC + +### 2.1 Cosa serve (Windows) + +**MinGW-w64 64-bit** con `gcc` e `windres`. Sulla macchina di sviluppo: + +```powershell +winget install BrechtSanders.WinLibs.POSIX.UCRT +``` + +(oppure qualsiasi MSYS2 con `mingw-w64-x86_64-gcc` — `pacman -S mingw-w64-x86_64-gcc`). + +Controlla che entrambi siano nel PATH: + +```bash +gcc --version +windres --version +``` + +### 2.2 Build — l'ordine è obbligatorio + +`pscapture.res` è un bundle che **incastra i file così come sono su disco**: +l'icona, il payload della console e il driver della capture card. Quindi la +DLL va compilata *prima* del passo risorse, e il payload deve già trovarsi in +`pc/` quando gira `windres`. L'EXE si compila per ultimo. + +```bash +cd pc + +# 0) porta il payload appena compilato accanto al .rc (viene incastrato così com'è) +cp ../payload/pscapture.elf . + +# 1) il driver della capture card (filtro sorgente DirectShow) +gcc -O2 -shared -static -static-libgcc -o pscapture.dll ps5cam.c \ + -lole32 -loleaut32 -luser32 -ladvapi32 -lws2_32 + +# 2) bundle: icona + payload + driver in un unico oggetto risorse +# (pscapture.rc => 1 ICON pscapture.ico / 2 RCDATA pscapture.elf +# / 3 RCDATA pscapture.dll) +windres pscapture.rc -O coff -o pscapture.res + +# 3) l'app — un unico eseguibile autocontenuto +gcc -O2 -mwindows -o pscapture.exe pscapture.c pscapture.res \ + -lws2_32 -lshell32 -ladvapi32 -luxtheme +``` + +### 2.3 Verifica della build + +```bash +# il driver deve dipendere SOLO da DLL di sistema (niente libgcc/libwinpthread): +objdump -p pscapture.dll | grep "DLL Name" + +# le dimensioni giuste: exe ~500 KB, dll ~220 KB +ls -la pscapture.exe pscapture.dll + +# payload e driver sono davvero dentro l'eseguibile: +strings pscapture.exe | grep -c PSCapture +``` + +Avvia `pscapture.exe`: si apre la finestra (prompt UAC → Sì) e il pannello log +mostra la sequenza controllo driver → estrazione payload → tentativo di +deploy. È la stessa sequenza descritta in `docs/INSTALLER.md`. + +### 2.4 Trappole (imparate sul campo) + +- **`-static -static-libgcc` sulla DLL non è cosmetico.** Senza, il driver + può ritrovarsi a dipendere dalle DLL runtime di mingw che *non* sono nel + PATH di sistema quando Windows (o un'altra app) lo carica — il classico + *"impossibile trovare il modulo specificato"*. +- **Ordine di build.** `windres` legge `pscapture.dll` e `pscapture.elf` da + `pc/` al momento della compilazione. Ricompili la DLL → rifai `windres` → + ricompili l'EXE, ogni volta. Dimenticare il passo centrale spedisce il + driver vecchio dentro l'exe nuovo. +- **Solo ASCII** nelle stringhe passate alle API Win32 `*A` (titoli, bottoni, + log). Byte UTF-8 in una stringa ANSI si vedono come caratteri rotti. +- Il **manifest** (`pc/pscapture.manifest`) è tenuto solo per riferimento; + la build attuale **non** lo incastra — l'auto-elevazione è fatta nel codice + (`ShellExecuteEx … "runas"`), cosa che evita il `.rsrc merge failure` di + mingw con più manifest. + +### 2.5 Preparare una release + +```bash +mkdir -p dist +cp pc/pscapture.exe pc/pscapture.dll dist/ +``` + +Per gli utenti basta `pscapture.exe` da solo (la DLL e il payload viaggiano +dentro). La `pscapture.dll` sciolta si allega per le installazioni manuali: + +```bash +rundll32 "pscapture.dll",DllRegisterServer +``` diff --git a/docs/BUILD.md b/docs/BUILD.md index 6388da0..67ee63c 100644 --- a/docs/BUILD.md +++ b/docs/BUILD.md @@ -1,5 +1,7 @@ # PSCapture — build from source, step by step +🇮🇹 Versione italiana: [BUILD.it.md](BUILD.it.md) + Everything needed to go from these sources to a working `PSCapture.exe` and a `pscapture.elf` for the console. Every command is written exactly as it is run, in order. Nothing here is optional magic — the order matters and each diff --git a/docs/GUIDE.it.md b/docs/GUIDE.it.md new file mode 100644 index 0000000..5c9fa09 --- /dev/null +++ b/docs/GUIDE.it.md @@ -0,0 +1,116 @@ +# PSCapture — la guida a prova di scemo + +Da zero alla tua PS5 dentro Discord. Ogni passo dice esattamente cosa devi +vedere sullo schermo. Se qualcosa non torna, salta alla tabella dei problemi +in fondo. + +🇬🇧 English version: [GUIDE.md](GUIDE.md) + +--- + +## 0. Cosa serve + +**Sulla console** — tutto standard nei setup jailbreak di oggi: + +| Cosa | Porta | A che serve | +|---|---|---| +| Payload loader (tipo `elfldr`) | TCP **9021** | esegue il payload che gli mandiamo | +| FTP anonimo | TCP **2121** | l'app legge/scrive file sulla console | +| `pldmgr` autoloader (opzionale) | — | fa partire il payload a ogni boot | + +**Sul PC**: Windows 10/11 64-bit, rete cablata consigliata. + +**L'app**: `PSCapture.exe` — **un solo file**. Scaricalo dalla pagina Releases +della repo. È il pacchetto completo: il payload per la console e il driver +per Windows sono dentro di lui. + +--- + +## 1. Primo avvio sul PC + +1. Metti `PSCapture.exe` dove vuoi (va benissimo il Desktop) e **fai doppio click**. + +2. Windows chiede *"Consenti a questa app di apportare modifiche al + dispositivo?"* → clicca **Sì**. + *Perché:* registrare la webcam virtuale per tutti i programmi del PC + richiede i privilegi di amministratore, una volta sola. L'app si eleva da + sola — niente tasto destro. + +3. Si apre la finestra (scura, con il bottone blu grande **START STREAMING**). + Se la tua PS5 non è a `192.168.0.36`: scrivi il suo indirizzo nel campo + **PS5 IP** e premi **Apply**. + +4. Da qui in poi l'app fa tutto da sola. Guarda il pannello log scuro: + + | Dovresti leggere | Significa | + |---|---| + | `driver gia' installato` | la camera è già registrata — ok | + | `driver estratto dall'eseguibile (… byte)` + `driver registrato - la webcam 'PS5 Capture' e' pronta` | primo avvio: driver installato | + | `payload dall'eseguibile (… byte)` + `payload avviato - la PS5 deve mostrare la notifica PSCapture` | il payload sta girando sulla console | + | `porta stream: 9xxx` poi `collegato a 192.168.0.36:9xxx` | stream connesso | + | la pillola diventa **verde**: `STREAMING - scegli 'PS5 Capture' in Discord` | sei live | + +5. Sulla PS5 compare la notifica di sistema: **PSCapture is streaming on:PORT**. + (Quel toast è la console che ti dice che il payload è vivo.) + +> Se la pillola resta su *"IN ATTESA DELLA PS5 — accesa e col jailbreak +> avviato?"* la console è spenta, non è jailbroken, o l'IP è sbagliato. +> Vedi la sezione 5. + +## 2. Usarlo + +**Discord (in chiamata)** — *Impostazioni → Voce e video → Telecamera* → +**PS5 Capture**. In chiamata l'immagine è 720p: è il motore di Discord, chiede +1280x720 a *tutte* le camere (capture card incluse). + +**OBS** — *Sorgenti → **+** → Video Capture Device* → **PS5 Capture**. +Qui va alla piena risoluzione **1920x1080**. + +**ffmpeg** — `ffmpeg -f dshow -i video="PS5 Capture" registrazione.mkv` + +## 3. Uso quotidiano + +- Apri `PSCapture.exe` → **Sì** all'UAC. L'app si ricollega da sola: se il + payload è già sulla console (autoloader) lo stream parte subito; se la + console è spenta la pillola dice *"IN ATTESA DELLA PS5"* e si connette nel + momento in cui la console è pronta. +- Premi **Stop** (o chiudi l'app) per fermare lo stream. La camera si congela + sull'ultimo frame; gli altri programmi continuano a vedere il dispositivo. +- **Deploy payload** rimanda il payload a mano (utile dopo un riavvio della + console senza autoloader). **Install driver** riregistra la camera a mano + (utile se il log mostra un errore del driver). + +## 4. Le due manopole + +| Manopola | Cosa fa | Regole | +|---|---|---| +| `gain` | forza del colore (croma) | `1.0` = grezzo, è il valore giusto. Toccala solo se i colori sembrano sbagliati. | +| `shift px` | sposta l'immagine a destra/sinistra | **solo numeri PARI** (un numero dispari inverte i colori). Regola finché l'immagine non è centrata: il testo del titolo della console è un buon riferimento. | + +Entrambe si applicano in diretta (circa un secondo) e sono salvate in +`pscapture.ini` accanto all'exe, quindi sopravvivono ai riavvii. + +## 5. Problemi — sintomo per sintomo + +| Sintomo | Causa | Rimedio | +|---|---|---| +| La pillola resta su `AVVIO...` / `IN ATTESA DELLA PS5` | console spenta, **non jailbroken**, o IP sbagliato | accendi la console, avvia il jailbreak (le porte 9021/2121 devono essere aperte), controlla il campo IP | +| Il log ripete `PS5 non raggiungibile (...), riprovo` | come sopra | come sopra | +| La camera `PS5 Capture` non appare in Discord/OBS | driver mai registrato (install fallito) | premi **Install driver**; leggi la riga di log che segue — ora riporta l'errore *vero* | +| Log: `ERRORE: driver non scrivibile in C:\Program Files\PSCapture (serve admin?)` | app non elevata | chiudi e riavvia `PSCapture.exe` accettando il prompt UAC | +| Log: `ERRORE caricando la dll (err=126)` | l'antivirus ha messo in quarantena la dll estratta | controlla la quarantena dell'antivirus per `pscapture.dll`, sbloccala, premi di nuovo **Install driver** | +| La camera appare ma l'immagine è nera | stream non partito | controlla la pillola; premi **Deploy payload** e/o **START STREAMING** | +| I colori sembrano sbagliati (pelle rossastra, cielo arancione) | qualcuno ha toccato `gain` | rimetti `gain` a `1.0` → Apply | +| Immagine decentrata / barra nera | allineamento | regola `shift px` con numeri pari finché non è centrata | +| Discord continua a mostrare 720p | il motore di Discord limita ogni camera a 720p | usa OBS per il 1080p, o la condivisione schermo di Discord (1080p60 con Nitro) | +| OBS vede la camera, Discord no | Discord era già aperto quando hai installato il driver | chiudi Discord COMPLETAMENTE (anche dalla tray) e riaprilo | +| Tutto il resto | — | leggi `pscapture-app.log` (accanto all'exe, o in `%TEMP%`) e il log della console `/data/pscapture.log` (via FTP) | + +## 6. Disinstallazione + +1. Chiudi l'app. +2. `rundll32 "%ProgramFiles%\PSCapture\pscapture.dll",DllUnregisterServer` + (rimuove la registrazione della camera). +3. Cancella `C:\Program Files\PSCapture`. +4. Opzionale, sulla console: cancella `/data/pldmgr/payloads/pscapture/` così + l'autoloader smette di avviarlo. diff --git a/docs/GUIDE.md b/docs/GUIDE.md index c52018c..0e7fe59 100644 --- a/docs/GUIDE.md +++ b/docs/GUIDE.md @@ -1,5 +1,7 @@ # PSCapture — the fool-proof guide +🇮🇹 Versione italiana: [GUIDE.it.md](GUIDE.it.md) + From zero to your PS5 inside Discord. Every step says exactly what you should see on screen. If something doesn't match, jump to the troubleshooting table at the bottom. diff --git a/docs/index.html b/docs/index.html index 774b0c6..13d9329 100644 --- a/docs/index.html +++ b/docs/index.html @@ -77,11 +77,13 @@ .toc{display:flex;gap:8px;flex-wrap:wrap;margin-top:18px} .toc a{border:1px solid var(--line);background:var(--card);border-radius:999px; padding:4px 12px;font-size:13px} + .lang{position:absolute;top:18px;right:22px;font-size:13.5px} -
diff --git a/docs/index.it.html b/docs/index.it.html
new file mode 100644
index 0000000..b87b5b5
--- /dev/null
+++ b/docs/index.it.html
@@ -0,0 +1,358 @@
+
+
+
+
+
+
+ PSCapture registra un dispositivo DirectShow chiamato PS5 Capture. + Discord, OBS e ffmpeg lo vedono come un'Elgato — scegli la camera e vai + live.
+Il payload sulla console legge direttamente il buffer di scan-out del + display engine e manda i frame NV12 sulla tua LAN. Nessuna + ricodifica, nessun cloud.
+PSCapture.exe contiene già il payload per la console: + installa il driver, manda il payload, avvia lo stream — una finestra, + un click.
+9021 (tipo
+ elfldr), FTP anonimo sulla 2121, e opzionalmente
+ l'autoloader pldmgr così il payload parte a ogni boot.
+ PC e console sulla stessa LAN. Scarica PSCapture.exe dalla pagina
+ Releases — è un unico file: il payload per la console e il driver
+ per Windows sono dentro di lui.
+ pldmgr.PSCapture.exe192.168.0.36, scrivi il suo
+ indirizzo nel campo PS5 IP e premi Apply.-f dshow -i video="PS5 Capture".| Riga | Significato |
|---|---|
driver gia' installato |
+ camera già registrata — niente da fare |
driver estratto dall'eseguibile (… byte)+ driver registrato - la webcam 'PS5 Capture' e' pronta |
+ primo avvio: il driver è stato estratto dall'exe e registrato |
payload dall'eseguibile (… byte) |
+ il payload sta viaggiando verso la PS5 |
payload avviato - la PS5 deve mostrare la notifica PSCapture |
+ il payload sta girando sulla console |
porta stream: 9xxx → collegato a …:9xxx |
+ stream connesso — la pillola diventa verde: STREAMING |
9021 e
+ 2121 devono essere aperte.
+ pscapture.ini accanto all'exe.| Sintomo | Causa → rimedio |
|---|---|
La pillola resta su AVVIO… / IN ATTESA DELLA PS5 |
+ Console spenta o non jailbroken, o IP sbagliato → accendila, avvia + il jailbreak, controlla il campo IP |
Il log ripete PS5 non raggiungibile |
+ Come sopra — l'app riprova da sola |
| La camera PS5 Capture non appare in Discord/OBS | +Driver mai registrato → premi Install driver; il log ora + riporta l'errore vero |
ERRORE: driver non scrivibile in C:\Program Files\PSCapture (serve admin?) |
+ App non elevata → riavvia PSCapture.exe e accetta il prompt UAC |
ERRORE caricando la dll (err=126) |
+ L'antivirus ha messo in quarantena la dll estratta → sblocca
+ pscapture.dll nell'antivirus, poi premi di nuovo
+ Install driver |
| La camera appare ma l'immagine è nera | +Stream non partito → controlla la pillola, premi Deploy + payload e/o START STREAMING |
| I colori sembrano sbagliati | +Hai toccato gain → rimettilo a 1.0 e Apply |
| Immagine decentrata / barra nera | +Allineamento → regola shift px con numeri pari |
| Discord mostra 720p | +Il motore di Discord limita ogni camera a 720p → usa OBS per il + 1080p |
| OBS vede la camera, Discord no | +Discord era aperto prima dell'installazione del driver → chiudilo + COMPLETAMENTE (anche dalla tray) e riaprilo |
| Tutto il resto | +Leggi pscapture-app.log (accanto all'exe o in
+ %TEMP%) e il log della console
+ /data/pscapture.log via FTP |
Solo sorgenti — nella repo non ci sono binari. + Due metà, due toolchain. Il walk-through completo (installazione toolchain, + verifiche, trappole) è in docs/BUILD.it.md.
+ +pscapture.elf# servono Docker + l'immagine del PS5 payload SDK (prospero-clang; qui tag ps5sdk:18)
+docker run --rm -v "<repo>/payload:/payload" -w /payload ps5sdk:18 make
+
+ pscapture.exe + pscapture.dllServe MinGW-w64 (gcc +
+ windres). L'ordine è obbligatorio: il
+ .res incastra driver e payload così come sono su disco.
# dalla radice della repo +cp payload/pscapture.elf pc/ # viene incastrato così com'è +cd pc + +# 1) il driver della capture card (filtro sorgente DirectShow) +gcc -O2 -shared -static -static-libgcc -o pscapture.dll ps5cam.c \ + -lole32 -loleaut32 -luser32 -ladvapi32 -lws2_32 + +# 2) bundle: icona + payload + driver nell'oggetto risorse +windres pscapture.rc -O coff -o pscapture.res + +# 3) l'app a file unico +gcc -O2 -mwindows -o pscapture.exe pscapture.c pscapture.res \ + -lws2_32 -lshell32 -ladvapi32 -luxtheme+ +
windres incastra i file come sono su disco: se la DLL o il
+ payload vengono ricompilati dopo il passo 2, l'exe continua a portarsi
+ dentro quelli vecchi. Rebuild = DLL → windres → exe, ogni volta.
+ -static -static-libgcc sulla DLL è obbligatorio:
+ senza, Windows può rifiutarsi di caricare il driver con il cryptico
+ “impossibile trovare il modulo specificato” (runtime mingw mancante).
| Dove | Cosa |
|---|---|
| PS5 | Jailbroken (payload loader + FTP + autoloader pldmgr) |
| PS5 | Firmware testato: 13.60 — vedi la FAQ per le altre versioni |
| PC | Windows 10/11 64-bit, rete cablata consigliata |
| Rete | Entrambi sulla stessa LAN (il gigabit basta per 1080p30) |
Il lato PC funziona su qualsiasi firmware: app e driver parlano solo + TCP/FTP e memoria condivisa. La parte version-specifica è il payload + della console — è stato compilato e tarato sul 13.60, usando gli + ancoraggi del display engine trovati su quel firmware. Su altri + firmware può servire un piccolo lavoro di porting (cioè ritrovare gli + stessi ancoraggi su quel sistema). Se hai un'altra versione, apri una + issue con il tuo firmware e possiamo aggiungere un profilo.
+Quel limite è del motore vocale di Discord, non di PSCapture: chiede + 1280x720 a ogni camera. Per la qualità piena usa OBS (dove PS5 Capture + va a 1920x1080) o la condivisione schermo di Discord, che arriva a + 1080p60 con Nitro.
+No. PSCapture non tocca mai il Remote Play: il payload legge il display + engine sulla console stessa e manda i frame grezzi sulla tua LAN.
+Chiudi l'app, poi rundll32 "%ProgramFiles%\PSCapture\pscapture.dll",DllUnregisterServer,
+ cancella C:\Program Files\PSCapture, e opzionalmente
+ cancella /data/pldmgr/payloads/pscapture/ sulla console
+ così l'autoloader smette di avviare il payload.