Flumotion, le streaming libre

Date: 12/06/2008 | Catégories: Open-source | Tags: ,

Flumotion est un serveur de streaming vidéo et audio libre sous licence GPL. Il a comme principal avantage par rapport à la concurrence d'utiliser le gstreamer, ce qui lui permet d'être multiformats (Ogg, Vorbis, Thetra, MP3 mais aussi Windows Media Player ou Flash). On peut voir une démonstration des capacité de Flumotion sur leur site de démonstration.

On peut "streamer" (diffuser sur le réseau) depuis une source qui peut être une webcam, une caméra vidéo ou Firewire (LIVE) ou bien un fichier (VOD).

Dans ce billet, nous allons détailler l'installation et configurer Flumotion sur un OS GNU/Linux (Ubuntu dans mon cas).

Installation de Flumotion sous Ubuntu

Le développement de ce serveur est fait en Python. Il faut donc, préhalablement à la compilation installer les packages suivants:

sudo apt-get install python-dev
sudo apt-get install python-kiwi
sudo apt-get install python-gtk2
sudo apt-get install python-gtk2-dev
sudo apt-get install python-twisted
sudo apt-get install python-imaging

Ensuite on passe "à la classique" phase de compilation de Flumotion (la compilation se fait à partir de la version 0.5.2 de Flumotion, je vous laisse voir si il n'y a pas une nouvelle version):

cd /usr/src
sudo wget http://www.flumotion.net/src/flumotion/flumotion-0.5.2.tar.bz2
sudo bzip2 -d flumotion-0.5.2.tar.bz2
sudo tar xvf flumotion-0.5.2.tar
./configure
make
sudo make install

Si vous avez des problèmes de compilation de Flumotion, je vous coseille de jeter un coups d'oeil à la mailing list.

Premier lancement de Flumotion

Nous allons d'abord créer un répertoire ou nous stockerons l'ensemble des fichiers de configuration:

sudo mkdir /usr/local/flumotion
cd /usr/local/flumotion
sudo cp /usr/src/flumotion-0.5.2/conf/managers/default/planet.xml manager.xml

Le fichier par défaut définie un serveur nommé "planet" avec un couple login/password: "user/test".

Si vous vouler changer le login/password par défaut, il faut utiliser la ligne de commande suivante pour générer ce couple:

htpasswd -c /tmp/pw.tmp user
New password:
Re-type new password:
Adding password for user user

cat /tmp/pw.tmp
user:oIil5E5qnB4bM

rm /tmp/pw.tmp

sudo vi /usr/local/flumotion/manager.xml
Remplacer la ligne:
user:PSfNpHTkpTx1M
par:
user:oIil5E5qnB4bM

La première chose à faire est de lancer le Manager avec les commandes suivantes:

flumotion-manager -T tcp -d 3 /usr/local/flumotion/manager.xml

PS: le mode SSL (-T ssl, mode par défaut) ne marche pas sur ma configuration Ubuntu, je rencontre l'erreur flumotion.common.errors.NoSSLError...

On lance ensuite le Worker:

flumotion-worker -T tcp -d 3 -u user -p test

Et enfin (qui a dit ouf ?) l'interface d'administration:

flumotion-admin

Il faut alors sélectionner les options suivantes dans l'assistant qui va s'afficher:

  • Connexion à un contremaître actif
  • Localhost / Port 8642 (sans SSL)
  • Username: user
  • Password: test

Au prochain démarrage de flumotion-admin, il suffira de sélectionner ce contremaître prédéfini.

Pour faire un premier test de streaming, vous pouvez suivre le deuxième assistant (cliquez ici si vous voulez voir les screenshots correspondants):

Video: Test video source (c'est en fait une mire)
Audio: Test audio source (c'est un bip...)

Les caractéristiques de la vidéo (résolution, fps...)

Les textes et/ou images à incruster dans la vidéo (overlay)

Les caractéristiques de l'audio (fréquence, volume...)

Les codecs (conteneur, vidéo et audio): Ogg/theora/vorbis

Le débit des codecs video (Theora) et audio (vorbis)

et enfin le protocole réseau (HTTP) avec notamment le port (8800) et le point de montage (/)

Ensuite il suffit d'ouvrir un navigateur Web et de saisir l'adresse: http://localhost:8800/ (ou http://adresseipduserveur/) pour voir apparaître la mire. J'ai testé positivement depuis Firefox, Safari... par contre je n'ai pas essayé depuis IE.

Si c'est le cas c'est que votre installation marche !

Automatiser le lancement de Flumotion au démarrage de l'OS

Flumotion n'est pas livré avec un script de démarrage (rc), en voici donc un basique à mettre dans votre répertoire /etc/init.d avec les droits d'accès qui vont bien:

#! /bin/sh -e
#
# Start the Flumotion Manager and Worker
#
# Author: Nicolas Hennion <nicolas-pasdespam-@nicolargo.com>
#
# Distributed under GPL licence
#
set -e

PATH=/bin:/usr/bin:/sbin:/usr/sbin

MANAGER=/usr/local/bin/flumotion-manager
MANAGEROPT="-T tcp /usr/local/flumotion/manager.xml"
MANAGERLOG=/var/log/flumotion-manager

WORKER=/usr/local/bin/flumotion-worker
WORKEROPT="-T tcp -u user -p test"
WORKERLOG=/var/log/flumotion-worker

test -x $MANAGER || exit 0
test -x $WORKER || exit 0

. /lib/lsb/init-functions

case "$1" in
start)
log_daemon_msg "Starting Flumotion Manager" "flumotion-manager"
start_daemon $MANAGER $MANAGEROPT > $MANAGERLOG &
log_end_msg $?
log_daemon_msg "Starting Flumotion Worker" "flumotion-worker"
start_daemon $WORKER $WORKEROPT > $WORKERLOG &
log_end_msg $?
;;
stop)
WORKERPID=`echo $(ps ax | grep "flumotion-worker" | awk '{ print $1 }' | head -n 1)`
log_daemon_msg "Stopping Flumotion Worker" "flumotion-worker"
kill $WORKERPID
log_end_msg $?
MANAGERPID=`echo $(ps ax | grep "flumotion-manager" | awk '{ print $1 }' | head -n 1)`
log_daemon_msg "Stopping Flumotion Manager" "flumotion-manager"
kill $MANAGERPID
log_end_msg $?
;;
force-reload|restart)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/flumotion {start|stop|restart|force-reload}"
exit 1
;;
esac

exit 0

La VOD...

La VOD (Video à la demande), est également disponible en standard dans Flumotion. Vous pouvez trouver un exemple dans le fichier /usr/src/flumotion-0.5.2/conf/examples/ondemand.xml que l'on peut charger à partir de flumotion-admin. Ce fichier de configuration permet de partager les fichiers vidéos/audios se trouvant dans le répertoire /tmp (format .ogg).

Par exemple: http://localhost:8800/monfichier.ogg

J'ai fait des tests avec des gros fichiers HDTV (sur réseau local)... et cela marche nickel !

Et ensuite, le live...

J'ai testé le serveur avec ma Webcam logitech. Cette dernière est reconnue mais pas supportée par Flumotion, idem avec ma carte Osprey (connectée à une caméra anologique)...

Bref un produit prometteur, à suivre "à la culotte" dans ses prochaines versions...

Promis, un prochain billet sur la configuration avancée de la VOD...

  • http://pasdesite.org nookie

    Hello, rapide intervention :
    ouah super content, enfin un cms qui permet la diffusion de video et qui propose autre chose que ce flash si répandu. Je vais donc immédiatement sur leur site de demo, tout exité, et la biiiiim, pour lire une video en ogg/theora il vous faudra…. la jvm et un applet java installé. Je trouve ça pas top. Le fait de quitter le flash me plait mais pas pour utiliser heavy_java_chiant_à_installer. dommage…

  • Al

    bien l’intro, il manque quelques renseignements quand meme ;)
    la presence de gcc est make est souhaitable pour compilé le bousin
    pygtk n’existe pas sous ubuntu et il manque l’install de python-gst0.10

    mmmm
    sinon tu aurais pu parler de la reprise de stream par flumotion ;)
    ca le fait ;)

  • http://www.stream-fr.com Streaming

    Clair que ça parraissait super excitant d’avoir une alternative à flash … Peut etre une prochaine fois !

  • Jack Carcasse

    mais il vous suffit d’avoir un lecteur vidéo pour lire les vidéo, pas besoin d’avoir flash ou java installé hein.

    Un simple mplayer adresse_du_flux suffit, et c’est justement ça qui est cool, l’utilisateur visionne la vidéo avec ce qu’il veut, pas forcé d’installer flash et de se faire chier avec un navigateur web (une vidéo se visionne dans… un lecteur vidéo (si si j’vous jure, incroyable hein ?)).

  • Storm

    Salut,

    Il existe maintenant un paquet pour Debian et Ubuntu, il suffit de suivre les instructions de cette page : http://www.flumotion.net/download/

  • Hugo

    Comment faire pour l’interface d’administration sans serveur X ?

  • Maurad

    Bonjour, j’essaye d’installer ce serveur dans ma distribution Ubuntu Server mais lorsque je tap la commande :
    flumotion-manager -T tcp -d 3 /usr/local/flumotion/manager.xml

    j’ai le message suivant et rien ne se passe.

    Traceback (most recent call last):
    File “/usr/local/bin/flumotion-manager”, line 45, in
    boot.boot(PROGRAM_PATH, gst=False, gtk=False, installReactor=False)
    File “/usr/local/lib/flumotion/python/flumotion/common/boot.py”, line 254, in boot
    main = reflect.namedAny(path)
    File “/usr/local/lib/flumotion/python/flumotion/twisted/reflect.py”, line 54, in namedAny
    topLevelPackage = __import__(trialname)
    File “/usr/lib/python2.6/ihooks.py”, line 407, in import_module
    m = self.load_tail(q, tail)
    File “/usr/lib/python2.6/ihooks.py”, line 458, in load_tail
    m = self.import_it(head, mname, m)
    File “/usr/lib/python2.6/ihooks.py”, line 497, in import_it
    m = self.loader.load_module(fqname, stuff)
    File “/usr/lib/python2.6/ihooks.py”, line 272, in load_module
    m = self.hooks.load_source(name, filename, file)
    File “/usr/lib/python2.6/ihooks.py”, line 170, in load_source
    return imp.load_source(name, filename, file)
    File “/usr/local/lib/flumotion/python/flumotion/manager/main.py”, line 31, in
    from flumotion.manager import manager, config
    File “/usr/lib/python2.6/ihooks.py”, line 411, in import_module
    self.ensure_fromlist(m, fromlist)
    File “/usr/lib/python2.6/ihooks.py”, line 476, in ensure_fromlist
    submod = self.import_it(sub, subname, m)
    File “/usr/lib/python2.6/ihooks.py”, line 497, in import_it
    m = self.loader.load_module(fqname, stuff)
    File “/usr/lib/python2.6/ihooks.py”, line 272, in load_module
    m = self.hooks.load_source(name, filename, file)
    File “/usr/lib/python2.6/ihooks.py”, line 170, in load_source
    return imp.load_source(name, filename, file)
    File “/usr/local/lib/flumotion/python/flumotion/manager/manager.py”, line 41, in
    from flumotion.common import errors, interfaces, log, registry
    File “/usr/lib/python2.6/ihooks.py”, line 411, in import_module
    self.ensure_fromlist(m, fromlist)
    File “/usr/lib/python2.6/ihooks.py”, line 476, in ensure_fromlist
    submod = self.import_it(sub, subname, m)
    File “/usr/lib/python2.6/ihooks.py”, line 497, in import_it
    m = self.loader.load_module(fqname, stuff)
    File “/usr/lib/python2.6/ihooks.py”, line 272, in load_module
    m = self.hooks.load_source(name, filename, file)
    File “/usr/lib/python2.6/ihooks.py”, line 170, in load_source
    return imp.load_source(name, filename, file)
    File “/usr/local/lib/flumotion/python/flumotion/common/registry.py”, line 37, in
    from flumotion.common.bundle import BundlerBasket, MergedBundler
    File “/usr/lib/python2.6/ihooks.py”, line 407, in import_module
    m = self.load_tail(q, tail)
    File “/usr/lib/python2.6/ihooks.py”, line 458, in load_tail
    m = self.import_it(head, mname, m)
    File “/usr/lib/python2.6/ihooks.py”, line 497, in import_it
    m = self.loader.load_module(fqname, stuff)
    File “/usr/lib/python2.6/ihooks.py”, line 272, in load_module
    m = self.hooks.load_source(name, filename, file)
    File “/usr/lib/python2.6/ihooks.py”, line 170, in load_source
    return imp.load_source(name, filename, file)
    File “/usr/local/lib/flumotion/python/flumotion/common/bundle.py”, line 28, in
    import md5
    File “/usr/lib/python2.6/ihooks.py”, line 406, in import_module
    q, tail = self.find_head_package(parent, str(name))
    File “/usr/lib/python2.6/ihooks.py”, line 447, in find_head_package
    q = self.import_it(head, qname, parent)
    File “/usr/lib/python2.6/ihooks.py”, line 497, in import_it
    m = self.loader.load_module(fqname, stuff)
    File “/usr/lib/python2.6/ihooks.py”, line 272, in load_module
    m = self.hooks.load_source(name, filename, file)
    File “/usr/lib/python2.6/ihooks.py”, line 170, in load_source
    return imp.load_source(name, filename, file)
    File “/usr/lib/python2.6/md5.py”, line 8, in
    DeprecationWarning, 2)
    TypeError: import_module() takes at most 5 arguments (6 given)

    Pourriez-vous m’aider. Merci

  • Smile

    Flumotion, ça supporte ni RTSP ni RTP, n’est ce pas, alors comment peut-on utiliser ces rotocoles une fois on aura besoin, est ce qu’il ya des commandes à ajouter ??