XinCTO/twitch sur votre TV avec un PI

Ecrit le Sun, 04 February 2018 14:44:04 +0000
858 mots 5 minutes

twitch sur votre TV avec un PI

Si comme moi vous avez la chance d’être chez un fournisseur internet qui ne propose pas une bande passante suffisante pour aller sur certains sites de streaming, comme par exemple twitch, ou que tout simplement vous souhaitez profiter de cette application sur votre TV, voici un premier tuto simple pour démarrer.

Twitch propose des diffusions sur bon nombre de jeux et notamment propose la diffusion de certaines compétitions régulières d’esport. Le plus simple pour en profiter est tout simplement d’utiliser votre navigateur préféré sur votre poste, de choisir une chaîne et de profiter du spectacle.

Si vous souhaitez en profiter sur un écran plus convivial de type TV ou projecteur, les choses se corsent. Certes on peut toujours connecter son pc portable à sa TV, mais c’est souvent assez peu pratique, de la câblerie, besoin de préparer et surtout de disposer d’un portable. Si vous êtes chez l’opérateur internet free, vous disposez d’une application accédant directement à twitch, mais vous serez probablement confronté à des problèmes de qualité puisque la bande passante vers twitch est très réduite et en fonction de la période de la journée (à partir de midi) ou de la semaine (pas le week-end donc), il est parfois impossible d’avoir accès à une chaîne.

La solution proposée

Première version de la solution : un raspberry (PI2 ou PI3) connecté en HDMI sur votre TV et à internet, un accès via SSH pour lancer la commande.

Idéalement : le tout encapsulé derrière une petite application web qui sera utilisé depuis votre téléphone ou tablette pour lancer le stream de votre choix, changer la qualité, …

Installation

Depuis une image raspbian (version lite) déposée sur la carte mémoire de votre PI, vous penserez à activer le ssh (fichier créé sur la partition de boot et nommé ssh), il faudra ensuite installer :

  • omxplayer
  • livestreamer

Le livestreamer

livestreamer est une commande en ligne permettant de collecter un flux depuis des sources variées et de les envoyer vers une application de projection, comme par exemple vlc. Les sources sont variées, twitch (c’est l’objet de mon sujet du jour), mais aussi dailymotion live ou encore youtube live, il y a également dans la section des plugins des choses plus exotiques comme des chaines de rattrapage tv par exemple.

Récupération du token :

Afin d’accéder aux flux de twitch, il faut enregistrer votre client livestreamer et disposer d’un compte sur twitch, vous pouvez le créer à l’occasion :

$ livestreamer --twitch-oauth-authenticate

Puisque la commande ne pourra pas ouvrir de navigateur sur votre PI, une URL vous est proposée. Utilisez la sur votre poste de travail afin de vous authentifier sur twitch et sur la page d’erreur (et oui), récupérez dans l’url la valeur du paramètre access_token.

Paramètres de buffer livestreamer :

Vous pouvez dès lors tester livestreamer, par exemple sur le stream de solary :

$ livestreamer --twitch-oauth-token %votre_token% twitch.tv/solary
[cli][info] Found matching plugin twitch for URL twitch.tv/solary
[plugin.twitch][info] Attempting to authenticate using OAuth token
[plugin.twitch][info] Successfully logged in as %you%
Available streams: 160p (worst), 360p, 480p, 720p (best), 720p60, audio_only

Tout semble fonctionner, vous avez normalement le fait que votre connexion fonctionne et les formats disponibles sur le stream utilisé, nous pourrons faire varier ce paramètre en fonction du débit disponible sur notre connexion internet.

Pour profiter du buffering, nous utilisons les fonctions HLS (HTTP Live Streaming). Les options intéressantes :

  • --hls-segment-threads : nombre de thread utilisés pour la lecture des blocks, en mettre plusieurs permet de multiplexer et éventuellement de passer outre les restrictions par session posées chez certaines opérateurs, la valeur par défaut est 1, le maximum est 10, j’utilise 8 sur mon PI.
  • --hls-live-edge : joue sur le nombre de segment qui seront lus en avance de phase avant la diffusion, ceci augmente le délai avant d’avoir le live mais assure que les latences sur le réseau pourront être limitées, voir totalement transparentes. La valeur par défaut est de 3, vous pouvez ajuster en fonction de la qualité demandée et de la période horaire, j’utilise la valeur de 15.
  • --ringbuffer-size : mémoire réservée pour la zone tampon, par défaut 16M, on peut monter un peu pour absorber les soucis de réseau

L’affichage avec omxplayer

Le plus difficile est fait ! Le module d’affichage le plus simple est probablement vlc, mais ses performances sur un raspberry PI en X11 ne sont pas suffisantes, gardez cela pour votre PC. L’outil omxplayer a été spécialement travaillé sur le PI afin d’utiliser le GPU intégré, il offre des performances suffisantes pour afficher en 1080p à 60 images par secondes.

Il faut utiliser l’option -o hdmi afin de diffuser l’image et le son vers votre écran.

Vous pouvez également utiliser l’option -s qui donne des statistiques sur omxplayer et permet de contrôler que les niveaux mémoire et l’état des buffers.

Assemblage

$ livestreamer --twitch-oauth-token %token% \
             twitch.tv/%chaine% %qualité% \
             -nvp 'omxplayer -o hdmi' \
             --hls-segment-threads=8 \
             --hls-live-edge=15 \
             --ringbuffer-size=64M

Il vous faudra compter environ 25 secondes au lancement de la commande avant d’avoir le flux sur votre TV, mais désormais l’image est fluide et normalement votre programme préféré ne sera pas perturbé au pire moment de la game.


Photo from Maxime Rossignol