Flux TaBec

De Centre de Ressources Numériques - Labomedia
Révision de 28 juillet 2015 à 13:23 par Olivier (discussion | contributions) (Soft)

(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

FLux TaBec est une solution de streaming développé pour un bar parigot.

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.

http://xxxx.xxxx.xx.x

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.