LAN Streaming avec ffmpeg
Sommaire
ffmpeg vs libav
Compilation de ffmpeg
sans opus, sans lib265
Les binaires seront installés dans /usr/bin
Ressources:
sudo apt-get -y --force-yes install yasm autoconf automake build-essential libass-dev libfreetype6-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev libxfixes-dev libx264-dev libfdk-aac-dev libvpx-dev
cd ~/projets
mkdir ffmpeg
cd ffmpeg
mkdir ffmpeg_sources
cd ffmpeg_sources
wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
PATH="/usr/bin:$PATH" PKG_CONFIG_PATH="$HOME/projets/ffmpeg/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/projets/ffmpeg/ffmpeg_build" --pkg-config-flags="--static" --extra-cflags="-I$HOME/projets/ffmpeg/ffmpeg_build/include" --extra-ldflags="-L$HOME/projets/ffmpeg/ffmpeg_build/lib" --bindir="/usr/bin" --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab
PATH="/usr/bin:$PATH" make -j8
sudo make install
make distclean
Capture d'une partie d'écran
Capture d'une fenêtre d'un blenderplayer 800x400 dans coin inférieur gauche
ffmpeg -video_size 800x400 -framerate 25 -f x11grab -i :0.0+0,500 /home/pierre/bm.mp4
0.0 = numéro de l'écran +0,500 = décalage x, y avec origine en haut à gauche
Streaming
Ressources
- http://www.ffmpeg.org/ffmpeg-protocols.html
- http://trac.ffmpeg.org/wiki/StreamingGuide
- http://anotation.com/how-to-capture-screen-using-ffmpeg-on-linux/
Stream d'une video
UDP
ffmpeg -i bm.mp4 -f mpegts udp://127.0.0.1:8888
VLC: Ouvrir un flux réseau
udp://@127.0.0.1:8888
Multicast
ffmpeg -i bm.mp4 -f mpegts udp://224.2.2.2:8888
VLC: Ouvrir un flux réseau
udp://@224.2.2.2:8888
Stream d'une capture d'écran
flv à la place de mpegts ne marche pas !
VLC: Ouvrir un flux réseau
udp://@127.0.0.1:8888
- Latence 5s
ffmpeg -f x11grab -s 800x400 -i :0.0+0,500 -r 25 -vcodec libx264 -f mpegts udp://127.0.0.1:8888
Latence de 0.90s avec modification du cache de VLC
ffmpeg -f x11grab -r 25 -s 800x400 -i :0.0+0,500 -vcodec libx264 -tune zerolatency -f mpegts udp://127.0.0.1:8888
VLC --> Outils --> Préférences: Afficher les paramètres > Tous Lecture / Codecs En bas, Avancé, cache réseau 100 ms au lieu de 1000ms
- Le cache à 0 donne une image anormale
- -b 1200 à -b 4800k ne change rien (bitrate)
- par contre il faudrait essayer avec -b 500 à 800
- -threads 8 idem
- -r 30 idem
Stream d'une capture d'écran en Multicast
ffmpeg -f x11grab -r 25 -s 800x400 -i :0.0+0,500 -vcodec libx264 -tune zerolatency -f mpegts udp://@224.2.2.2:8888
latence idem
ffmpeg -f x11grab -r 25 -s 800x400 -i :0.0+0,500 -vcodec libx264 -tune fastdecode -tune zerolatency -f mpegts udp://@224.2.2.2:8888
je ne comprends pas le --tune de la doc du lien !
Lecture du flux sur un PC en Wifi
Latance en gros de 1s (Ne pas oublier de configuer le cache de VLC à 100ms)
Lecture du flux sur Raspberry Pi en wifi
Installer wpa_gui pour configurer le wifi sur la Pi
PLusieurs s de latence avec une capture de 200x200, cpu à 50%. La Raspberry Pi B+ ne vaut rien, changer pour framboise, orange ... Il n'y a pas d'horloge sur la Pi, ça coûte trop cher ! La mesure avec le script est fausse: compter dans votre tête !
GSTreamer
- gst-launch n'est pas installé alors que j'ai installé un grand nombre de paquets.
- pas de doc pertinente avec des exemples.
Raspberry Pi Lecture du streaming d'un jeu video
ffmpeg stream de la capture en rtp et lecture sur smartphone avec vlc
vlc sur android plante avec udp
Définition de rtp Real-time Transport Protocol