Flux TaBec
FLux TaBec est une solution de streaming développé pour un bar parigot.
Sommaire
Matériel
- Caméra IP : D-Link DCS-2210 (~190€)
- PC sous Linux.
- Carte son Focusrite Scarlett 2i|2
Soft
Pour Ubuntu 13.10, il est nécessaire d'installer ce PPA pour v4l2loopback :
sudo add-apt-repository ppa:rayanayar/v4l2loopback
Puis celui-ci pour ffmpeg :
sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
Ne pas oublier de faire un petit :
sudo apt-get update
Voici la ligne pour installer ce qui est nécessaire :
sudo apt-get install ffmpeg v4l2loopback-utils jackd x11vnc puredata gem pd-cyclone xdotool
Et en fonction de votre distribution
sudo apt-get install gnome-session-fallback nautilus-open-terminal
Pour que la création du périphérique virtuel /dev/video69 soit permanente il faut ajouter cette ligne à /etc/modules :
v4l2loopback video_nr=10,11,69
ffmpeg permet de récupérer le flux émis par la caméra IP afin d'en faire un périphérique virtuel via v4l2loopack avec cette ligne
./ffmpeg -i rtsp://10.0.0.69:1234//live1.sdp -pix_fmt yuv420p -an -r 25 -f v4l2 /dev/video69
Par contre, il est nécessaire que ffmpeg soit compilé avec la prise en charge de v4l2loopback. Nous utilisons donc un ffmpeg statique que l'on peut trouver ici. (dossier à renommer ffmpeg-static et placer dans "FluxTaBec")
Patch Puredata : Fichier:FluxTaBec.zip
Voir les éventuels problèmes d'espace de couleurs avec v4l2loopback https://github.com/umlaeute/v4l2loopback/wiki/Colorspace-Issues
Les petites nicones de téléphones verte et rouge :
/usr/share/icons/gnome/48x48/action
Config Puredata
Ajouter dans Média>Préférences>Startup...> Gem (conserver la casse)
Ajouter dans Média>Préférences>Path...> /usr/lib/pd/extra/cyclone
Au besoins...
Donner les droits d'exécution au ffmpeg-static et à 00-FluxTaBec
Envoi du stream
Pour connaitre votre débit en upload:
www.speedzilla.net
un upload de moins de 800kbs ne pourra afficher de manière fluide qu'une petite avoisinant les 426x240 pixels Pour de la diff en hd il faut soit un gros tuyau, soit attendre la fibre
par Dailymotion en hd 1280x720
Pour ce projet, nous étions contraint de passer par Dailymotion.
Les lignes qui tuent :
Uniquement pour la vidéo
ffmpeg -y -f video4linux2 -s 1280x720 -i /dev/video19 -vcodec libx264 -crf 25 -preset veryfast -s 1280x720 -an -pix_fmt yuv420p -f flv rtmp://publish.dailymotion.com/publish-dm/Identifiant?auth=PassWord
Vidéo + son
ffmpeg -f jack -i ffmpeg -y -f video4linux2 -s 1280x720 -i /dev/video19 -vcodec libx264 -crf 25 -preset veryfast -s 640x360 -strict -2 -acodec aac -ab 96000 -ar 44100 -ac 2 -pix_fmt yuv420p -f flv rtmp://publish.dailymotion.com/publish-dm/Identifiant?auth=Password
Le workflow du son est celui-ci :
Carte Son --> Jackd --> PureData (pour synchroniser le son avec les flux vidéos) --> Jack --> ffmpeg
La version de ffmpeg doit être compilée avec la prise en charge de jack, ce qui n'est pas le cas de la version static mais de la version des dépôts. Prendre donc soin d'utiliser la bonne.
Pour que ffmpeg se connecte à pd dans jack, il faut le faire à la main une fois puis enregistrer la config via la gestion de la baie de brassage (sans oublier de l'activer).
par Youtube en bas débit 426x240
Ici la ligne de commande afin d'effectuer un flux basse résolution qui conviendra à la plupart des connections internet adsl traditionnelles
ffmpeg -f jack -i ffmpeg -y -f video4linux2 -s 426x240 -i /dev/video69 -vcodec libx264 -crf 25 -s 426x240 -strict -2 -acodec aac -ab 128000 -ar 44100 -ac 2 -pix_fmt yuv420p -g 25 -vb 1k -profile:v baseline -r 30 -f flv rtmp://a.rtmp.youtube.com/live2/code-de-la-page-youtube
résolutions compatibles Youtube:
http://ytlive.blogspot.fr/2013/03/youtube-changes-live-encoder-settings.html
240p = 426x240 => 500Kbs
360p= 640x360 => 1000Kbs
480p= 854x720 => 4000Kbs
1080p= 1920x1080 => 6000 Kbs
Ajout camera ip via telephone portable appli android ipwebcam et gstreamer
Installer Ipwebcam via google play ou appstore
Sur ubuntu installer les dépendances
sudo apt-get install build-essential libgstreamer-plugins-base0.10-dev libgstreamer0.10-dev libtool autoconf mercurial gstreamer-tools git
télécharger les driver v4l2loopback pour Gstreamer
hg clone https://v4l2loopback.googlecode.com/hg/ v4l2loopback
a priori le github est plus à jour que le googlecode
git clone http://github.com/umlaeute/gst-v4l2loopback.git
compilation du driver loopback
cd v4l2loopback && make
sudo make install
test charger le module Kernel
sudo modprobe v4l2loopback
et voir les fichiers camera dans /dev/video0 ou dev/video1
Compilation et installation de Gstreamer
cd ../gst-v4l2loopback && ./autogen.sh
make && sudo make install
Connection du téléphone et Ipwebcam
Connecter le téléphone en Wifi sur le même réseau que l'ordinateur qui envoie du flux, même Box ou routeur.
régler votre taille d'image vidéo dans préférence vidéo ( désolé par de 16/9)
démarrer le serveur vidéo ( tout en bas le dernier onglet)
en bas de l'image vous verez apparaitre l'adresse ip de l'appareil.
Ajouter un périphérique camera virtuelle dans /etc/modules ici 4
v4l2loopback video_nr=0,1,4,69
ouvrir un terminal et entrer cette ligne pour enregistrer votre téléphone sur le réseau en camera virtuelle
gst-launch souphttpsrc location=http://XXX.XXXX.X.X:8080/video ! jpegdec ! ffmpegcolorspace ! v4l2loopback device=/dev/video4
adapter le numéro dev/videoX en fonction de votre config bien sur
Si le terminal crache:
Setting pipeline to PAUSED ... Pipeline is PREROLLING ... Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: GstSystemClock
pour arréter ctrl+c
Vous avez gagné !!!
vous pouvez récupérer en direct l'image de votre téléphone comme une caméra virtuelle
Ajout d'un flux vidéo provenant d'une raspicam
Contrôle de l'interface en VNC
Partie serveur
Afin de contrôler à distance la session graphique :0 du serveur et d'avoir ainsi accès à l'interface, nous passons par x11vnc
sudo apt-get install x11vnc
On détermine un mot de passe :
x11vnc -storepasswd
Et on ajoute dans les "Applications au démarrage" :
x11vnc -rfbauth .vnc/passwd -forever -display :0
Pour info, quand le serveur est lancé sans écran, la session par défaut est en 1024x768. L'interface a donc été adaptée en conséquence plutôt que de modifier le Xorg.
Partie client
Sur Linux
On passe par xtightvncviewer pour ouvrir la session graphique distante
sudo apt-get install xtightvncviewer
Que l'on lance avec cette simple ligne :
xtightvncviewer IP.de.la.machine
Sur Mac
Il y a un client VNC intégré par défaut à Safari. Il suffit donc juste d'ouvrir ce chemin :
vnc://IP.de.la.machine
Et de renseigner le mot de passe.