Faire du multi streaming sur Twitch, Dailymotion, Youtube & Hitbox

À la demande de mon frère qui souhaite lui aussi se mettre à streamer ses jeux favoris sur Internet, j'ai mis en place un système qui permet de diffuser sur toutes les platformes de votre choix votre live. «Nan mais Antho, c'est quelle plateforme qu'est la mieux ?» Perso, moi j'en sais rien donc pour remédier au problème : «Ne choisit pas, fait les toutes ! ». Je vais vous montrer comment streamer sur toutes les plateformes en capturant qu'une seule fois.

Prérequis

  • Un serveur distant avec une bonne connexion Internet
  • Un minimum de connaissances en système Unix
  • Docker
  • Un logiciel de capture video : SplitBroadcaster, OBS, etc ...

Mon environnement pour le tutoriel

  • Un serveur distant : Ok ! Debian 8 - kimsufi (OVH) entrée de gamme
  • Docker 1.8.1 & Docker-Compose 1.3.1
  • OBS (Opensource Broadcasting Software)

Installation

Étape 1 - Docker

Je vais faire simple car ce n'est pas le sujet de l'article.


# Debian 8
# Installation de git, curl & pip (pour docker compose)
apt-get install git curl python-pip
# Installation de docker
curl -sSL https://get.docker.com/ | sh
# Installation de docker-compose
pip install -U docker-compose

Étape 2 - anthonykgross/docker-broadcaster

Pour streamer sur toutes les plateformes, je vous invite à télécharger l'image Docker.


# Debian 8
git clone https://github.com/anthonykgross/docker-broadcaster.git
cd docker-broadcaster/
# On rend executable le script de génération de l'image.
chmod +x create-image.sh
# Et on génére l'image
./create-image.sh

Explications

Pour ce qui est de l'étape 1, nous avons seulement installer des outils utiles pour l'installation de Docker et la seconde étape, c'est la récupération de l'image anthonykgross/docker-broadcaster que nous aurons besoin. Bien entendu, il n'est pas «nécéssaire» de récupérer l'image via Github car celle-ci est disponible sur le Docker Hub mais je préfère, pour les néophytes, que vous en ayez trop que pas assez.

En effet, dans le répertoire docker-broadcaster, vous avez un fichier docker-compose.yml qui est très important. Si vous l'ouvrez avec un éditeur de texte, vous verrez que celui-ci possède déjà toutes les configurations possibles de notre image.

Configuration

Pour cette étape, je vous invite à vous inscrire à toutes les plateformes en question. Bien entendu, vous n'êtes pas obligé de streamer sur TOUTES. Choisissez celles qui vous plaisent.

Dans mon cas, les plateformes m'ont donné :
  • Youtube => RTMP URL : "rtmp://a.rtmp.youtube.com/live2" ; Clé : "poopaplla-7537.ea0k-ef3-czsz"
  • Hitbox => RTMP URL : "rtmp://live.hitbox.tv/push" ; Clé : "qsfqf?key=Jn6Dsqdqsd8cpx"
  • Twitch => RTMP URL : "rtmp://live-cdg.twitch.tv/app" ; Clé : "live_101724967_qLZMlwnxxpKqsqsfJ5lNcBcP0RYtpw"
  • Dailymotion => RTMP URL : "rtmp://publish.dailymotion.com/publish-dm" ; Clé : "24646?auth=qeGP_9fb42e109944fa5b504e191"

L'originale

# docker-compose.yml
broadcaster:
  image: anthonykgross/docker-broadcaster
#  environment:
#    YOUTUBE_URL: rtmp://a.rtmp.youtube.com/live2
#    YOUTUBE_STREAMKEY: "NULL"
#    TWITCH_URL: rtmp://live-cdg.twitch.tv/app
#    TWITCH_STREAMKEY: "NULL"
#    HITBOX_URL: rtmp://live.hitbox.tv/push
#    HITBOX_STREAMKEY: "NULL"
#    DAILYMOTION_URL: rtmp://publish.dailymotion.com/publish-dm
#    DAILYMOTION_STREAMKEY: "NULL"
#    YOUR_IP: YOUR_IP
#    PRIVATE_KEY: anthonykgross
#    EXPIRATION_TOKEN: 3600
#    STREAM_SPECIFIER: hd720
#    URL_TRANSCODE: transcode
#    URL_LIVE: live
  ports:
    - 8080:8080
    - 1935:1935
  volumes:
    - ./log:/log
Ce que nous voulons !

# docker-compose.yml
broadcaster:
  image: anthonykgross/docker-broadcaster
  environment:
    YOUTUBE_URL: rtmp://a.rtmp.youtube.com/live2
    YOUTUBE_STREAMKEY: "poopaplla-7537.ea0k-ef3-czsz"
    TWITCH_URL: rtmp://live-cdg.twitch.tv/app
    TWITCH_STREAMKEY: "live_101724967_qLZMlwnxxpKqsqsfJ5lNcBcP0RYtpw"
    HITBOX_URL: rtmp://live.hitbox.tv/push
    HITBOX_STREAMKEY: "qsfqf?key=Jn6Dsqdqsd8cpx"
    DAILYMOTION_URL: rtmp://publish.dailymotion.com/publish-dm
    DAILYMOTION_STREAMKEY: "24646?auth=qeGP_9fb42e109944fa5b504e191"
    YOUR_IP: 213.251.184.131
    PRIVATE_KEY: R5Gjtc2BPU38DngL
    EXPIRATION_TOKEN: 36036000 #1an
#    STREAM_SPECIFIER: hd720
#    URL_TRANSCODE: transcode
#    URL_LIVE: live
  ports:
    - 8080:8080
    - 1935:1935
  volumes:
    - ./log:/log

«Mais à quoi peuvent servir les autres paramêtres ? (YOUR_IP, PRIVATE_KEY & EXPIRATION_TOKEN) » - Déjà, pour YOUR_IP : Mettez la votre, pas la mienne ! Vous n'êtes pas obligé de la renseigner mais pour la suite ça pourrait être utile.
PRIVATE_KEY est un paramêtre qui vous servira à sécuriser votre serveur. Sinon ? Si vous ne sécuriser pas votre serveur et que quelqu'un parvient à prendre votre URl de streaming => il streamera sur tous vos comptes à votre place donc pensez bien à la changer régulièrement.
EXPIRATION_TOKEN permet de donner une validité à votre token que nous verrons plus tard. Si vous mettez 3600 (secondes) soit 1h, vous ne pourrez plus diffuser votre video après 1h de live car votre token sera périmé.

Exécution

J'arrête de vous faire languir : place au spetacle ! Pour lancer le l'image Docker :

Méthode 1 (Conseillée)


docker-compose up -d

Cette commande va lire le fichier docker-compose.yml et créer le container en conséquence avec tous les paramêtres. Bien entendu, vous pouvez éviter de passer par Compose mais vous devrez à chaque fois renseigner vos paramêtres.

Méthode 2


docker run -e "YOUTUBE_URL=rtmp://a.rtmp.youtube.com/live2" -e "YOUTUBE_STREAMKEY=poopaplla-7537.ea0k-ef3-czsz" ... anthonykgross/docker-broadcaster

Cette commande ne lira pas le fichier docker-compose.yml donc il n'ait pas nécessaire de le remplir. Vous devez lui envoyer toute votre configuration en paramêtre.

Donc si tout se passe bien, rien ne devrez se passer ! Bizarre? Non, c'est parfait !

Diffusion

Vérifions tout d'abord que votre image Docker marche correctement.


docker ps

CONTAINER ID        IMAGE                              COMMAND             CREATED             STATUS              PORTS                                            NAMES
4df494575536        anthonykgross/docker-broadcaster   "/entrypoint.sh"    21 hours ago        Up 21 hours         0.0.0.0:1935->1935/tcp, 0.0.0.0:8080->8080/tcp   dockerbroadcaster_broadcaster_1

Donc jusqu'ici tout va bien : mon container est en marche et son CONTAINER ID est 4df494575536! Nous allons chercher mes identifiants pour streamer sur ma machine grâce justement à cet ID.


docker logs 4df494575536


broadcaster_1 | ===============================================================================================
broadcaster_1 | =
broadcaster_1 | = TWITCH_STREAMKEY      : live_101724967_qLZMlwnxxpKqsqsfJ5lNcBcP0RYtpw
broadcaster_1 | = HITBOX_STREAMKEY      : qsfqf?key=Jn6Dsqdqsd8cpx
broadcaster_1 | = YOUTUBE_STREAMKEY     : poopaplla-7537.ea0k-ef3-czsz
broadcaster_1 | = DAILYMOTION_STREAMKEY : 24646?auth=qeGP_9fb42e109944fa5b504e191
broadcaster_1 | =
broadcaster_1 | = URL live            = rtmp://213.251.184.131:1935/live/
broadcaster_1 | = URL transcode       = rtmp://213.251.184.131:1935/transcode/
broadcaster_1 | = Stream Key          = stream?e=1441722597&st=wxcwxcazeee
broadcaster_1 | = Expiration token    = 09-08-2015 02:29:57 PM (in 3600 sec.)
broadcaster_1 | =
broadcaster_1 | ===============================================================================================

Le container nous affiche tous nos paramêtres afin de vérfier que ceux-ci ont bien été pris en compte.
De plus, si vous avez renseigné YOUR_IP, vous avez à votre disponibilité deux URLs: live et transcode. Pour ce qui est de transcode, c'est une version beta donc je ne vous conseille pas de l'utiliser pour l'instant. Pour ce qui est de live, c'est celle-ci qui nous intéresse ainsi que Stream Key

STRREEEEAAAMMMIIINNNGGGG !!!

Sur votre pc de maison, vous ouvrez OBS (ou XplitBroadcaster) et vous renseignez dans RTMP-URL "rtmp://YOUR_IP:1935/live/" (à remplacer par la votre hein?!).
Ensuite, dans la clé du flux, vous mettez votre ... Stream Key.
Et si tout se passe bien ... CA MARCHE ! Vous pouvez vous rendre sur tous vos profiles publiques de toutes les plateformes que vous avez choisi et vous devriez voir votre belle video.

Conclusion

Dans un premier temps, sachez que je m'excuse pour les fautes d'orthographe : j'ai du écrire rapidement cet article car j'en ai un peu trop fait la promo sur les réseaux sociaux ! Sachez néanmoins que ça m'a beaucoup appris de Docker en réalisant cette image.
Pour finir je voudrais remercier mon frangin qui, avec ses idées à la con parfois, m'a donné un bel objectif : J'te kiff' bro! Ah et ... merci à Clément Vidal pour m'avoir fait comprendre quelques subtilités de Docker et m'avoir aidé à écrire la doc en anglais (en cours de relecture).
Sur ce, j'ai garé mon panda en double file. Tchou !


  Le 9 Septembre 2015

Restez en contact

J'accepte régulièrement de nouveaux clients. C'est avec plaisir que je vous servirais.

Vous avez un projet à estimer, une demande de devis ou vous souhaitez être formé sur un domaine précis ? N'hésitez pas à me contacter et je vous répondrais avec plaisir dès que possible. Ne soyez pas timide ! Vous pouvez me rejoindre ci-après sur la plupart des réseaux sociaux si vous souhaitez me connaitre davantage.