Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
freebsd:fbsd_stream_video [2006/04/18 13:59]
hotbox created
freebsd:fbsd_stream_video [2010/01/12 13:29] (current)
Line 1: Line 1:
 +
 +====== Streaming video sous FreeBSD [HOWTO]======
 +
 +FIXME (à compléter)
 +
 +===== Intro =====
 +
 +Suite à [[http://​beta.gcu.info/​2026/​2006/​04/​14/​coupe-ton-saucisson-devant-ta-ternetcam/​|cette]] news, je me suis dit que ca serait sympa de //​streamer//​ le flux de ma webcam sur le net (quelle originalité! j'en suis ému).
 +
 +N'​ayant jamais streamé de flux vidéo, je me suis dit que cette expérience pouvait intéresser des lutins qui s'​acharnent en ce moment sur la VoIP.
 +
 +Voici le plan d'​action :                                                                                                         
 +
 +<​code>​
 +FLUX VIDEO => mencoder => fmpeg2theora => ezstream => icecast2 => DIFFUSION ​         ​
 +</​code>​
 +
 +La différence a l'air moindre mais elle est majeure : le flux initial brut (exemple
 +avec une webcam) est **compressé** en temps réel ce qui autorise une sortie vidéo potable avec un débit moindre (ie. streamer sur internet).
 +
 +Bref, vous l'​aurez compris, si vous cherchez à lire votre divx favori dans votre lit ou jardin, ce n'est **pas** ici qu'il faut aller, mais plutôt [[http://​wiki.gcu.info/​doku.php?​id=unix:​streaming_tv_avec_vlc|là]] ou encore [[http://​wiki.gcu.info/​doku.php?​id=freebsd:​nfs_highlatency|là]]. En fin de compte sur des medias plus adaptés en bande passante (Ethernet, Wireless, whatever), le but ici étant de restreindre le flux sur une bande passante d'​upload minime.
 +
 +Hélas, il vous faudra une configuration assez musclée pour traiter le signal en temps réel.
 +Du côté client, un soft gérant le cache sera __très__ apprécié.
 +
 +===== Plan =====
 +
 +        1. Prérequis
 +        2. Paramétrage IceCast2
 +        3. Paramétrage ffmpeg2theora
 +        4. Paramétrage ezstream
 +        5. Tests
 +
 +===== 1. Prérequis =====
 +
 +Un OS du bien est nécessaire.. la configuration de test est un Duron 1300Mhz / 256MB RAM sous FreeBSD 6.0R.
 +Adaptez le tip selon votre OS (et faites nous part des remarques).
 +
 +L'​exemple utilise une webcam (Logitech QuickCam Pro 4000 USB) comme source vidéo. Mais il est bien plus simple d'​utiliser un fichier MPEG par exemple.
 +
 +===== 2. Paramétrage IceCast2 =====
 +
 +[[http://​www.icecast.org/​|IceCast2]] est un serveur de streaming multimédia. Il est particulièrement efficace avec du flux ogg / theora Vorbis, ce qui a captivé tout mon intéret.
 +L'​utilisation de Theora en tant que codec est motivée par :
 +  * Codec libre !
 +  * Adapté pour le streaming MPEG4
 +
 +Un petit tour dans les ports nous permet de nous mettre en jambes :
 +
 +<​code>​
 +cd /​usr/​ports/​audio/​icecast2
 +make install clean
 +</​code>​
 +
 +Créons un répertoire où mettre tout notre fourbis :
 +
 +<​code>​
 +$mkdir ~/streaming
 +cp /​usr/​local/​share/​icecast/​doc/​icecast_minimal.xml.dist ~/​streaming/​icecast.xml
 +</​code>​
 +
 +N'​oubliez pas de changer les passwords par défaut.
 +
 +
 +===== 3. Paramétrage ffmpeg2theora =====
 +
 +[[http://​www.v2v.cc/​~j/​ffmpeg2theora/​|ffmpeg2theora]] va nous permettre d'​encoder un flux (celui de la webcam en l'​occurence) en theora vorbis.
 +Le problème est qu'il n'est pas dans les ports, et qu'il va falloir le patcher légèrement pour le faire fonctionner correctement.
 +
 +ffmpeg2theora a besoin d'un ffmpeg récent, allons donc le chercher :
 +
 +<​code>​
 +cd /​usr/​ports/​multimedia/​ffmpeg-devel/​
 +make -DWITH_OPTIMIZED_CFLAGS install clean
 +</​code>​
 +
 +Passons maintenant à ffmpeg2theora :
 +
 +<​code>​
 +cd ~/streaming
 +fetch http://​www.v2v.cc/​~j/​ffmpeg2theora/​ffmpeg2theora-0.16.tar.bz2
 +tar xvzf ffmpeg2theora-0.16.tar.bz2
 +cd ffmpeg2theora-0.16
 +</​code>​
 +
 +Il va nous falloir appliquer ces deux petits diff que j'ai préparé pour vous :
 +
 +<​code>​
 +--- ffmpeg2theora-0.16/​configure ​       Mon Feb  6 23:44:37 2006
 ++++ ffmpeg2theora-0.16.patched/​configure ​       Thu Apr 13 17:15:16 2006
 +@@ -18867,6 +18867,7 @@
 +   echo "​$as_me:​$LINENO:​ \$? = $ac_status"​ >&5
 +   (exit $ac_status);​ }; then
 +   ​pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "​libavformat libavcodec"​ 2>/​dev/​null`
 ++  pkg_cv_FFMPEG_LIBS+="​-lpthread"​
 + else
 +   ​pkg_failed=yes
 + fi
 +</​code>​
 +
 +<​code>​
 +--- ffmpeg2theora-0.16/​ffmpeg2theora.c ​ Sat Feb 11 15:13:31 2006
 ++++ ffmpeg2theora-0.16.patched/​ffmpeg2theora.c ​ Thu Apr 13 15:49:37 2006
 +@@ -38,7 +38,7 @@
 +
 + #​include "​theorautils.h"​
 +
 +-#ifdef __linux__
 ++#ifdef __FreeBSD__
 +   #​define VIDEO4LINUX_ENABLED
 + #​endif
 +</​code>​
 +
 +Le dernier n'est pas vraiment nécessaire,​ sauf si vous avez une carte d'​acquisition. Dans ce cas, adaptez le diff selon votre OS.
 +
 +S'​ensuit un grand classique :
 +
 +<​code>​
 +#​./​configure && gmake && gmake install
 +</​code>​
 +
 +===== 4. Paramétrage ezstream =====
 +
 +Ezstream va nous permettre d'​envoyer le flux streamé sur un serveur Icecast. Il permet d'​invoquer,​ par exemple, ffmpeg2theora par rapport à un flux.
 +
 +<​code>​
 +cd /​usr/​ports/​audio/​ezstream
 +make install clean
 +cp /​usr/​local/​share/​doc/​ezstream/​ezstream_reencoding_example_vorbis.xml ~/​streaming/​ezstream-files.xml
 +</​code>​
 +
 +Dans le cas où vous souhaitez utiliser une webcam, l'​entrée stdin de ezstream sera plus appropriée : modifiez le ezstream-files comme suit :
 +
 +<​code>​
 +cd ~/streaming
 +cp ezstream-files.xml ezstream-stdin.xml
 +</​code>​
 +
 +<​code>​
 +--- ezstream-files.xml ​ Tue Apr 18 15:24:56 2006
 ++++ ezstream-stdin.xml ​ Tue Apr 18 15:33:40 2006
 +@@ -5,8 +5,8 @@
 +          reencoding, this is the format to reencode to, if not
 +          then you need to make sure all your input files are in this
 +          format. ​ -->
 +-    <​format>​VORBIS</​format>​
 +-    <​filename>​tracks.m3u</​filename>​
 ++    <​format>​THEORA</​format>​
 ++    <​filename>​stdin</​filename>​
 +     <​!-- The following settings are used to describe your stream
 +          to the server. ​ It's up to you to make sure the
 +          bitrate/​quality/​samplerate/​channels
 +
 +Puis supprimez toute la balise <​reencode>​ de manière recursive
 +</​code>​
 +
 +N'​oubliez pas de modifier les mots de passe d'​accès au serveur Icecast
 +
 +===== 5. Tests =====
 +
 +D'​abord,​ démarrer le serveur icecast :
 +
 +<​code>​
 +icecast -c ~/​streaming/​icecast.xml
 +</​code>​
 +
 +Après m'​être arraché les cheveux pour récupérer le signal de ma webcam, voici **la** ligne salvatrice :
 +
 +<​code>​
 +mencoder -quiet -nosound -ovc lavc -lavcopts vcodec=mpeg2video -demuxer 26 -rawvideo on:​fps=30:​w=320:​h=240:​i420 /dev/video0 -o /dev/stdout | ffmpeg2theora -v 3 --nosound -x 160 -y 120 --inputfps 30 -o /dev/stdout - 2>/​dev/​null | ezstream -c ezstream-stdin.xml
 +</​code>​
 +OUF !!
 +
 +Je vous conseille de régler auparavant votre cam et de regarder la sortie de ffmpeg2theora.. vous pourrez jouer avec la résolution et le bitrate pour obtenir un flux sympa.
 +
 +Lors de mes tests j'ai pu observer qu'un flux de 2KBps en upload était possible avec une qualité pas si moche !
  
freebsd/fbsd_stream_video.txt · Last modified: 2010/01/12 13:29 (external edit)