Moonlight game streaming på Raspberry Pi & i RetroPie

Spill hvilke som helst spill i opptil 1080p oppløsning og 60 FPS på din Raspberry Pi ved hjelp av den fantastiske «game streaming»-klienten Moonlight Embedded. Gjør Moonlight spillstrømming til en integrert del av RetroPie.

Det hele begynte med en gjeng skarpe studenter fra Case Western Reserve University i Cleveland, Ohio, som ønsket at strømming av egne spill over nettet skulle være fritt og åpent tilgjengelig hvor som helst for alle, og ikke bundet til dyre og proprietære systemer, programvare og tjenester. I løpet av sin deltakelse på MHacks hackaton i 2013, klarte de til PC og Android å reverse-engineer’e NVIDIAs GameStream protokoll, som brukes til å strømme spill på deres populære Shield enheter. De kalte prosjektet Limelight og fortsatte å utvide med støtte for iOS, Windows Phone og Chrome browser på tilsvarende hackatons i 2014 og 2016.

I dag heter prosjektet Moonlight, er open source på GitHub, blitt stort og velkjent, og bringer deg inntil 4K oppløsning og 120 FPS imponerende og silke-smooth spillstrømming til Windows, MacOS og Linux PC’er, iOS og Android nettbrett og telefoner, Apple TV, Steam Link, Amazon Fire OS, PlayStation Vita, skole-Chromebook’en(Chrome OS), samt til Raspberry Pi og andre enkeltkortdatamaskiner.

Moonlight har god støtte for ulike spillkontrollere, mus og tastatur og fungerer fint med iallefall 4 stykker som spiller sammen. Så lenge det virker i RetroPie, så vil det som regel virke med Moonlight game streaming også. På Windows game stream serveren vil de fleste spillkontrollere tilkoblet RetroPie registreres som standard XBox 360/XInput kontrollere på strømmeserveren og fungere veldig bra i de fleste spill. Spillkontrollere med færre knapper fungerer i alle spill der de manglende knappene ikke er essensielle.

Noen av app’ene til telefon og pad har skjermbaserte virtuelle game controller’e, og Moonlight støtter nå touchscreen controls fra remote strømmeenhet til desktop og i applikasjoner på game streaming serveren. Til og med Apple TV remote støttes på Moonlight for Apple TV!

Hvis du har et raskt nettverk med lav latency og relativt høy båndbredde, og med mindre du er en veldig aktivt og konkurranseorientert spiller, så er forsinkelsen knapt merkbar og fullt på høyde med, om ikke bedre (spesielt på hjemmenettverket) enn, andre profesjonelle spillstrømmetjenester som Google Stadia, GeForce Now, PlayStation Now etc.

Grafikkvaliteten er også blant de beste, og den er adaptiv for å bevare spillbarheten og responsiviteten ift. variasjoner i netthastighet. For øvrig tåler forbindelsen mye motstand mens man strømmer spill før den brytes, og man kan raskt og enkelt koble seg opp igjen og fortsette å spille om det blir avbrudd.

Med Moonlight på din Raspberry Pi, kan du på billig maskinvare og uten tid- og plasskrevende installasjoner spille alle spill fra din(e) Windows PC(‘er) på andre skjermflater rundt omkring i huset. Du kan også bruke den til å strømme film, eller som en remote desktop terminal, som ikke hakker og opplever forsinkelser for multimedia og grafikkintensive applikasjoner.

Guide til Moonlight

Forutsetninger for game stream serveren

  • Windows-PC med:
    • NVIDIA GeForce GTX 650 eller høyere NVIDIA GPU
    • Intel Core i3-2100 3.1GHz eller AMD Athlon II X4 630 2.8GHz eller bedre CPU
    • 4GB eller mer RAM
    • Windows 7 eller nyere
    • God nettverksforbindelse, helst kablet Ethernet direkte til hjemmenettverket
    • Nyeste GeForce grafikkdrivere installert
    • Nyeste versjon av GeForce Experience (GFE) installert (med Driver)
  • GameStream innlogget, aktivert og konfigurert under «Innstillinger» og «SHIELD» i GeForce Experience:

Installasjon av Moonlight Embedded

Primus motor for å få Moonlight spillstrømming til enkeltkortdatamaskiner heter Iwan Timmer, og han har lagt ut Moonlight Embedded åpent og gratis på GitHub. For å spare på ressurser, er Moonlight Embedded bl.a. strippet for alle grafiske brukergrensesnitt, og er en fullstendig tekstlinjebasert applikasjon. Men nettopp derfor fungerer den så bra på Raspberry Pi, helt tilbake til i alle fall modell 2, og den kan med noen enkle grep integreres i f.eks. RetroPie for uanstrengt bruk derfra.

  1. Sørg for at din Raspberry Pi har allokert minimum 128MB RAM til grafikk for modellene 3 B+ og tidligere, og 256MB RAM for modell 4:
    sudo raspi-config
    – Velg menyvalgene «7 Advanced Options» og deretter «A3 Memory Split».
    – Skriv inn ønsket mengde grafikkminne – 128 eller 256 – og bekreft med Enter-tasten.
    – Velg «<Finish>» nederst til høyre i hovedmenyen, trykk Enter-tasten og bekreft med «Ja» for å starte din Raspberry Pi på nytt, eller kjør sudo reboot fra kommandolinjen.

  2. Legg til denne linjen på slutten av filen /etc/apt/sources.list:
    deb http://archive.itimmer.nl/raspbian/moonlight buster main
    ,der buster evt. byttes ut med wheezy, jessie eller stretch, avhengig av hvilken versjon av Raspbian som er installert på din Raspberry Pi. Versjonen kan sjekkes med kommandoen
    lsb-release -a.

  3. Stå i en mappe du har skriverettigheter i (f.eks. /home/pi/Downloads), og hent og installer GPG-nøkkelen:
    wget http://archive.itimmer.nl/itimmer.gpg&&sudo apt-key add itimmer.gpg
  4. Installer Moonlight Embedded med:
    sudo apt update&&sudo apt install moonlight-embedded
    Moonlight Embedded vil nå holdes automatisk oppdatert sammen med alt annet når du kjører:
    sudo apt update&&sudo apt upgrade.
    Husk å endre buster fra pkt. 1 til å samsvare med ny Raspbian versjon etter en:
    sudo apt update&&sudo apt dist-upgrade.

  5. Sørg for at din Windows game streaming server er klargjort iht. avsnittet over og at den kjører. Initiér deretter en parringsforespørsel med game streaming serveren fra Moonlight Embedded og få en 4-sifret parringsnøkkel vha.:
    moonlight pair 192.168.0.10
    ,der 192.168.0.10 byttes ut med den virkelige ip-adressen til din game streaming server.

  6. Tast inn parringsnøkkelen i vinduet som popper opp på game streaming serveren og trykk «Koble til»:


  7. Test til slutt at Moonlight Embedded har forbindelse med din game streaming server og klarer å hente listen med spill som er registrert automatisk eller lagt til manuelt i GeForce Experience med:
    moonlight list

Nå skulle din Raspberry Pi være klar til å spille alle spill som du har installert på din Windows game streaming server, f.eks. i Steam, ved å taste inn kommandoer som:

moonlight stream -1080 -fps 60 -remote -platform pi -quitappafter -app "Steam" 192.168.0.10

Husk å bytte ut 192.168.0.10 med den virkelige ip-adressen til din game streaming server og «Steam» kan byttes ut med de ulike spillnavnene fra kommandoen moonlight list for å åpne disse spillene direkte når spillstrømmingen starter.

Spillstrømmingsøkter avsluttes med knappekombinasjonen Select + Start + Venstre skulder + Høyre skulder på din gamepad, eller tastekombinasjonen Alt + Ctrl + Shift + Q på keyboardet.

Siden Moonlight Embedded er drevet på frivillig basis, hender det at repository’et over og oppdatering med sudo apt update&&sudo apt upgrade henger litt etter med bugfix’er og hyppige oppgraderinger av GeForce Experience. Men fix til selve kildekoden kommer som regel allikevel ganske kjapt på GitHub. Man kan da avinstallere med sudo apt purge moonlight-embedded og heller raskt kompilere og installere manuelt, slik det er beskrevet her.

Oppsett av Moonlight i RetroPie

Det er vitterlig tungvint å starte Moonlight Embedded hver gang manuelt fra kommandolinjen. I tillegg til muligheten for å lagre kommandoer tilsvarende den ovenfor i .sh skriptfiler, eller i snarveier på ditt Raspbian skrivebord, så har ivrige brukere, som f.eks. TechWizTime, laget ulike løsninger for å integrere Moonlight Embedded i RetroPie, slik at strømming av spill kan startes direkte fra EmulationStation frontend, på samme måte som for andre emulerte spill:

Basert på TechWizTime sitt setup-script, har jeg laget en rask guide for å få en strømlinjeformet brukeropplevelse med Moonlight Embedded game streaming i RetroPie. Her vil alle spillene fra kommandoen moonlight list være tilgjengelige i menyen «Steam» i RetroPie. Listen med spill som kan strømmes oppdateres med et knappetrykk på en menyoppføring av shell script’et, _UpdateMoonlightGamesList.sh, og man kan enkelt i samme menyen legge til andre shell script som kan være veldig nyttige når man driver med spillstrømming:

  1. Lag en mappe, «moonlight» i din RetroPie ROMS-mappe og gå dit:
    sudo mkdir /home/pi/RetroPie/roms/moonlight&&cd /home/pi/RetroPie/roms/moonlight
  2. Last ned _UpdateMoonlightGamesList.sh:
    sudo wget https://raw.githubusercontent.com/Vegz78/UpdateMoonlightGamesList/master/_UpdateMoonlightGamesList.sh
  3. Gjør _UpdateMoonlightGamesList.sh eksekverbar:
    sudo chmod +x ./_UpdateMoonlightGamesList.sh
  4. Redigér filen _UpdateMoonlightGamesList.sh:
    sudo nano ./_UpdateMoonlightGamesList.sh
    Endre verdier i uthevet skrift i følgende kodeseksjon på begynnelsen av filen til verdier som passer ditt oppsett:
    MOONLIGHT_PATH="/home/pi/RetroPie/roms/moonlight" #Full path to Moonlight roms folder 
    STREAMINGHOST="192.168.0.10" #Streaming host's IP adress or hostname
    RESOLUTION="1080" #720/1080/4K
    FPS="60" #30/60 etc.
    BITRATE= #Bitrate in Kbps
    REMOTE="Yes" #"Yes" or 1 for remote optimization, empty otherwise
    AUDIO= #"local" for local audio via jack plug, empty for HDMI
    PLATFORM="pi" #pi/imx/aml/rk/x11/x11_vdpau/sdl/fake/auto, empty otherwise
    QUITAPPAFTER="Yes" #"Yes" for quitting app after ending streaming session, empty otherwise
  5. Redigér filen «/etc/emulationstation/es_systems.cfg«:
    sudo nano /etc/emulationstation/es_systems.cfg
    Og legg til følgende kodeseksjon, gjerne på slutten av filen, mellom siste «</system>» og «</systemList>«:
    <system>
    <name>Steam</name>
    <fullname>Steam</fullname>
    <path>/home/pi/RetroPie/roms/moonlight</path>
    <extension>.sh .SH</extension>
    <command>%ROM%</command>
    <platform>steam</platform>
    <theme>steam</theme>
    </system>
  6. (Re)start EmulationStation og kjør oppføringen _UpdateMoonLightGamesList bak nytt hovedmenyvalg, «Steam», for å fylle undermenyen med spilltitler som kan spillstrømmes. Kjør _UpdateMoonLightGamesList på nytt hver gang det er behov for å oppdatere listen. -Enten direkte fra RetroPie, eller fra kommandolinjen med /home/pi/RetroPie/roms/moonlight/_UpdateMoonlightGamesList.sh

Du er nå klar til å strømme både det du måtte ha av retrospill som er for nye og tunge til å kjøre på Raspberry Pi og/eller som kan oppskaleres for en bedre spillopplevelse, i tillegg til de nyeste AAA-titlene, i nydelige 1080p og 60fps over hjemmenettverket fra din Windows game streaming PC til din Raspberry Pi, på akkurat samme måte du er vant med for dine øvrige spill i RetroPie.

Automatisk installasjon og oppsett i RetroPie

Personlig foretrekker jeg å installere og sette opp Moonlight Embedded manuelt, som beskrevet i de to avsnittene over. Hovedgrunnen til dette er at jeg bruker en del andre shell script i den samme «moonlight» ROMS-mappen, som er praktiske å ha lett tilgang til når man game stream’er fra RetroPie. Bl.a. ToggleZeroTier. Mer om disse i senere artikler.

I tillegg føler jeg at det er raskere å oppdatere de ulike game streaming parameterne direkte i filen _UpdateMoonlightGamesList.sh, samt å kjøre oppføringen UpdateMoonlightGamesList direkte fra menylisten med de øvrige titlene som kan spillstrømmes, i stedet for å gå inn og ut av dype undermenyer i RetroPie for å oppnå det samme.

Jeg synes allikevel det er vel verdt å ta med det solide arbeidet som Hugo Hromic har utført og fått med i de offisielle utgivelsene av RetroPie, for å installere og sette opp Moonlight Embedded som en integrert og automatisert del av pakken, og på samme måte som man installerer og konfigurerer de øvrige emulatorene.

Installasjon

Oppsett


Fortsett fra installasjonsmenyen i bildet over og deretter fra bilde 4 under for å konfigurere, eller gå tilbake til «RetroPie» hovedmenyen og fortsett fra bilde 1 under.

Konfigurasjons- og tilkoblingsfiler mv. finner man under /opt/retropie/configs/all/moonlight/

Tips & tricks

  • I GeForce Experience kan man selv enkelt legge til spill (eller andre programmer) som en ønsker å ha i listen over spill man kan strømme direkte fra RetroPie, og som GFE ikke selv finner via sin liste over støttede spill. Under «Innstillinger» og «SHIELD» finner man en meny for å legge til snarveier og kjørbare filer. Man kan også endre navn og ikonbilde:
  • I tråd med denne sidens grunnånd, så bør man legge til RetroCake i GeForce Experience for å kunne spillstrømme retrospill som er for nye og tunge til å kjøre lokalt på en Raspberry Pi, eller som man ønsker å oppskalere og forbedre grafikken på. RetroCake startes normalt med C:\RetroCake\EmulationStation\emulationstation.exe
  • Som standard startes Steam i Big Picture modus hvis man kjører Moonlight Embedded uten «-app«-parameter eller med moonlight stream -app "Steam", som er inkludert i spillisten så lenge Steam er installert.
  • Noen ganger, av uvisse årsaker, starter Steam allikevel ikke opp i Big Picture modus. Du kan dermed legge til en .bat-fil, kalt «SteamBP«, i GeForce Experience ovenfor, med følgende kommando:
    start "Steam Big Picture" "C:\Program Files (x86)\Steam\Steam.exe" -start steam://open/bigpicture
  • Man kan legge til Windows UWP spill og apper fra Microsoft Store i GeForce Experience på følgende vis:
    • Press Win + R og kjør shell:appsfolder
    • Et utforskervindu med alle dine app’er åpnes
    • Velg ønskede UWP app, høyreklikk og velg «Lag snarvei«
    • Velg «Ja» for å lagre snarveien på skrivebordet
    • Flytt snarveien til ønsket mappe og legg den til i GFE
  • Bruk Moonlight som Remote Desktop fra RetroPie ved å legge til «C:\windows\system32\mstsc.exe» i GeForce Experience. Moonlight har ikke problemer med hakkete multimediaavspilling og grafikkintensive applikasjoner, slik de fleste andre Remote-Desktop-løsninger har. Man kan også starte/stoppe hvilket som helst spill fra hvilken launcher/hvilket sted du måtte ønske, akkurat som om du selv satt ved Windows-PC’en.
  • Husk å kjøre _UpdateMoonlightGamesList på nytt hver gang du legger til eller fjerner en app i GeForce Experience.
  • Spillstrømmingsøkter avsluttes med knappekombinasjonen Select + Start + Venstre skulder + Høyre skulder på din gamepad, eller tastekombinasjonen Alt + Ctrl + Shift + Q på keyboardet.
  • Man kan velge om Moonlight skal avslutte gjeldende spill eller bare avbryte spillstrømmingsforbindelsen, slik at man kan gjenoppta spillet på samme sted ved neste oppkobling, ved å sette hhv. «Yes» eller «» for parameteren «QUITAPPAFTER» i filen _UpdateMoonlightGamesList.sh, som forklart lenger oppe.
  • Hvis man ikke har aktivert «QUITAPPAFTER«, eller forbindelsen skulle bli brutt eller henger seg opp, kan det være lurt å legge til en ny skriptfil i mappen /home/pi/RetroPie/roms/moonlight, f.eks. kalt _AvsluttGjeldendeSpill.sh, med følgende innhold:
    !/bin/bash
    moonlight quit 192.168.0.10
  • Skulle spillstrømmingsøkten mot formodning henge seg fullstendig opp, kan man fra ssh eller en annen console avslutte den med sudo killall moonlight, eller i verste fall med sudo killall -9 moonlight.
  • Hvis spillstrømmingsopplevelsen er hakkete, eksperimentér med «BITRATE» i intervallet 10000 – 40000 i _UpdateMoonlightGamesList.sh før du setter ned oppløsning og FPS på et godt kablet hjemmenettverk. Prøv også helautomatisk, uten verdier for «RESOLUTION«, «FPS» eller «BITRATE«.
  • Det hender noen få ganger at lyden kommer litt ut av sync med bildet i Moonlight, særlig hvis det skjer justeringer med lydenheten ifm. oppstart av spill. Dette fikses som regel lett med å bryte spillstrømmingsforbindelsen og koble opp igjen (Det er da en fordel å deaktivere «QUITAPPAFTER»).

Oppsummering med noen smakebiter

Moonlight game streaming løfter virkelig spillmulighetene og -opplevelsene på en Raspberry Pi til helt nye høyder. Man kan enten integrere Moonlight Embedded i RetroPie og bruke den som en dedikert spillmaskin, eller som en kombimaskin med Raspbian e.l., og i tillegg til å spillstrømme, bruke Moonlight som multimediakapabel Remote Desktop som startes fra desktop eller kommandolinjen.

I fremtidige artikler, skal vi se nærmere på andre muligheter for spillstrømming i og utenfor hjemmenettverket, og videre på multiplayer foran samme skjerm, lokalt og «remote play together» med Moonlight. Vi vil også se på andre spillstrømmingsteknologier, i kombinasjoner både med hverandre og andre emulator-frontends og spillteknologi, i jakten på drømme(retro)spilloppsettet med Raspberry Pi.

I mellomtiden noen smakebiter fra hvordan Moonlight game streaming ser ut på RetroPie/Raspberry Pi:

Legg inn en kommentar