Comment transmettre un flux video h264 depuis un raspberry pi équipé de son module caméra vers un serveur crtmpserver.

Activer le module caméra

Pour être sûr d’avoir la dernière version du système une mise à jour est conseillée :

sudo apt-get update
sudo apt-get upgrade

Le module peut être activer par la commande raspi-config en choisissant enable pour l’option caméra.

sudo raspi-config

la commande raspivid

La commande raspivid est utilisée pour la capture vidéo depuis le module camera du Raspberry Pi. La liste des paramètres est disponible avec un classique raspivid --help

-?,   --help        : This help information
-w,   --width       : Set image width <size>. Default 1920
-h,   --height      : Set image height <size>. Default 1080
-b,   --bitrate     : Set bitrate. Use bits per second
                      (e.g. 10MBits/s would be -b 10000000)
-o,   --output      : Output filename <filename>
-v,   --verbose     : Output verbose information during run
-t,   --timeout     : Duration of video (in ms)
-d,   --demo        : Demo mode(cycle through range of camera
                      options, no capture)
-fps, --framerate   : Specify the frames per second to record
-e,   --penc        : Display preview image *after* encoding
                      (shows compression artifacts)
-p, --preview       : Preview window settings <'x,y,w,h'>
-f, --fullscreen    : Fullscreen preview mode
-n, --nopreview     : Do not display a preview window
-sh, --sharpness    : Set image sharpness (-100 to 100)
-co, --contrast     : Set image contrast (-100 to 100)
-br, --brightness   : Set image brightness (0 to 100)
-sa, --saturation   : Set image saturation (-100 to 100)
-ISO, --ISO         : Set capture ISO
-vs, --vstab        : Turn on video stablisation
-ev, --ev           : Set EV compensation
-ex, --exposure     : Set exposure mode (see Notes)
-awb, --awb         : Set AWB mode (see Notes)
-ifx, --imxfx       : Set image effect (see Notes)
-cfx, --colfx       : Set colour effect (U:V)
-mm, --metering     : Set metering mode (see Notes)
-rot, --rotation    : Set image rotation (0, 90, 180, 270)
-hf, --hflip        : Set horizontal flip
-vf, --vflip        : Set vertical flip

Exemple :

enregistrement dans test.h264 d’une video de 3 secondes de 640 par 400 pixels.

raspivid -o test.h264 -t 3000 -w 640 -h 400 

Installation de l’utilitaire vidéo ffmpeg

Il faut utiliser la dernière version de ffmpeg en compilant ses sources :

Pour compiler ffmpeg avec la librairie alsa il faut préalablement installer les librairies de developpement alsa :

sudo apt-get install libasound2-dev

Ensuite on peut lancer la compilation et l’installation de ffmpeg:

sudo aptitude remove ffmpeg
sudo mkdir ffmpeg
sudo chown `whoami`:users ffmpeg
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
./configure
make
sudo make install

La compilation dure plusieurs heures.

Capture et envoi du flux vidéo vers le server crtmpserver

raspivid -t 0 -w 960 -h 540 -fps 25 -b 500000 -n -o - | ffmpeg -i - -vcodec copy -an -f flv -metadata streamName=lenomduflux tcp://adresseDuServeur:6666

Capture du son et de la vidéo

raspivid -t 0 -w 960 -h 540 -fps 25 -b 500000 -n -o - | ffmpeg -i - -f alsa -ac 2 -i default:CARD=nomDeLaCarte -acodec aac -ar 48000  -vcodec copy -f flv -metadata streamName=lenomduflux tcp://adresseDuServeur:6666

Lecture d’un flux depuis un serveur crtmpserver

L’utilitaire rtmpdump permet de se connecter au serveur crtmpserver et de selectionner un flux. omxplayer est utilisé pour afficher la vidéo sur la sortie hdmi en pleine ecran.

omxplayer a du mal a lire les donnée depuis la sortie standard. Pour lié le flux recupéré par rtmpdump et le lire avec omxplayer on va utiliser un tube crée avec la command mkfifo.

installation de rtmpdump :     
sudo apt-get install rtmpdump

lecture du flux

mkfifo /tmp/mystdin
rtmpdump -r rtmp://adresseDuServeur/live/nomDuFlux --live -o /tmp/mystdin  | omxplayer --live /tmp/mystdin

Pages de références

Installation du module camera:
http://www.raspberrypi.org/documentation/usage/camera/README.md

http://www.raspberrypi.org/wp-content/uploads/2013/07/RaspiCam-Documentation.pdf

Documentation sur la commande RASPIVID:
http://www.raspberrypi.org/documentation/usage/camera/raspicam/raspivid.md

Générateur de ligne de commande pour raspicam
http://www.handsdown.be/raspicam/indexfr.html

Presentation avconv pour ubuntu
http://doc.ubuntu-fr.org/avconv

Compilation de ffmpeg
http://www.instructables.com/id/Raspberry-Pi-Birdbox-Camera/step8/Recompile-FFMPEG/

http://www.raspberrypi.org/forums/viewtopic.php?f=43&t=53936

ffmpeg et alsa

http://www.raspberrypi.org/forums/viewtopic.php?p=411628

https://trac.ffmpeg.org/wiki/Capture/ALSA

http://www.g7smy.co.uk/?p=283

Page de test pour lire le flux
https://dl.dropboxusercontent.com/u/2918563/flvplayback.swf

Tutoriaux proches
http://www.nick-horne.com/2013/08/16/raspberry-pi-stream-webcam-to-apache-server/

http://www.journaldulapin.com/2013/11/27/la-camera-du-raspberry-pi-comment-envoyer-de-la-video-vers-liphone/

http://blog.oscarliang.net/webcam-streaming-video-raspberry-pi-via-browser/

http://www.raspberrypi.org/forums/viewtopic.php?f=38&t=77683

Acheter une caméra : Raspberry pi caméra