Journal Sunshine, Moonlight

Posté par  (site web personnel) . Licence CC By‑SA.
54
12
mar.
2022

Bonsoir LinuxFr;

Je cherchais depuis longtemps une solution simple, fonctionnelle, performante, libre et surtout fonctionnant sous linux pour faire du streaming de jeu vidéo.

Je possède en effet un PC suffisamment bien pourvus pour faire tourner des jeux dans mon bureau, mais je n'ai rien de tel dans le salon. Seulement un petit RPI (2, puis 3 et maintenant 4), ceci au prix actuel c'est pas rien non plus. Il me sert de media center avec LibreElec et Kodi et malgré quelques crash il fait bien le café.

Alors j'ai pensé à l'utiliser comme client pour streamer mon PC; Ça avait l'air simple, au début je m'imaginais même utiliser VNC, c'était avant qu Steam ne disrupte le game. En fait je me suis lancé dans une tache qui m'aura pris plusieurs années. Sans rire.

J'ai testé tout un tas de solutions, dont VNC, Steam Link, des expérimentations avec VLC et ffmpeg (avec de très bons résultats niveau stream de flux); mais sans jamais arriver à un résultat convainquant, ni simple à mettre en place.
La meilleure expérience était avec Steam Link, ça n'est pas particulièrement libre (surtout que je joue souvent à des jeux proprio, alors bon) mais là ou ça coince c'est niveau client.

Je voulais en effet garder LibreElec sur mon RPI, pour tout un tas de raisons. Essentiellement certaines fonctionnalité de décodage (HDR10) et autre version logiciels non disponible sur Raspbian et que je n'ai pas réussi à faire fonctionner sous Archlinux ARM (des extentions non officielles pour Netflix et Disney+ par exemple [je sais…]).

Sauf que LibreElec à une philosophie très minimaliste, quand ils disent "Just enough OS for KODI" ils rigolent pas; on aura par exemple pas de gestionnaire de paquet et c'est pas gagné pour résoudre l'enfer de dépendance quand on essaye d'installer un binaire à la mano.

LibreElec ne fait pas usage de X également (peut être utilisent ils directement le framebuffer ?); Mais le binaire de Steam Link pour RPI4 assume la présence de Xorg sur le système (il s'attend à tourner sous Raspbian) le rendant très difficile (voir même impossible) à faire tourner sous LibreElec.

Bref, je travaillais sur ce dossier de temps en temps et je testais souvent de nouvelles idées et comme j'aime bien chercher c'était chouette. Mais j'avais un peu perdu l'espoir de jouer sur mon canapé.

Et j'ai trouvé Sunshine.

Alors Sunshine, pour le présenter il faut d'abord parler de Moonlight.
En 2013 Nvidia lançait la Nvidia Shield, une petite console avec la capacité de de jouer en streaming sur sa plateforme Geforce Now, le service de streaming de Nvidia. Quelques années plus tard ils rendirent possible de streamer depuis son propre PC, via Geforce Now, et uniquement sous Windows. Et uniquement pour les cartes Nvidia bien sur.

J'avais pas forcément envie d'installer ce genre d'usine à gaz ultra fermé mais au moins là c'était tout vu.

Des clients alternatifs on cependant vu le jour, Moonlight implémente le protocole NVIDIA GameStream et est disponible sur une poutrochiée de systèmes. Mais il fallait encore faire tourner Geforce Now sur le serveur !

Et arriva Sunshine. Pour faire simple c'est la partie serveur qui nous manquait.
C'est libre, ça tourne sous Linux, ça tournent sur des cartes Nvidia, AMD et en théorie Intel et surtout ça marche !

Bon le repo initial ne semble plus actif, mais le développement à repris ici (avec l'approbation du dev initial si j'ai bien suivi).

Je l'ai installé sur ma Archlinux via AUR et si ça à marché immédiatement, j'ai constaté quelques soucis. Premièrement des artefacts et autres bandes noirs sur le client (quelque soit le client), résolus en installant une version patchée de nvidia-utils (aur/nvidia-utils-nvlax, apparemment ça permet d'outrepasser certaines limitations du driver proprio, ça ne m'a pas enchanté de devoir l'installer, mais j'avais tellement envie de jouer dans mon canapé).

Deuxièmement (et dernièrement) j'ai été confronté à des crash au début aléatoire et finalement très spécifiques. Avec l'implémentation actuelle, si une manette est branché, et que le jeu envoie une vibration, le serveur se fige. J'ai essayé de fouillé le code source pour voir comment fonctionnent les inputs mais pour l'instant le plus simple à été de désactiver les vibrations. Ça fonctionne mais tous les jeux ne le permettent pas.

Mais laissons ça de côté, j'ai également été agréablement surpris en découvrant un client moonlight-qt pour LibreElec 10 RPI 4 et x86. C'est du voodoo, ça build sous docker, ça extrait les dépendances dans LibreElec, et ça installe les scripts qu'il faut se lancer depuis Kodi. Et sans se plaindre en plus.

Et là encore ça fonctionne. Bref, ce mois ci j'ai enfin pu jouer depuis mon canapé, je suis refais. Et tout est libre (en tout cas si vous n'avez pas comme moi une carte Nvidia).
Les perfs sont bonnes, ma manette à été détecté sans soucis. Que du bon.

J'envisage même de m'en servir en remplacement de teamviewer / VNC !

Bref, je suis content d'en être sortit et j'espère que ça vous sera utile si vous voulez également jouer depuis votre salon ou vos toilettes.

Bon jeu !

  • # En 2021

    Posté par  (site web personnel) . Évalué à 4.

    Merci pour le partage! Je me suis dit que j'avais déjà vu passer ce sujet, c'est le cas et tu y avais déjà participé :)

    Un LUG en Lorraine : https://enunclic-cappel.fr

  • # GBM

    Posté par  . Évalué à 6.

    LibreElec ne fait pas usage de X également (peut être utilisent ils directement le framebuffer ?);

    Ça utilise GBM. Ça se lance avec /usr/bin/kodi-standalone --windowing=gbm, et ça utilise directement les pilotes graphiques, l'écran, sans X ni Wayland. Évidemment, c'est qu'une seule application à la fois. Et c'est complètement parfait chez moi.

    • [^] # Re: GBM

      Posté par  (site web personnel) . Évalué à 4.

      Ah d'accord, merci de l'info. Effectivement ça marche très bien, l'extension Moonlight sur LibreElec se lance d'ailleurs via un script qui tue kodi et lance moonlight-qt; et qui relance kodi quand on ferme moonlight.

      Il y a une latence de quelques secondes mais c'est très honnête.

  • # VNC

    Posté par  . Évalué à 2.

    Merci pour cette découverte ! Est ce que tu pourrais nous donner ton expérience concernant l'utilisation de VNC ? Avais-tu essayé le "X11 forwarding" (je doute car tu indiques que ton client n'a pas de serveur X) ?

    • [^] # Re: VNC

      Posté par  (site web personnel) . Évalué à 4.

      Je n'ai pas essayé de client VNC sur RPI, j'ai utilisé un deuxième PC, mais je me souviens de soucis de framerate et ma manette ne fonctionnait pas (mais j'ai pas creusé).

      Après je suppose que VNC reste une solution envisageable, mais ça m'a paru plus complexe à mettre en place que Moonlight au final.

      Je referai sûrement des tests un de ces jours, quand mon setup me lâchera !

      • [^] # Re: VNC

        Posté par  . Évalué à 5.

        Est-ce que tu as testé avec VirtualGL / TurboVNC ? ça marche pluutôt bien d'après l'auteur (avec XWindow), même si ce que montre Moonlight à l'air plus efficace.

  • # Et en hard?

    Posté par  (site web personnel) . Évalué à 10.

    Chez moi mon bureau et mon salon ne sont pas très loin, j'ai mis :

    • un switch kvm avec deux sorties hdmi et une petite télécommande ;
    • un long câble hdmi pour aller jusqu'à l'écran du salon ;
    • un clavier avec touchepad intégré sans fil et une manette sans fil.

    Du coup je ne suis pas dépendant d'une solution logicielle.

    Il y a 20 ans, je faisais pareil avec des énormes et gigantesques rallonges VGA et PS/2 :-)

    Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

    • [^] # Re: Et en hard?

      Posté par  (site web personnel) . Évalué à 2.

      Ah oui j'aurais adoré pouvoir faire ça, mais j'ai déjà galéré avec le passage du câble Ethernet, j'avais vraiment pas envie de tirer un câble HDMI ^
      Et dans mon cas il reste aussi le problème de la connexion sans fils de la manette (le bureau et le salon sont séparés par deux bons gros murs).

  • # Mais ouiiii !

    Posté par  (Mastodon) . Évalué à 7.

    Je savais que le titre me disait qqchose : https://www.youtube.com/watch?v=nqxVMLVe62U&t=35s

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

  • # [hs] en passant

    Posté par  (site web personnel, Mastodon) . Évalué à 3.

    En fait je me suis lancé dans une tache qui m'aura pris plusieurs années. Sans rire.

    Une de plus, de longue tâche. :-) En parlant de ça, tu pourras publier un certain lien sur LinuxFr pour avoir des commentaires…

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.