Expeditions: Samurai veut révolutionner le RPG tactique avec une aventure entièrement jouable en coop
Bonjour à tous !
Il y à une semaine, je me suis décidé à jouer à des Hackrom de Pokémon, mais je me suis dit, "ça serai marrant de le partager avec les autres !", je me mis donc en tête de partager mon aventure sur le site bien connu de live streaming de jeux vidéo, j'ai nommé http://twitch.tv
Streamer sous Windows est tellement facile ! En quelque clics avec OBS ou Xsplit, on choisit le jeu à streamer, on choisit les entrées audio, et roulez jeunesse !
Seulement voilà, ce genre de logiciels utilisent la technologie DirectX de Microsoft pour capturer nos jeux bien aimés, technologie qui n'est, bien sur, pas disponible sous Linux, rendant les logiciels cités incompatibles avec ces plateformes.
Un premier problème se pose donc : des logiciels dédiés au broadcasting existent-il sous Linux ? Après quelque recherches, il se trouve que non. Pour autant, je refuse d'abandonner : il y a toujours un moyen de tout faire, sous Linux ! Pas de la même manière que sous Windows, bien entendu, mais il y a très souvent un moyen de faire une même tâche !
Après quelques rechèrches menées par Duckduckgo, mon moteur de recherches favori, je finis par trouver un script sur un dépôt GitHub : https://github.com/wargio/Twitch-Streamer-Linux/blob/master/twitch_ffmpeg.sh
Chouette ! Un script automatisé ! Testons-le !
Avec la zèle d'un débutant, je chmod le script et le lance sans même vérifier son contenu. Malheureusement, en essayant de courir les mains dans les poches, on se casse vite la gueule, et ça, c'est vite appris. On me demande grace à wininfo quelle fenbêtre je veux diffuser, puis le script s'arrête. Je prends conaissance grâçe à l'output du script (oui parce que je sais lire, faut pas déconner quand même) et j'apprends que le périphérique "pulse" n'existe pas.

"Mais qu'est-ce c'est-ti que ce maudit bazar ?"
Rien de bien compliqué, Henry ! Une relecture du script rapide montre que le script utilise ffmpeg pour envoyer de l'image et du son aux serveurs de Twitch. Comme l'évoque le nom, le périphérique demandé pour streamer l'audio doit être géré par PulseAudio. J'utilise Arch Linux et ai fait le choix de ne pas utiliser ce dernier, parce que ALSA seul fonctionne à merveille et que je ne vois pas la nécessité de rajouter une couche par dessus.
Mais alors, comment utiliser ALSA avec ce bouzin ? Une rapide lecture de doc nous donnera la réponse !
Il se trouve que ALSA classifie ses appareils de cette facçon : hw:X,Y ou X est le numéro de la carte son, en partant de 0 et Y le nom du périphérique (microphone, haut-parleur...). Je veux bien évidemment que l'on entende ma belle voix lors de mon stream ! Un simple arecord -l me permet de savoir que le microphone intégré à mon ordinateur portable est assigné au chiffre 2. Je devrai donc utiliser les options -f alsa -i hw:2,0 dans le script pour que le son de mon micro soit enregistré.
Après quelques modification pour conformer le scripts à mes gouts, besoins et moyens, je le relance. Miracle, le jeu appraît sur le lecteur de ma chaîne Twitch !
Cependant, et c'est tout naturel, le son du jeu n'est pas présent, car je n'ai pas réglé le script pour. Je décide donc de le faire !
J'ai bêtement cru qu'il aurai suffit de rajouter mon output son, -f alsa -i hw:0,0, au script pour que cela fonctionne. Bête que je fus ! Le script m'affiche a présent "Acccess refused, is the device busy?"
Bien entendu, hw:0,0 correspond à un output son, et non un input. Il ne peut donc pas être utilisé pour enregistrer du son si il en diffuse déjà !
Je repars donc en expédition sur les intérnets pour la question : "comment enregistrer le son d'une sortie audio avec ALSA ?"
La solution et plus difficile qu'il n'y paraît. Il faut activer le module du noyau snd-aloop grâche à un modprobe bien placé, et configurer asoundrc, comme indiqué dans ce post : https://bbs.archlinux.org/viewtopic.php?pid=1153194#p1153194
Cette procédure ajoute donc une carte son virtuelle du nom de loopback, avec l'input addressée à hw:1,1 qui est, simplement, une coptie de l'output de la carte son 0.
Maintenant, dernier problème : Avoir les deux entrées audio en même temps. Car oui, -f alsa -i h:0,2 et -f alsa -i hw:1,1 ne suffit pas à obtenir les deux inputs audio ! De son naturel, ffmpeg est un encodeur. Il écrasera le premier flux audio par le second. Pour remédier à ça, il m'a encore fallu lire la doc de ffmpeg, et il s'est avéré que rajouter l'option -filter_complex amix=inputs=2 était nécessaire.
Je peux maintenant streamer la vidéo, le son d'un jeu et ma voix sous Linux, après plusieurs heures de bricolage et de recherches !
Un stream est d'ailleurs prévu aujourd'hui, le 22/02/2014 à 17h sur la hackrom Pokémon Brown, pour les intéressés : http://www.twitch.tv/siphonay
J'ai tenu à vous faire partager cette éxpérience pour donner des pistes à ceux qui seraient en difficulté pour livestreamer avec leur distribution, mais aussi parce uqe c'est ça que j'aime, chez Linux : si on veux faire des choses, il faut apprendre à les faire. J'ai appris à me servir d'ALSA et de ffmpeg en voulant streamer du jeu, et cette éxpérience ne m'est que bénéfique !
Bien écrit
C'est si dur que ça ? Je pensais qu'on avait des logiciels faits pour ![]()
C'est pas "dur" ! Faut juste savoir comment faire, et savoir lire, rien de bien compliqué.
Merci de l'épingle ![]()
C'est bien rédigé, ça colle à Linux ET au monde du jeu vidéo, ça peut en intéresser plus d'un ici... donc je me suis dit que ça aurait bien sa place en haut
Pour ma part je n'ai jamais tenté de streamer quoi que ce soit (sous Windows comme sous Linux), mais je prends note au cas où ![]()
Ce billet mérite son épingle
C'est bien rédigé et on a des infos utiles par rapport à certains bugs.
Je prends note également, même si ça ne m'est pas utile dans l'immédiat.
En tout cas, merci pour le partage des infos ![]()
Merci !
Voici le pastebin du script modifié, pour ceux que ça intéresserai : http://pastebin.com/0EzXxrFW
Mets le sur GitHub plutôt ![]()
J'ai pas de compte GitHub et j'ai pas envie pour le moment d'en créer un juste pour un script modifié qui n'est pas le mien.
Si un jour j'ai le courage d'apprendre un language de prog pour faire un GUI GTK+ qui utilise FFMPEG pour streamer, j'en ouvrirai un éventuellement.
C'est pas comme si github était fait pour ![]()
Bah contactes le gars qui maintient le script pour lui signaler le problème ![]()
Ah un crash de la vidéo ![]()
OMG c'est impossible à suivre ![]()
J'ai fait un petit stream test entre 17h et 17h48. Ma connexion a un débit montant très très bas et je peux pas me permettre de stream longtemps...
ShadowwF Voir le profil de ShadowwF
Posté le 22 février 2014 à 17:15:56 Avertir un administrateur
Bah contactes le gars qui maintient le script pour lui signaler le problème
Le script en lui-même n'a aucun problème ! Simplement qu'il utilise PulseAudio et non directement ALSA.
linux13-04 Voir le profil de linux13-04
Posté le 22 février 2014 à 17:00:26 Avertir un administrateur
#juste pour un script modifié qui n'est pas le mien.
C'est pas comme si github était fait pour
Je sais, mais je ne suis pas développeur et n'ai pa l'utilité d'un compte GitHub pour le moment.
Sinon un petit hs par rapport à la vidéo.
Est-ce possible de faire marcher brown sur une vrai game boy?
Je vois pas ou serai le souci si tu as une flash cartridge, il te suffirai d'obtenir (D'une manière légale, de préférence) une ROM américaine de Pokémon Rouge, d'y appliquer le patch de Pokémon Brown trouvable ici : http://www.pokecommunity.ty.com/showthread.php?t=175044 et de transférer la ROM patchée sur la cartouche flash.
je ferais ça pour essayer les roms hacks de pokémon, qui ont l'air très bien ma fois.
Essaie la rom kaizo marioworld
Je te mets au défi de passer le premier niveau.
c'est quand le prochain stream?
Je ne sais pas, je ne pourrai pas prévoir, puis, surtout ave ma connexion, quoi :/
Donc en clair, on pourrait techniquement coder un GUI qui détecte automatiquement ALSA/pulseaudio, les inputs, + le son du jeu ? ![]()