Giocare in streaming da un Raspberry PI

Incuriosito dalla funzionalità di streaming integrata in SteamOS, dove è possibile remotizzare lo schermo del PC che sta eseguendo un gioco verso un altro apparato in rete locale, ho cominciato ad approfondire ed ho trovato un interessante progetto open-source chiamato MoonLight-Embedded. Il software fa esattamente quel che promette: implementa la tecnologia NVIDIA Shield e rende possibile appunto lo streaming video di un gioco, l'audio e controlli USB verso un apparato client connesso in rete. In parole povere: facendo il pair tra raspberry e computer, è possibile vedere il gioco trasmesso dal pc e vederlo/sentirlo sull'hdmi del raspberry, collegando poi i joypad al raspberry è possibile controllare il gioco.

La soluzione è ampiamente documentata ed è stato facile implementare il progetto in un classico Raspberry PI B+ con Linux Raspbian installato, ecco i principali passi:

1. Aggiungere il repository di MoonLight in /etc/apt/sources.list:

deb http://archive.itimmer.nl/raspbian/moonlight jessie main

2. Resync di apt e installazione del software:

apt-get update
apt-get install moonlight-embedded

3. A questo punto si dovrebbe già essere abili a fare il primo pair con il computer host:

pi@raspberrypi:~ $ moonlight pair
Moonlight Embedded 2.2.2 (EMBEDDED;PI)
Searching for server...
Connect to 192.168.1.147...
NVIDIA GeForce GTX 760, GFE 3.1.2.31 (protocol version 7)
Please enter the following PIN on the target PC: 7079

Di conseguenza NVIDIA Shield sul computer HOST mostra la richiesta di pair ricevuta:

Ora che i due devices sono "accoppiati" sarebbe già possibile iniziare uno stream con il comando:

moonlight stream -app "nome applicazione"

E' possibile aggiungere e rimuovere gli applicativi lanciabili via streaming usando il pannello di gestione NVIDIA GEFORCE Expierience, sotto la voce SHIELD.

Lato Client è possibile interrogare l'host, ottenendo una lista di applicazioni disponibili:

moonlight list
Moonlight Embedded 2.2.2 (EMBEDDED;PI)
Searching for server...
Connect to 192.168.1.147...
NVIDIA GeForce GTX 760, GFE 2.11.4.1 (protocol version 7)
1. Steam
2. MK10
3. GRID Autosport
4. FIFA 15
5. Mortal Kombat X
6. Grand Theft Auto V

Per interrompere uno streaming è necessario dare un:

moonlight quit

Come suggerito nella wiki di MoonLight, se si usano controller USB per XBOX saranno necessari alcuni passi:

Blacklistare il modulo xpad in /etc/modprobe.d/gamepad.conf appendendo/inserendo:

blacklist xpad

Rimuovere il relativo modulo del kernel:

modprobe -r xpad

Installare xboxdrv, ovvero i drivers necessari:

apt-get install xboxdrv

A questo punto si hanno a disposizione i drivers corretti e, dopo aver inserito il controller nella porta USB, sarà possibile inizializzarlo mediante il comando:

xboxdrv --id 0 --trigger-as-button --wid 0 --led 2 --deadzone 4000 --dpad-rotation 90 --axismap -DPAD_X=DPAD_X --buttonmap Y=X --buttonmap X=Y --silent

dove l'argomento --id=0 indica il primo controller e --led=2 accende il primo led sul controller.

Gli altri paramentri correggono l'errato orientamento di default dei controlli analogici.

Per aver chiari gli indici precedentemente citati è possibile trovarli mediante il comando:

xboxdrv -L

In caso di malfunzionamento provocato da un upgrade del software NVIDIA, è possibile aggiornare moonlight (qual'ora sia stato anch'esso aggiornato):

sudo apt-get --only-upgrade install moonlight-embedded

Questo connubio di applicativi e configurazioni rende possibile giocare a un titolo avido di risorse da un dispositivo grande poco più di un pacchetto di sigarette, magari comodamente dal salotto. Ero dubbioso sulla stabilità di questa soluzione ma devo dire che non ho mai notato nessuna latenza o rallentamento dello streaming e la reattività dei controlli remoti è assolutamente performante.

Questo ha stimolato la mia creatività portandomi a realizzare una web-app che racchiude tutti gli strumenti utili per sfruttare facilmente l'oggetto di questo articolo: RaspiStream.

DaxTech 2024