Diffuser un flux vidéo avec OBS vers un serveur RTMP privé pour diffusion sur une TV connectée

Je regarde très peu la télévision, préférant de loin utiliser les services de streaming comme Netflix ou parfois Amazon Prime, ainsi que quelques vidéos de vacances. Lorsque je regarde une émission, j’utilise Molotov qui, dans sa version gratuite, ne permet pas de regarder TF1 ou M6. Ce qui n’est pas un mal de toute façon. Mais hier je voulais regarder une émission sur TF1. Je souhaitais la regarder sur mon grand écran alors je me suis servi de ce prétexte pour monter l’infrastructure que je m’apprête à décrire.


Setup initial

Mon installation initiale comprend les éléments suivants.
Il est possible de mutualiser certaines fonctions.

Hardware

  • Une TV connectée possédant l’application VLC (ou tout autre appli permettant de lire un flux réseau RTMP). J’utilise une Nvidia Shield (un boitier Android TV).
  • Un PC sous Windows pour récupérer le flux de TF1 via Captvty.
  • Un serveur Linux (mon miniPc Mele Quieter qui me sert à tout).

Software

Captvty

C’est un logiciel, uniquement sous Windows même si certains hacks permettent de le lancer sous d’autres systèmes, qui permet de lister l’intégralité des émissions accessibles en replay sur la plupart des chaînes françaises.

Il permet aussi, en faisant un clic droit sur le nom d’une chaîne, de la regarder en direct.

Captvty me servira ici de source de flux vidéo, mais on pourrait utiliser n’importe quoi.

OBS

C’est le logiciel de streaming le plus populaire actuellement. C’est une sorte de banc de montage qui permet de préparer des scènes à diffuser par exemple sur Twitch.tv ou Youtube. On peut récupérer des flux vidéos, des images fixes, des overlays, mixer l’ensemble, ajouter des filtres, bref, c’est très puissant.

Nginx-RTMP

Nginx est un serveur Linux ultra léger, très facile à installer et à configurer, qui peut servir des pages Web, faire reverse proxy et qui dispose dans notre cas d’un module RTMP trivial à configurer.

Je l’ai installé sur mon boitier, mais je suppose qu’on peut aussi faire une machine virtuelle légère (genre un truc sous Alpine), un docker ou même passer par le WSL de Windows. Je n’ai pas encore testé ces solutions.

Mise en place

Nginx-RTMP

Personnellement je suis sous Ubuntu, il faut adapter les commandes d’installation si vous possédez une autre distribution.

Installation

Ouvrir un terminal puis :

  • sudo apt update
  • sudo apt install libnginx-mod-rtmp

Configuration

Toujours dans le terminal

  • sudo nano /etc/nginx/nginx.conf

Ajouter le bloc suivant à la fin du fichier :

rtmp {
        server {
                listen 1935;
                chunk_size 4096;

                application live {
                        live on;
                        record off;
                }
        }
}

Quitter (CTRL+X) en sauvegardant (Y).

Relancer le serveur

  • sudo systemctl restart nginx

C’est vraiment la config minimale, il n’y a pas de sécurité, pas de transcodage, le flux est transmis tel quel.

! Attention ! Ayant déjà un serveur web sur ce boitier, il a fallu que je change les ports d’écoute de nginx pour autre chose que le 80 qui était déjà pris. Sinon le service refuse de se lancer.

Captvty

  • Télécharger et décompresser le logiciel quelque part, par exemple sur le bureau.
  • Lancer l’exécutable captvty.exe
  • Faire un clic droit sur la chaîne TV puis Visionner <chaine> en direct

Si tout se passe bien, une fenêtre s’ouvre et diffuse un flux vidéo.

OBS

Installation

  • Installer et décompresser OBS quelque part, par exemple le bureau
  • Lancer l’exécutable obs64.exe

Configuration

  • Dans les sources, ajouter Capture d’une fenêtre et Audio du bureau
  • Dans les paramètres de la capture de fenêtre, sélectionner la fenêtre qui diffuse la chaîne.
  • Enfin, dans les paramètres de Flux d’OBS,
    • choisir Personnalisé
    • Indiquer l’adresse du serveur RTMP
    • Choisir une clé (j’ai mis test)
  • Enfin, lancer le stream

Si OBs ne dit rien, c’est que le flux est diffusé.

Reception

Depuis un ordinateur branché sur le réseau, depuis un téléphone (s’il dispose de VLC), ou directement depuis la TV :

  • Lancer VLC
  • Ouvrir un flux réseau
  • Indiquer l’adresse du serveur RTMP sous la forme
    • rtmp://<adresse ip>/live/test

live, c’est le nom du service RTMP (indiqué dans le fichier de configuration Nginx).
test, c’est la clé de stream indiquée dans OBS.

Si tout s’est bien déroulé, vous devriez voir votre flux apparaître.

Conclusion

Il y a quelques étapes à réaliser, mais l’ensemble n’est pas si compliqué à mettre en place de mon point de vue. OBS étant capable de prendre à peu près n’importe quoi en entrée, rien n’empêche par exemple de diffuser une webcam, un ensemble de caméra de sécurité, des panneaux d’affichage ou un diaporama de photos ou de la publicité par exemple. OBS permet de gérer des scènes, mais aussi des transitions pour passer joliment d’une scène à l’autre. Chaque scène étant indépendante, il est possible de produire du contenu différent pour chacune.

Tout l’intérêt de ce mini-projet a été pour moi de comprendre comment mettre en place le serveur RTMP privé, et si on s’en tient à la base, cela a été très simple. Bien sûr, pour une utilisation en entreprise, ou dans le public, il faudra ajouter des couches de sécurité, mais cela dépasse le cadre de cet article.

2 Responses to “Diffuser un flux vidéo avec OBS vers un serveur RTMP privé pour diffusion sur une TV connectée”

  1. Pascal dit :

    Bonjour,
    Un grand merci pour votre partage, car je cherche depuis de long mois à paramétrer un serveur RTMP et je pense enfin pouvoir y arriver avec votre aide.
    Malheureusement mes compétence en linux sont à 0 …
    J’ai tout de même réussi à installer ubuntu sur une machine, avec obs et paramétrer la diffusion live vers youtube. J’y arrive !!!
    Mais je n’arrives toujours pas à paramétrer nginx …
    L’idée première serait de pouvoir streamer sur obs puis youtube le flux de mon drone DJI 😉
    Merci pour votre aide !!!
    Pascal

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *