mirror of
https://github.com/fstat13/PSCapture.git
synced 2026-10-17 12:00:39 +02:00
docs: italian editions + front-page links
- docs/GUIDE.it.md and docs/BUILD.it.md: full italian translations - docs/index.it.html: italian HTML guide with language switcher - README: guide/build links right under the badges (EN + IT) - GUIDE.md / BUILD.md: link to their italian editions
This commit is contained in:
1 parent
0daa328a3c
commit
a3692b1e25
7 files changed
+653
-1
No files matched your search
@@ -15,6 +15,16 @@ No capture card. No Remote Play. No cloud. Just your console and your network.<b
|
||||
<b>by fstat13</b>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
📖 <b><a href="docs/GUIDE.md">How to use it — step-by-step guide</a></b>
|
||||
·
|
||||
🇮🇹 <b><a href="docs/GUIDE.it.md">Guida passo-passo in italiano</a></b>
|
||||
·
|
||||
🔧 <b><a href="docs/BUILD.md">Build from source</a></b>
|
||||
·
|
||||
🇮🇹 <b><a href="docs/BUILD.it.md">Build dai sorgenti</a></b>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
## ✨ What you get
|
||||
|
||||
@@ -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
|
||||
```
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
|
||||
+3
-1
@@ -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}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header>
|
||||
<header style="position:relative">
|
||||
<div class="lang">🇮🇹 <a href="index.it.html">Italiano</a></div>
|
||||
<div class="wrap">
|
||||
<div class="brand">
|
||||
<img src="pscapture.png" alt="PSCapture">
|
||||
|
||||
@@ -0,0 +1,358 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="it">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>PSCapture di fstat13 — la PS5 come scheda di acquisizione sul PC</title>
|
||||
<style>
|
||||
:root{
|
||||
--bg:#0d1015; --card:#151a22; --card2:#1b222d; --line:#242c38;
|
||||
--fg:#e8edf4; --dim:#96a0b0; --accent:#0070d1; --accent2:#35a3ff;
|
||||
--rec:#e22236; --ok:#1fbf6b;
|
||||
}
|
||||
*{box-sizing:border-box}
|
||||
body{margin:0;background:var(--bg);color:var(--fg);
|
||||
font:16px/1.65 "Segoe UI",system-ui,-apple-system,Roboto,sans-serif;}
|
||||
a{color:var(--accent2);text-decoration:none}
|
||||
a:hover{text-decoration:underline}
|
||||
.wrap{max-width:880px;margin:0 auto;padding:0 20px}
|
||||
header{background:
|
||||
radial-gradient(900px 320px at 20% -40%, rgba(0,112,209,.35), transparent 60%),
|
||||
radial-gradient(700px 300px at 90% -30%, rgba(226,34,54,.22), transparent 60%),
|
||||
var(--bg);
|
||||
border-bottom:1px solid var(--line);padding:56px 0 40px}
|
||||
.brand{display:flex;align-items:center;gap:18px}
|
||||
.brand img{width:84px;height:84px;border-radius:20px;box-shadow:0 8px 30px rgba(0,0,0,.5)}
|
||||
h1{font-size:44px;margin:0;letter-spacing:.5px}
|
||||
.tag{color:var(--dim);font-size:18px;margin-top:6px}
|
||||
.badges{margin-top:22px;display:flex;gap:10px;flex-wrap:wrap}
|
||||
.badge{border:1px solid var(--line);background:var(--card);
|
||||
padding:5px 12px;border-radius:999px;font-size:13px;color:var(--dim)}
|
||||
.badge b{color:var(--fg)}
|
||||
h2{margin:52px 0 14px;font-size:26px}
|
||||
h3{margin:26px 0 10px;font-size:19px}
|
||||
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px}
|
||||
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px 20px}
|
||||
.card h3{margin:0 0 8px;font-size:17px}
|
||||
.card p{margin:0;color:var(--dim);font-size:14.5px}
|
||||
.flow{display:flex;gap:10px;align-items:stretch;flex-wrap:wrap;margin-top:16px}
|
||||
.box{flex:1;min-width:180px;background:var(--card2);border:1px solid var(--line);
|
||||
border-radius:12px;padding:14px 16px}
|
||||
.box b{display:block;margin-bottom:6px}
|
||||
.box div{color:var(--dim);font-size:13.5px}
|
||||
.arrow{align-self:center;color:var(--accent2);font-size:22px;padding:0 2px}
|
||||
ol.steps{counter-reset:s;list-style:none;padding:0;margin:18px 0 0}
|
||||
ol.steps li{counter-increment:s;position:relative;padding:0 0 18px 54px}
|
||||
ol.steps li::before{content:counter(s);position:absolute;left:0;top:0;
|
||||
width:34px;height:34px;border-radius:10px;background:var(--accent);
|
||||
color:#fff;font-weight:600;display:flex;align-items:center;justify-content:center}
|
||||
ol.steps b{color:var(--fg)}
|
||||
ol.steps span{color:var(--dim)}
|
||||
ul.plain{color:var(--dim);padding-left:22px}
|
||||
ul.plain b{color:var(--fg)}
|
||||
table{width:100%;border-collapse:collapse;margin-top:14px;font-size:14.5px}
|
||||
th,td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);
|
||||
vertical-align:top}
|
||||
th{color:var(--dim);font-weight:500}
|
||||
td code,th code{white-space:nowrap}
|
||||
code,kbd{background:#0a0d12;border:1px solid var(--line);border-radius:6px;
|
||||
padding:1px 7px;font:13.5px/1.5 Consolas,monospace;color:#cfe3ff}
|
||||
pre{background:#0a0d12;border:1px solid var(--line);border-radius:12px;
|
||||
padding:14px 16px;overflow-x:auto;font:13.5px/1.6 Consolas,monospace;
|
||||
color:#cfe3ff}
|
||||
pre .c{color:#5f7186}
|
||||
details{background:var(--card);border:1px solid var(--line);border-radius:12px;
|
||||
padding:14px 18px;margin:10px 0}
|
||||
summary{cursor:pointer;font-weight:600}
|
||||
details p{color:var(--dim);margin:10px 0 0}
|
||||
.note{background:linear-gradient(0deg,rgba(0,112,209,.08),rgba(0,112,209,.08)),
|
||||
var(--card);border:1px solid #23405f;border-radius:12px;padding:14px 18px;color:#cfe3ff}
|
||||
.warn{background:linear-gradient(0deg,rgba(226,34,54,.07),rgba(226,34,54,.07)),
|
||||
var(--card);border:1px solid #5f2330;border-radius:12px;padding:14px 18px;color:#f3cdd3}
|
||||
footer{color:var(--dim);border-top:1px solid var(--line);margin-top:70px;
|
||||
padding:26px 0 40px;font-size:13.5px}
|
||||
.dot{display:inline-block;width:9px;height:9px;border-radius:50%;
|
||||
background:var(--rec);margin-right:8px;vertical-align:1px}
|
||||
.ok{color:var(--ok);font-weight:600}
|
||||
.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}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header style="position:relative">
|
||||
<div class="lang">🇬🇧 <a href="index.html">English</a></div>
|
||||
<div class="wrap">
|
||||
<div class="brand">
|
||||
<img src="pscapture.png" alt="PSCapture">
|
||||
<div>
|
||||
<h1>PSCapture</h1>
|
||||
<div class="tag">Lo schermo della PlayStation 5, live sul tuo PC — come una vera scheda di acquisizione.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="badges">
|
||||
<span class="badge"><b>PS5</b> jailbroken</span>
|
||||
<span class="badge"><b>Windows</b> 10 / 11</span>
|
||||
<span class="badge"><span class="dot"></span><b>Niente</b> capture card</span>
|
||||
<span class="badge"><b>Niente</b> Remote Play</span>
|
||||
<span class="badge">1080p · ~30 fps</span>
|
||||
</div>
|
||||
<div class="toc">
|
||||
<a href="#start">Avvio rapido</a>
|
||||
<a href="#daily">Uso quotidiano</a>
|
||||
<a href="#trouble">Problemi</a>
|
||||
<a href="#build">Build dai sorgenti</a>
|
||||
<a href="#faq">FAQ</a>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="wrap">
|
||||
|
||||
<h2>Cos'è</h2>
|
||||
<div class="cards">
|
||||
<div class="card">
|
||||
<h3>🎥 Scheda di acquisizione virtuale</h3>
|
||||
<p>PSCapture registra un dispositivo DirectShow chiamato <b>PS5 Capture</b>.
|
||||
Discord, OBS e ffmpeg lo vedono come un'Elgato — scegli la camera e vai
|
||||
live.</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>⚡ Direttamente dalla GPU</h3>
|
||||
<p>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.</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>🖱️ Un solo eseguibile</h3>
|
||||
<p><b>PSCapture.exe</b> contiene già il payload per la console:
|
||||
installa il driver, manda il payload, avvia lo stream — una finestra,
|
||||
un click.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>Come funziona</h2>
|
||||
<div class="flow">
|
||||
<div class="box"><b>PS5 · payload</b>
|
||||
<div>legge il ring di scan-out del display engine, costruisce i frame
|
||||
NV12, li serve su una porta TCP e mostra il toast:
|
||||
<i>“PSCapture is streaming on:PORT”</i>.</div></div>
|
||||
<div class="arrow">→</div>
|
||||
<div class="box"><b>PC · feeder</b>
|
||||
<div>riceve i frame e li pubblica in un ring di memoria condivisa.</div></div>
|
||||
<div class="arrow">→</div>
|
||||
<div class="box"><b>PC · driver</b>
|
||||
<div>il filtro DirectShow espone il ring come una camera per tutti i
|
||||
programmi.</div></div>
|
||||
</div>
|
||||
|
||||
<h2 id="start">Avvio rapido — passo per passo</h2>
|
||||
|
||||
<div class="note" style="margin-bottom:20px">
|
||||
<b>Cosa serve prima.</b> Una PS5 jailbroken con il setup standard:
|
||||
un payload loader sulla porta TCP <code>9021</code> (tipo
|
||||
<code>elfldr</code>), FTP anonimo sulla <code>2121</code>, e opzionalmente
|
||||
l'autoloader <code>pldmgr</code> così il payload parte a ogni boot.
|
||||
PC e console sulla stessa LAN. Scarica <b>PSCapture.exe</b> dalla pagina
|
||||
Releases — <b>è un unico file</b>: il payload per la console e il driver
|
||||
per Windows sono dentro di lui.
|
||||
</div>
|
||||
|
||||
<ol class="steps">
|
||||
<li><b>Fai il jailbreak della console</b><br>
|
||||
<span>Qualsiasi jailbreak kernel-capable che ti dia il payload loader
|
||||
(:9021), l'FTP anonimo (:2121) e — opzionale — l'autoloader
|
||||
<code>pldmgr</code>.</span></li>
|
||||
<li><b>Doppio click su <code>PSCapture.exe</code></b><br>
|
||||
<span>Windows chiede <i>“Consenti a questa app di apportare modifiche?”</i>
|
||||
→ <b>Sì</b>. L'app si eleva da sola; i privilegi servono una volta, per
|
||||
registrare la webcam virtuale per tutti i programmi.</span></li>
|
||||
<li><b>Controlla l'IP</b><br>
|
||||
<span>Se la tua PS5 non è a <code>192.168.0.36</code>, scrivi il suo
|
||||
indirizzo nel campo <b>PS5 IP</b> e premi <b>Apply</b>.</span></li>
|
||||
<li><b>Guarda e non premere niente</b><br>
|
||||
<span>L'app fa tutto da sola, e te lo racconta nel pannello log scuro
|
||||
(tabella qui sotto). Sulla console vedrai anche la notifica di sistema
|
||||
<i>“PSCapture is streaming on:PORT”</i>.</span></li>
|
||||
<li><b>Usalo in qualsiasi programma</b><br>
|
||||
<span>Discord (in chiamata): <i>Impostazioni → Voce e video →
|
||||
Telecamera</i> → <b>PS5 Capture</b> (720p — Discord chiede 720p a tutte
|
||||
le camere, capture card incluse). OBS: aggiungi un <i>Video Capture
|
||||
Device</i> → <b>1920x1080</b> pieno. ffmpeg:
|
||||
<code>-f dshow -i video="PS5 Capture"</code>.</span></li>
|
||||
</ol>
|
||||
|
||||
<h3>Cosa devi vedere nel log dell'app</h3>
|
||||
<table>
|
||||
<tr><th>Riga</th><th>Significato</th></tr>
|
||||
<tr><td><code>driver gia' installato</code></td>
|
||||
<td>camera già registrata — niente da fare</td></tr>
|
||||
<tr><td><code>driver estratto dall'eseguibile (… byte)</code><br>
|
||||
<code>driver registrato - la webcam 'PS5 Capture' e' pronta</code></td>
|
||||
<td>primo avvio: il driver è stato estratto dall'exe e registrato</td></tr>
|
||||
<tr><td><code>payload dall'eseguibile (… byte)</code></td>
|
||||
<td>il payload sta viaggiando verso la PS5</td></tr>
|
||||
<tr><td><code>payload avviato - la PS5 deve mostrare la notifica PSCapture</code></td>
|
||||
<td>il payload sta girando sulla console</td></tr>
|
||||
<tr><td><code>porta stream: 9xxx</code> → <code>collegato a …:9xxx</code></td>
|
||||
<td>stream connesso — la pillola diventa <span class="ok">verde: STREAMING</span></td></tr>
|
||||
</table>
|
||||
|
||||
<div class="warn" style="margin-top:18px">
|
||||
<b>Pillola ferma su “IN ATTESA DELLA PS5 — accesa e col jailbreak avviato?”</b><br>
|
||||
La console è spenta, non ancora jailbroken, o l'IP è sbagliato. L'app
|
||||
riprova ogni 2 secondi: nel momento in cui la console è pronta si connette
|
||||
da sola. Porte da controllare sulla console: <code>9021</code> e
|
||||
<code>2121</code> devono essere aperte.
|
||||
</div>
|
||||
|
||||
<h2 id="daily">Uso quotidiano e regolazioni</h2>
|
||||
<ul class="plain">
|
||||
<li>Apri <b>PSCapture.exe</b> (UAC → Sì). Se il payload è già sulla console
|
||||
(autoloader) lo stream parte da solo; altrimenti premi
|
||||
<b>Deploy payload</b> una volta.</li>
|
||||
<li><b>Stop</b> / chiudere l'app ferma lo stream — la camera si congela
|
||||
sull'ultimo frame e gli altri programmi continuano a vedere il
|
||||
dispositivo.</li>
|
||||
<li><b>gain</b> — forza del colore. <b>Lascia 1.0</b> (grezzo) a meno che i
|
||||
colori non sembrino sbagliati.</li>
|
||||
<li><b>shift px</b> — allineamento orizzontale. <b>Solo numeri PARI</b>
|
||||
(un valore dispari inverte i colori). Si applica in diretta ed è
|
||||
salvato in <code>pscapture.ini</code> accanto all'exe.</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="trouble">Problemi — sintomo → rimedio</h2>
|
||||
<table>
|
||||
<tr><th>Sintomo</th><th>Causa → rimedio</th></tr>
|
||||
<tr><td>La pillola resta su <code>AVVIO…</code> / <code>IN ATTESA DELLA PS5</code></td>
|
||||
<td>Console spenta o non jailbroken, o IP sbagliato → accendila, avvia
|
||||
il jailbreak, controlla il campo IP</td></tr>
|
||||
<tr><td>Il log ripete <code>PS5 non raggiungibile</code></td>
|
||||
<td>Come sopra — l'app riprova da sola</td></tr>
|
||||
<tr><td>La camera <b>PS5 Capture</b> non appare in Discord/OBS</td>
|
||||
<td>Driver mai registrato → premi <b>Install driver</b>; il log ora
|
||||
riporta l'errore vero</td></tr>
|
||||
<tr><td><code>ERRORE: driver non scrivibile in C:\Program Files\PSCapture (serve admin?)</code></td>
|
||||
<td>App non elevata → riavvia PSCapture.exe e accetta il prompt UAC</td></tr>
|
||||
<tr><td><code>ERRORE caricando la dll (err=126)</code></td>
|
||||
<td>L'antivirus ha messo in quarantena la dll estratta → sblocca
|
||||
<code>pscapture.dll</code> nell'antivirus, poi premi di nuovo
|
||||
<b>Install driver</b></td></tr>
|
||||
<tr><td>La camera appare ma l'immagine è nera</td>
|
||||
<td>Stream non partito → controlla la pillola, premi <b>Deploy
|
||||
payload</b> e/o <b>START STREAMING</b></td></tr>
|
||||
<tr><td>I colori sembrano sbagliati</td>
|
||||
<td>Hai toccato <code>gain</code> → rimettilo a 1.0 e Apply</td></tr>
|
||||
<tr><td>Immagine decentrata / barra nera</td>
|
||||
<td>Allineamento → regola <code>shift px</code> con numeri pari</td></tr>
|
||||
<tr><td>Discord mostra 720p</td>
|
||||
<td>Il motore di Discord limita ogni camera a 720p → usa OBS per il
|
||||
1080p</td></tr>
|
||||
<tr><td>OBS vede la camera, Discord no</td>
|
||||
<td>Discord era aperto prima dell'installazione del driver → chiudilo
|
||||
COMPLETAMENTE (anche dalla tray) e riaprilo</td></tr>
|
||||
<tr><td>Tutto il resto</td>
|
||||
<td>Leggi <code>pscapture-app.log</code> (accanto all'exe o in
|
||||
<code>%TEMP%</code>) e il log della console
|
||||
<code>/data/pscapture.log</code> via FTP</td></tr>
|
||||
</table>
|
||||
|
||||
<h2 id="build">Build dai sorgenti</h2>
|
||||
|
||||
<p style="color:var(--dim)">Solo sorgenti — nella repo non ci sono binari.
|
||||
Due metà, due toolchain. Il walk-through completo (installazione toolchain,
|
||||
verifiche, trappole) è in <a href="BUILD.it.md">docs/BUILD.it.md</a>.</p>
|
||||
|
||||
<h3>1 · Payload console → <code>pscapture.elf</code></h3>
|
||||
<pre><span class="c"># servono Docker + l'immagine del PS5 payload SDK (prospero-clang; qui tag ps5sdk:18)</span>
|
||||
docker run --rm -v "<repo>/payload:/payload" -w /payload ps5sdk:18 make</pre>
|
||||
|
||||
<h3>2 · Lato PC → <code>pscapture.exe</code> + <code>pscapture.dll</code></h3>
|
||||
<p style="color:var(--dim)">Serve MinGW-w64 (<code>gcc</code> +
|
||||
<code>windres</code>). <b>L'ordine è obbligatorio</b>: il
|
||||
<code>.res</code> incastra driver e payload così come sono su disco.</p>
|
||||
<pre><span class="c"># dalla radice della repo</span>
|
||||
cp payload/pscapture.elf pc/ <span class="c"># viene incastrato così com'è</span>
|
||||
cd pc
|
||||
|
||||
<span class="c"># 1) il driver della capture card (filtro sorgente DirectShow)</span>
|
||||
gcc -O2 -shared -static -static-libgcc -o pscapture.dll ps5cam.c \
|
||||
-lole32 -loleaut32 -luser32 -ladvapi32 -lws2_32
|
||||
|
||||
<span class="c"># 2) bundle: icona + payload + driver nell'oggetto risorse</span>
|
||||
windres pscapture.rc -O coff -o pscapture.res
|
||||
|
||||
<span class="c"># 3) l'app a file unico</span>
|
||||
gcc -O2 -mwindows -o pscapture.exe pscapture.c pscapture.res \
|
||||
-lws2_32 -lshell32 -ladvapi32 -luxtheme</pre>
|
||||
|
||||
<details>
|
||||
<summary>Perché quest'ordine? (e i due errori classici di build)</summary>
|
||||
<p><b>windres incastra i file come sono su disco:</b> 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.<br>
|
||||
<b><code>-static -static-libgcc</code> sulla DLL è obbligatorio:</b>
|
||||
senza, Windows può rifiutarsi di caricare il driver con il cryptico
|
||||
“impossibile trovare il modulo specificato” (runtime mingw mancante).</p>
|
||||
</details>
|
||||
|
||||
<h2>Requisiti</h2>
|
||||
<table>
|
||||
<tr><th>Dove</th><th>Cosa</th></tr>
|
||||
<tr><td>PS5</td><td>Jailbroken (payload loader + FTP + autoloader pldmgr)</td></tr>
|
||||
<tr><td>PS5</td><td>Firmware testato: <b>13.60</b> — vedi la FAQ per le altre versioni</td></tr>
|
||||
<tr><td>PC</td><td>Windows 10/11 64-bit, rete cablata consigliata</td></tr>
|
||||
<tr><td>Rete</td><td>Entrambi sulla stessa LAN (il gigabit basta per 1080p30)</td></tr>
|
||||
</table>
|
||||
|
||||
<h2 id="faq">FAQ</h2>
|
||||
|
||||
<details>
|
||||
<summary>Funziona su firmware precedenti al 13.60?</summary>
|
||||
<p>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 <b>13.60</b>, 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.</p>
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Perché la camera in chiamata è 720p e non 1080p?</summary>
|
||||
<p>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.</p>
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Servono una capture card o il Remote Play?</summary>
|
||||
<p>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.</p>
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Come si disinstalla?</summary>
|
||||
<p>Chiudi l'app, poi <code>rundll32 "%ProgramFiles%\PSCapture\pscapture.dll",DllUnregisterServer</code>,
|
||||
cancella <code>C:\Program Files\PSCapture</code>, e opzionalmente
|
||||
cancella <code>/data/pldmgr/payloads/pscapture/</code> sulla console
|
||||
così l'autoloader smette di avviare il payload.</p>
|
||||
</details>
|
||||
|
||||
<footer>
|
||||
PSCapture — porta lo schermo della PS5 ovunque nella tua LAN, senza card e senza cloud.
|
||||
<br><b>di fstat13</b> · source-available. Fatto per la community homebrew. <span class="ok">Gioca responsabilmente.</span>
|
||||
<br><br>
|
||||
Documenti: <a href="GUIDE.it.md">guida a prova di scemo (md)</a> ·
|
||||
<a href="BUILD.it.md">build dai sorgenti (md)</a> ·
|
||||
<a href="INSTALLER.md">cosa fa l'installer dentro</a> ·
|
||||
<a href="REVERSE_ENGINEERING.md">reverse engineering</a> ·
|
||||
<a href="ENGINEERING_LOG.md">engineering log</a>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in new issue
Block a user