Caster sur Youtube depuis votre RaspberryPi via Docker
Live ((o)) Broadcast
Castez le flux vidéo de votre Raspicam vers Youtube Live en utilisant une image Docker toute prête à l’emploi. Aucune compilation fastidieuse ni configuration de ffmpeg
n’est nécessaire : branchez la caméra, installez Docker et lancez votre flux en une commande
L’article original en anglais est disponible sur le site d’Alex Ellis https://blog.alexellis.io/live-stream-with-docker/. Le contenu ci-dessous est un résumé en français, mis à jour lors de mon installation.
Installer son Raspberry Pi
- J’ai utilisé un RaspberryPi 3, mais l’installation est valable sur un RPi version 1, 2 ou Zero.
- Une carte microSD de 2Gb est suffisante.
- Concernant la caméra, il s’agit d’une Raspicam standard
- Rendez-vous sur https://www.raspberrypi.org/downloads/raspbian/ pour télécharger Raspbian Stretch version Desktop (bureau graphique). Vous y trouverez également un guide d’installation selon votre environnement (Linux, OSX ou Windows). Le projet a été également testé sur Raspbian Jessie Lite et Pixel desktop.
Une fois le matériel branché, Raspbian installé et votre Raspberry Pi démarré, commencer par valider le retour de votre caméra à l’écran. Pour cela, cliquer sur l’icône du “terminal” dans la barre de raccourcis :
Puis exécuter la commande suivante dans le terminal :
$ sudo raspistill -o tester.jpg
Avant de passer à l’étape suivante, vous devez obtenir à l’écran l’image prise avec la caméra du Raspberry Pi :
Installer Docker
Toujours dans le terminal, exécutez les commandes suivantes pour installer Docker (installation, ajout du compte utilisateur “pi” au groupe Docker puis redémarrage):
$ curl -sSL https://get.docker.com | sh
$ sudo usermod pi -aG docker
$ reboot
Alex Ellis fourni son image Docker tout-en-un (approx. 500Mb) que vous pouvez à présent télécharger grâce à la commande suivante (toujours depuis un terminal) :
$ docker pull alexellis2/streaming:17-5-2017
Pendant ce temps, suivez l’étape ci-dessous afin de récupérer votre clé de diffusion Youtube 🎥
Récupérer sa clé secrète de diffusion Youtube
Rendez vous sur votre tableau de bord YouTube afin de récupérer la clé fournie en bas de page dans la zone “Stream name/key“. Elle est composée de 4 groupes de chiffres et lettres xxxx-xxxx-xxxx-xxxx
. Copiez/notez-la pour la suite.
Lancer l’application de streaming
Il est temps de démarrer votre flux temps réel sur YouTube! Grace au travail d’Alex Ellis, une simple commande suffit. Veillez seulement à remplacer la chaîne xxxx-xxxx-xxxx-xxxx
par votre propre clé de diffusion YouTube :
$ docker run --privileged --name cam -ti alexellis2/streaming:17-5-2017 xxxx-xxxx-xxxx-xxxx
Quelques remarques :
- Le flux se coupe si la connexion échoue, ou si vous appuyez sur le raccourci
Control + C
. - Afin de lancer l’application en tâche de fond, remplacez l’option
-ti
par-d
. - Si vous relancez l’application par la suite, exécutez simplement
docker start cam
. - Si vous souhaitez supprimer l’instance de votre application pour en relancer une nouvelle, arrêtez puis supprimez-là avec
docker stop cam
puisdocker rm cam
. - Afin de diffuser le flux automatiquement à chaque démarrage du RaspberryPi, ajoutez l’option
--restart=always
à votre commande Docker.
$ docker run --privileged --name cam -ti --restart=always alexellis2/streaming:17-5-2017 xxxx-xxxx-xxxx-xxxx
Pour la configuration avancée, voir la section suivante. Je n’ai pas eu besoin d’aller modifier le flux audio mais voici la traduction au cas où.
Flux audio
Youtube Live oblige à intégrer un flux audio. Dans l’image fournie par Alex Ellis, un flux audio “vide” est transmis avec la vidéo. Si vous souhaitez transmettre le son avec votre vidéo, il vous faudra reconstruire l’image Docker à partir des sources en modifiant quelques paramètres dans le fichier streaming/entry.sh
. Voici la marche à suivre.
Reconstruire l’image de zéro
Commencer par récupérer les sources depuis le dépôt Github d’Alex Ellis:
$ git clone https://github.com/alexellis/raspberrypi-youtube-streaming/
$ cd raspberrypi-youtube-streaming
$ cd streaming
Modifier ensuite le fichier entry.sh
selon vos besoins avant de passer à la construction proprement dite de l’image.
Le processus de construction de l’image va prendre plusieurs heures sur un Raspberry Pi Zero, mais si vous disposez d’un Pi 2 ou 3 vous pouvez tirer avantage du processeur multi-cœur: éditer le fichier streaming/Dockerfile
en modifiant la ligne RUN make
en RUN make -j 4
.
Passez ensuite à la construction de l’image :
$ docker build -t alexellis2/streaming .
Modifier des paramètres
Une autre méthode plus rapide consiste à simplement modifier le fichier entry.sh
et de l’utiliser dans votre propre image, par dessus celle d’Alex Ellis. Ainsi, la construction ne partira pas de zéro et votre nouvelle image sera disponible en quelques secondes.
Pour cela, créer un nouveau dossier contenant 2 fichiers. Le premier sera le fichier Dockerfile
avec le contenu suivant:
FROM alexellis2/streaming:17-5-2017
COPY entry.sh entry.sh
Le second sera le fichier entry.sh
que vous pouvez récupérer des sources du dépôt Github d’Alex Ellis :
#!/bin/bash
echo Live-stream secret: $1
raspivid -o - -t 0 -w 1920 -h 1080 -fps 40 -b 8000000 -g 40 | ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h264 -i pipe:0 -c:v copy -c:a aac -ab 128k -g 40 -strict experimental -f flv -r 30 rtmp://a.rtmp.youtube.com/live2/$1
Modifiez-le à votre guise et vous pouvez à présent construire votre propre image depuis ce nouveau dossier :
$ docker build -t mon-image .
…et la lancer l'application Docker :
$ docker run --privileged --name cam2 -ti monimage xxxx-xxxx-xxxx-xxxx
Accéder à la console bash
Vous pouvez vous connecter à la console bash du conteneur en modifiant le point d’entrée entrypoint comme ceci:
$ docker run --entrypoint=/bin/bash --privileged --name cam -ti alexellis2/streaming:17-5-2017
Bon live!