VideoLAN

VideoLAN est une solution complète de streaming vidéo développée par les étudiants de l'Ecole Centrale de Paris.

VideoLAN inclut:

- un serveur VLS qui permet de diffuser en streaming des fichiers au formats MPEG-1, MPEG-2 et MPEG-4, des DVD, des chaines satellites numériques, des chaines numériques terrestres et des vidéos live sur des réseaux en unicast ou multicast.
- un client VLC qui peut être utilisé comme serveur pour diffuser en streaming des fichiers au formats MPEG-1, MPEG-2 et MPEG-4, des DVD et des vidéos live sur des réseaux en unicast ou multicast; ou comme client pour recevoir, décoder et afficher le streaming MPEG sur différents systèmes d'exploitation.

Je n'ai fait usage de VLS et VLC que de la façon suivante: VLS serveur et VLC client, mais VLC semble pouvoir faire bien plus.

Je me suis servi des guides PDF vls-user-guide-en.pdf et vlc-user-guide-en.pdf disponibles sur le site, pour expérimenter.
Voir la rubrique Liens.


Installation du serveur VLS:

Le serveur VLS...

J'ai contrôlé la présence sur mon système d'une partie des dépendances:

[steph@DeepGlue steph]$ rpm -qa | grep libdv
libdvdread2-0.9.3-4mdk
libdv2-0.98-4mdk
libdvdcss2-1.2.6-1plf
[steph@DeepGlue steph]$

J'ai bien les libdvdcss et libdvdread mentionnés dans vls-user-guide-en.pdf
Il manque: libdvbpsi et libdvb.

Je les ai récupérés sur le site de VideoLAN.


J'ai désarchivé puis "configuré" libdvbpsi-0.1.2.tar.gz:

[steph@DeepGlue videolan]$ tar -xvzf libdvbpsi-0.1.2.tar.gz
...
[steph@DeepGlue videolan]$ cd libdvbpsi-0.1.2
[steph@DeepGlue libdvbpsi-0.1.2]$ su
Password:
[root@DeepGlue libdvbpsi-0.1.2]# ./configure --enable-shared
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
...
config.status: executing depfiles commands

libdvbpsi configuration
-----------------------
libdvbpsi version     : 0.1.2
debug                : false
release              : false

[root@DeepGlue libdvbpsi-0.1.2]#

Voir ici le listing complet du "./configure --enable-shared".


J'ai ensuite compilé la bibliothèque:

[root@DeepGlue libdvbpsi-0.1.2]# make
make  all-recursive

Making all in src
...
make[2]: Rien à faire pour « all-am ».make[1]: Entering directory `/home/steph/2003_06_20/videolan/libdvbpsi-0.1.2'
make[2]: Leaving directory `/home/steph/2003_06_20/videolan/libdvbpsi-0.1.2'
make[1]: Leaving directory `/home/steph/2003_06_20/videolan/libdvbpsi-0.1.2'
[root@DeepGlue libdvbpsi-0.1.2]#

Voir ici le listing complet du "make".


Et enfin, j'ai procédé à l'installation (en fait seule cette partie doit nécessiter d'être root):

[root@DeepGlue libdvbpsi-0.1.2]# make install
Making install in src
make[1]: Entering directory `/home/steph/2003_06_20/videolan/libdvbpsi-0.1.2/src'
make[2]: Entering directory `/home/steph/2003_06_20/videolan/libdvbpsi-0.1.2/src'
/bin/sh ../mkinstalldirs /usr/local/lib
...
make[2]: Leaving directory `/home/steph/2003_06_20/videolan/libdvbpsi-0.1.2'
make[1]: Leaving directory `/home/steph/2003_06_20/videolan/libdvbpsi-0.1.2'
[root@DeepGlue libdvbpsi-0.1.2]#

Voir ici le listing complet du "make install".


J'ai ensuite contrôlé le contenu de /etc/ld.so.conf

[root@DeepGlue libdvbpsi-0.1.2]# cat /etc/ld.so.conf
/usr/X11R6/lib
/usr/lib/qt3/lib
/usr/lib/wine
[root@DeepGlue libdvbpsi-0.1.2]# echo "/usr/local/lib" >>/etc/ld.so.conf
[root@DeepGlue libdvbpsi-0.1.2]# ldconfig
[root@DeepGlue libdvbpsi-0.1.2]#

Il y manquait /usr/local/lib (qui est requis dans vls-user-guide-en.pdf).
Je l'ai ajouté (mauvaise lecture de ma part, il suffisait de lancer ldconfig).


Je n'ai pas installé libdvb-0.2.2.tar.gz parce que je ne dispose pas de carte TV satellite ou numérique terrestre.


J'ai ensuite tenté un ./configure sur le serveur VLS vls-0.5.3.tar.gz, mais il s'est soldé par un échec:
Une dépendance envers lbdvdread-devel en est la cause:

[root@DeepGlue videolan]# tar -xvzf vls-0.5.3.tar.gz
...
[root@DeepGlue videolan]# cd vls-0.5.3
[root@DeepGlue vls-0.5.3]# ./configure
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
...
checking for dvdread/dvd_reader.h... no
configure: error: The development package for libdvdread is not installed.
Please install it and try again. Alternatively you can also configure with
--disable-dvd.
[root@DeepGlue vls-0.5.3]#

J'ai donc installé le paquetage correspondant:

[root@DeepGlue vls-0.5.3]# urpmi libdvdread2-devel
Veuillez insérer le medium nommé « International CD (x86) (cdrom3) » dans le périphérique [/dev/hdb]
Appuyez sur la touche Entrée quand vous êtes prêts...
installation de /mnt/cdrom/Mandrake/RPMS3/libdvdread2-devel-0.9.3-4mdk.i586.rpm

Préparation...             ##################################################
   1:libdvdread2-devel     ##################################################
[root@DeepGlue vls-0.5.3]#

Et j'ai repris le ./configure sur vls-0.5.3:

[root@DeepGlue vls-0.5.3]# ./configure
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
...
config.status: creating src/core/defs.h

global configuration
--------------------
system                 : linux-gnu
architecture           : i686
debug                  : 0
profiling              : 0

vls configuration
-----------------
vls version            : 0.5.3
debug mode             : 0
system logging         : 1
daemon mode            :
built-in modules       : filechannel netchannel filereader ts2ts ps2ts localinput videoinput
plug-in modules        : dvdreader

[root@DeepGlue vls-0.5.3]#

Voir ici le listing complet du "./configure".

Le serveur vls-0.5.3 est maintenant "configuré".

On passe à la compilation:

[root@DeepGlue vls-0.5.3]# make
Generating dependancies for src/core/application.cpp...
Compiling src/core/application.cpp...
...
make[1]: Leaving directory `/home/steph/2003_06_20/videolan/vls-0.5.3/src/modules/dvdreader'
[root@DeepGlue vls-0.5.3]#

Voir ici le listing complet du "make".

Et enfin l'installation (cette fois c'est court):

[root@DeepGlue vls-0.5.3]# make install
mkdir -p /usr/local/bin
/usr/bin/install -c bin/vls /usr/local/bin
/usr/bin/install -c bin/vlsd /usr/local/bin
mkdir -p /usr/local/lib/videolan/vls
/usr/bin/install -c -m 644 bin/dvdreader.so /usr/local/lib/videolan/vls
mkdir -p /usr/local/etc/videolan/vls
test -r /usr/local/etc/videolan/vls/vls.cfg || /usr/bin/install -c -m 644 vls.cfg /usr/local/etc/videolan/vls
Installation succeeded.
[root@DeepGlue vls-0.5.3]#

Le serveur vls-0.5.3 est maintenant installé.

Il faut passer à la configuration.


Configuration de VLS:

Le fichier de configuration est /usr/local/etc/videolan/vls/vls.cfg

Je l'ai édité:

[root@DeepGlue vls-0.5.3]# kwrite /usr/local/etc/videolan/vls/vls.cfg

Et j'ai effectué les modifications suivantes (je vous passe les errements des premiers tests):

# vls configuration file

# Application wide settings
BEGIN "Vls"
  LogFile       = "vls.log"            # log file
  ScreenLog     = "enable"             # log to the console
  SystemLog     = "disable"            # log to the systemlog
END
#==================================

# Security informations :
#
# The section "Groups" describes which group is allowed to use which command.
# Each user who belongs to the 'master" group has all the power on the server.
# Each one who belongs to the "monitor" group is a "read-only" user.
BEGIN "Groups"
# --- Format:
# groupname     = "cmd1|cmd2|..."
# --- Example:
# Les membres du groupe monitor ont juste le droit:
#   - d'obtenir de l'aide,
#   - de lister les programmes (vidéos,...) disponibles,
#   - de se déloguer
  monitor       = "help|browse|logout"
# Les membres du groupe master ont en revanche tous les droits:
  master        = "help|browse|start|resume|suspend|stop|shutdown|logout|config|program|input|channel|show"
END

# The section "Users" describes each user
# Use "mkpasswd" to generate the encrypted password.
BEGIN "Users"
# --- Format:
# username      = "encryptedpassword:group"
# --- Example:

# L'utilisateur monitor est membre du groupe monitor
# et son mot de passe encrypté est précisé en remarque: monitor
  monitor       = "3BcKWoiQn0vi6:monitor"       # password is 'monitor'

# L'utilisateur bozo est membre du groupe master
# et son mot de passe encrypté est précisé en remarque: bozo
  bozo          = "JKg2TpPerilnw:master"        # password is 'bozo'
END
#Bien entendu, il n'est pas judicieux de laisser le mot de passe en commentaire.
#==================================

# Telnet Administration
BEGIN "Telnet"
#  Domain        = "Inet6"             # Inet4 or Inet6
  LocalPort     = "9999"               # Port to use for that purpose
  Use = "true"
END
#==================================

# Streams sources declaration
BEGIN "Inputs"
# --- Format:
# InputName     = "Type"
# --- Example:
  local1       = "local"               # Local input example
# Les suivants sont laissés en commentaires (je ne dispose pas de tels matériels)
#  kfir         = "video"              # Video input example (mpeg encoder)
#  dvb          = "dvb"                # Video input example (DVB card)
END
#==================================

# --- Format:
# BEGIN "program_number"
#   Name     = "program_name"
#   Type     = "type"          # can be Mpeg1-PS, Mpeg2-PS, Mpeg2-TS, or Dvd
#   FileName = "path"          # use this variable if Type is not "Dvd"
#   Device   = "device"        # use this variable with type "Dvd"
# END

# Premier programme: une pub récupérée sur http://www.pubstv.com/
BEGIN "1"
  Name     = "fr0331"
  FileName = "/home/video/fr0331.mpg"
  Type     = "Mpeg1-PS"
END
# Remarque: Le nom dans le champ "Name",
# il va falloir le taper à la main ensuite,
# alors évitez les noms à rallonge.

#Deuxième programme: Un DVD: "Bernard et Bianca" pour mon petit bonhomme
BEGIN "2"     # DVD
  Name       = "bernardetbianca"
  Device     = "/dev/cdrom"
  Type       = "dvd"
  DvdTitle   = "1"    # Start title
  DvdChapter = "1"    # Start chapter
END

# Une autre pub pour Bridgestones cette fois:
BEGIN "3"
  Name     = "bridgestones"
  FileName = "/home/video/bridgestones.mpg"
  Type     = "Mpeg1-PS"
END

# --- Example:
#BEGIN "4" # MPEG2 stream stored in /home/videolan/streams/Dolby.vob
# Name = "dolby"
# FileName = "/media/films/Dolby_Canyon.vob"
# Type = "Mpeg2-PS"
#END
#==================================

# A noter la ligne input "local1" de type local ne nécessite pas de configuration.

#Et les deux autres,
#laissées en commentaire plus haut puisque je n'en dispose pas,
#restent en commentaire ci-dessous:

# Video input configuration
BEGIN "kfir"
# --- Example:
# Device        = "/dev/video"     # Video4linux device (default is /dev/video)
# Type          = "Mpeg2-PS"       # Stream type (default is "Mpeg2-PS")
END

# Video input (DVB) configuration
BEGIN "dvb"
# --- Example:
#  DeviceNumber = "0"                  # /dev/dvb/adapter<i>
#  SendMethod   = "0"                  # 0 - Send All Pids
                                       # 1 - Send only MPEG2 datas
END
#==================================

# Channel (outputs) declaration
BEGIN "Channels"
# --- Format:
# ChannelName   = "Type"
# --- Example:
# On précise ici la liste des destinataires des vidéos.
# Leur configuration précise est indiquée plus loin.
  localhost     = "network"
  dingdong     = "network"
  multicast     = "network"
#  localfile     = "file"
END

# Channels configuration
BEGIN "localhost"         # The client is on the same host as the server
  DstHost = "127.0.0.1"
  DstPort = "1234"
END

# DingDong est une machine distante sur le réseau local:
BEGIN "dingdong"                         
# unicast example
  DstHost = "192.168.52.3"            # destination host
  DstPort = "1234"                    # destination port
END

# Pour diffuser en multicast:
BEGIN "multicast"                       
# multicast example
  Type    = "multicast"
  TTL     = "1"                       # Time To Live (pour éviter de passer des routeurs)
  DstHost = "224.0.0.0"               # multicast address
  DstPort = "1234"                    # destination port
END
#==================================

#BEGIN "localfile"                      # file output example
#  FileName = "stream.ts"
#  Append   = "no"                      # rewrite the file if it exists
#END
#==================================

# Commands automatically lanched on Startup
# Commands shall be like they would be typed in a telnet console.
BEGIN "LaunchOnStartUp"
#  command1 = "start dolby localhost local1 --loop"
#  command2 = "start 28009 client1 dvb"
END

Et voilà pour la config que j'ai testée.


J'avais mal saisi au départ que des utilisateurs étaient déjà définis et j'avais donc ajouté l'utilisateur steph dans le fichier de config et récupéré les infos necéssaires sur le mot de passe ainsi:

[root@DeepGlue steph]# mkpasswd steph
XXXXXXXXX
[root@DeepGlue steph]#

Hélas!
Cela semble avoir perturbé le mot de passe de steph pour se loguer sous Linux.
J'ai dû refaire en tant que root "passwd steph" pour réattribuer le mon mot de passe initial.


J'ai effectué la suite des tests avec les comptes monitor/monitor et bozo/bozo (qui sont configurés par défaut dans /usr/local/etc/videolan/vls/vls.cfg).


1er test:

[root@DeepGlue steph]# vls
VideoLAN Server v 0.5.3 (Jul  4 2003) - (c)1999-2003 VideoLAN

Et la console reste occupée.

Dans une autre console:

[steph@DeepGlue steph]$ telnet localhost 9999
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.

Videolan Server Administration System

Login: monitor
Password:

monitor@vls> browse
Provider: Manager
Status: 0
Info: Program Table

  Provider: fr0331
  Status: 0
  Info: None
  Info: Provided by local1

  Provider: bridgestones
  Status: 0
  Info: None
  Info: Provided by local1

  Provider: bernardetbianca
  Status: 0
  Info: None
  Info: Provided by local1

monitor@vls> help
Provider: Admin
Status: 0
Info: help: gives help on the specified command.
Info: program: configure an input with programs.
Info: logout: terminates the administration session.
Info: show: show running broadcasts, available channels, programs or inputs
Info: start: launches a program.
Info: stop: stops a program.
Info: suspend: suspends streaming.
Info: config: load and save configuration file.
Info: input: configure a new input.
Info: shutdown: stops the server.
Info: browse: gives the program list
Info: channel: configure a new channel.
Info: resume: resumes streaming.

monitor@vls> logout
Closing connection
Connection closed by foreign host.
[steph@DeepGlue steph]$

J'ai lancé les trois commandes auxquelles est limité l'utilisateur monitor.

S'il tente de lancer le premier programme, la commande est "start fr0331 dingdong local1".
Cependant, comme il n'y est pas autorisé, il obtient:

monitor@vls> start fr0331 dingdong local1
Provider: Admin
Error: -3
Info: start: permission denied.


2ème test:

Cette fois en tant qu'administrateur bozo, j'ai lancé le "programme" bridgestones vers le canal dingdong (la machine DingDong) avec l'entrée local1 et je l'ai fait diffuser le fichier en boucle.
J'ai ensuite stoppé et relancé la diffusion:

[steph@DeepGlue steph]$ telnet localhost 9999
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.

Videolan Server Administration System

Login: bozo
Password:

bozo@vls> start bridgestones dingdong local1 --loop
Provider: Manager
Status: 0

  Provider: local1
  Status: 0
  Info: Program bridgestones started

bozo@vls> stop dingdong
Provider: Manager
Status: 0

  Provider: local1
  Status: 0
  Info: Program bridgestones stopped

bozo@vls> start bridgestones dingdong local1 --loop
Provider: Manager
Status: 0

  Provider: local1
  Status: 0
  Info: Program bridgestones started

bozo@vls>

Remarque:
Le client vlc n'a pas aimé le rédémarrage.
J'ai eu un joli plantage côté client.
J'ai donc quitté et relancé le client (voir la partie client, pour des précisions).


Enfin, plutôt que d'effectuer un CTRL+C dans la console où tourne VLS avec les messages indiqués plus bas, j'ai arrêté VLS depuis la connexion de bozo:

bozo@vls> shutdown
Provider: Admin
Status: 0
Info: Shutdowning the server

bozo@vls>
Closing connection
Connection closed by foreign host.
[steph@DeepGlue steph]$

Et dans la console où tourne VLS, voici ce qui s'est passé:

[steph@DeepGlue steph]$ su
Password:
[root@DeepGlue steph]# vls
VideoLAN Server v 0.5.3 (Jul  4 2003) - (c)1999-2003 VideoLAN
...
Synchronised with PS stream
New Pid assigned: 80
PMT Add, PID : 0x80 , Type : 0x5
Synchronised with PS stream
New Pid assigned: 81
PMT Add, PID : 0x81 , Type : 0x5
New Pid assigned: 82
PMT Add, PID : 0x82 , Type : 0x5
New Pid assigned: 83
Video: 0x83 , 131
PMT Add, PID : 0x83 , Type : 0x1
updating PCR_PID to value 131 (current pid = 0)
New Pid assigned: 84
Audio: 0x84 , 132
PMT Add, PID : 0x84 , Type : 0x3
New Pid assigned: 85
PMT Add, PID : 0x85 , Type : 0x5
2003-07-11 14:35:09 [ERROR/local1]  Read error for program "bridgestones"
[root@DeepGlue steph]#

Remarque:
Il semble qu'à la fin de la lecture de mes vidéos, il y ait toujours une erreur de lecture.
Cela n'empêche pas le streaming de poursuivre en boucle lorsqu'il a été lancé ainsi.


Bon c'est bien beau tout ça, mais je ne vous ai pas encore montré le côté client.


Installation et configuration du client:

Et oui, c'est bien beau de diffuser, mais si personne n'écoute...
... c'est un peu comme ces pages web que je réalise... si personne ne les lit...
Non!
Je fais ici un rappel: C'est d'abord pour moi que je les rédige: pour retrouver les démarches le jour où je souhaiterai les mettre en oeuvre un peu plus sérieusement.

J'ai récupéré les paquetages RPM et TAR.GZ sur le site de VideoLAN, plus un autre sur http://www.rpmfind.net, mais je détaille tout cela plus loin.


L'installation du client VLC a été un peu plus laborieuse que celle de VLS.


J'ai placé les RPM récupérés sur le site de VideoLAN dans un dossier.
J'ai ajouté cette source de RPM à la liste des sources disponibles (via rpmdrake).

Après lecture de "man urpmi.addmedia", je dirais qu'on doit pouvoir le faire à la main de cette façon (effectué ici sur DeepGlue pour tester, mais c'est bien sur le client DingDong que j'ai effectué mes tests):

[steph@DeepGlue steph]$ su
Password:
[root@DeepGlue steph]# cd RPM/
[root@DeepGlue RPM]# urpmi.addmedia -f RPM_VLC_VLS file://home/steph/RPM
utilisation de différents périphériques amovibles [/dev/hdb] pour « International CD (x86) (cdrom3) »
utilisation de différents périphériques amovibles [/dev/hdb] pour « Installation CD 1 (x86) (cdrom1) »
utilisation de différents périphériques amovibles [/dev/hdb] pour « Installation CD 2 (x86) (cdrom2) »
source RPM_VLC_VLS ajoutée
examen de la liste de synthèse [/var/lib/urpmi/synthesis.hdlist.International CD (x86) (cdrom3).cz]
examen de la liste de synthèse [/var/lib/urpmi/synthesis.hdlist.Installation CD 1 (x86) (cdrom1).cz]
examen de la liste de synthèse [/var/lib/urpmi/synthesis.hdlist.Installation CD 2 (x86) (cdrom2).cz]
examen de la liste de synthèse [/var/lib/urpmi/synthesis.hdlist.PLF9.1_07_04_2003.cz]
examen de la liste de synthèse [/var/lib/urpmi/synthesis.hdlist.update_source.cz]
lecture des fichiers rpm à partir de [/home/steph/RPM]
/var/cache/urpmi/headers/libdvdcss-1.2.5-1.src
/var/cache/urpmi/headers/vlc-plugin-sdl-0.5.0-1mdk.i586
/var/cache/urpmi/headers/vlc-plugin-arts-0.5.0-1mdk.i586
/var/cache/urpmi/headers/mozilla-plugin-vlc-0.5.0-1mdk.i586
/var/cache/urpmi/headers/vlc-plugin-alsa-0.5.0-1mdk.i586
/var/cache/urpmi/headers/libdvdplay-1.0.0-1mdk.src
/var/cache/urpmi/headers/vlc-plugin-ogg-0.5.0-1mdk.i586
/var/cache/urpmi/headers/libdvdcss2-1.2.5-1.i586
/var/cache/urpmi/headers/vlc-0.5.0-1mdk.i586
/var/cache/urpmi/headers/vlc-plugin-dv-0.5.0-1mdk.i586
/var/cache/urpmi/headers/vlc-plugin-mad-0.5.0-1mdk.i586
/var/cache/urpmi/headers/libdvbpsi1-0.1.2-3mdk.i586
/var/cache/urpmi/headers/vlc-plugin-esd-0.5.0-1mdk.i586
/var/cache/urpmi/headers/libdvbpsi-0.1.2-3mdk.src
/var/cache/urpmi/headers/vlc-plugin-a52-0.5.0-1mdk.i586
/var/cache/urpmi/headers/vlc-plugin-ggi-0.5.0-1mdk.i586
/var/cache/urpmi/headers/gnome-vlc-0.5.0-1mdk.i586
/var/cache/urpmi/headers/libdvdplay0-1.0.0-1mdk.i586
/var/cache/urpmi/headers/vlc-plugin-aa-0.5.0-1mdk.i586
Ecriture de la liste des fichiers pour le medium « RPM_VLC_VLS »
création de hdlist [/var/lib/urpmi/hdlist.RPM_VLC_VLS.cz]
choosing compression method with "gzip -4" for archive /var/lib/urpmi/hdlist.RPM_VLC_VLS.cz
real archive size of /var/lib/urpmi/hdlist.RPM_VLC_VLS.cz is 26539
fichier de synthèse créé pour la source « RPM_VLC_VLS »
19 en-têtes trouvé dans le cache
destruction de 0 en-têtes obsolètes dans le cache
écriture du fichier de configuration [/etc/urpmi/urpmi.cfg]
[root@DeepGlue RPM]#


Il est précisé dans vlc-user-guide-en.pdf qu'il faut installer libdvdplay, vlc, vlc-plugin-mad, vlc-plugin-a52 et gnome-vlc ou vlc-gtk.
J'ai tenté de le faire, mais cela a toujours fini par bloquer sur ce qui suit et l'installation a échoué:

        libavcodec.so est nécessaire à vlc-0.5.0-1mdk
[root@DingDong videolan]#


Et pas moyen de trouver sur mes CD de Mdk9.1 ce fichu fichier.

Un petit tour par http://www.rpmfind.net, une recherche sur libavcodec.so m'a proposé plusieurs paquetages.
J'en ai choisi un en rapport avec l'encodage vidéo: libffmpeg0.4.6-0.4.6-2mdk.i586.rpm

Cette fois, j'ai pu effectuer l'installation:

[steph@DingDong steph]$ su
Password:
[root@DingDong steph]# cd /home/RPM/
[root@DingDong RPM]# urpmi libdvdplay0-1.0.0-1mdk.i586.rpm \
vlc-0.5.0-1mdk.i586.rpm \
vlc-plugin-alsa-0.5.0-1mdk.i586.rpm \
vlc-plugin-mad-0.5.0-1mdk.i586.rpm \
vlc-plugin-ogg-0.5.0-1mdk.i586.rpm \
vlc-plugin-a52-0.5.0-1mdk.i586.rpm \
libffmpeg0.4.6-0.4.6-2mdk.i586.rpm \
libdvdcss2-1.2.5-1.i586.rpm \
libdvbpsi1-0.1.2-3mdk.i586.rpm \
liba52dec0 \
a52dec
Un des paquetages suivants est nécessaire :
 1- liba52dec0-0.7.4-2mdk.i586
 2- a52dec-0.7.4-2mdk.i586
Que choisissez-vous ? (1-2)2
Un des paquetages suivants est nécessaire :
 1- gvlc-0.5.0-1mdk.i586
 2- gnome-vlc-0.5.0-1mdk.i586
Que choisissez-vous ? (1-2)2
Pour satisfaire les dépendances, les paquetages suivants vont être installés (3 Mo):
a52dec-0.7.4-2mdk.i586
gnome-vlc-0.5.0-1mdk.i586
liba52dec0-0.7.4-2mdk.i586
libdvbpsi1-0.1.2-3mdk.i586
libdvdcss2-1.2.5-1.i586
libdvdplay0-1.0.0-1mdk.i586
libdvdread2-0.9.3-4mdk.i586
libffmpeg0.4.6-0.4.6-2mdk.i586
vlc-0.5.0-1mdk.i586
vlc-plugin-a52-0.5.0-1mdk.i586
vlc-plugin-alsa-0.5.0-1mdk.i586
vlc-plugin-mad-0.5.0-1mdk.i586
vlc-plugin-ogg-0.5.0-1mdk.i586
Est-ce correct ? (O/n) o
installation de vlc-plugin-a52-0.5.0-1mdk.i586.rpm \
vlc-plugin-alsa-0.5.0-1mdk.i586.rpm \
vlc-0.5.0-1mdk.i586.rpm \
libdvbpsi1-0.1.2-3mdk.i586.rpm \
/mnt/win_e/mdk91/Mandrake/RPMS2/libdvdread2-0.9.3-4mdk.i586.rpm \
vlc-plugin-ogg-0.5.0-1mdk.i586.rpm \
/home/RPM/gnome-vlc-0.5.0-1mdk.i586.rpm \
/mnt/win_e/mdk91/Mandrake/RPMS3/a52dec-0.7.4-2mdk.i586.rpm \
/mnt/win_e/mdk91/Mandrake/RPMS3/liba52dec0-0.7.4-2mdk.i586.rpm \
libffmpeg0.4.6-0.4.6-2mdk.i586.rpm \
libdvdplay0-1.0.0-1mdk.i586.rpm \
libdvdcss2-1.2.5-1.i586.rpm \
vlc-plugin-mad-0.5.0-1mdk.i586.rpm
Préparation...             ##################################################
  1:libdvbpsi1            ##################################################
  2:libdvdread2           ##################################################
  3:liba52dec0            ##################################################
  4:a52dec                 ##################################################
  5:libffmpeg0.4.6         ##################################################
  6:libdvdplay0           ##################################################
  7:libdvdcss2            ##################################################
  8:vlc-plugin-a52        ##################################################
  9:vlc-plugin-mad        ##################################################
 10:vlc                   ##################################################
  11:vlc-plugin-alsa       ##################################################
 12:vlc-plugin-ogg        ##################################################
 13:gnome-vlc            ##################################################
[root@DingDong RPM]#

VLC est installé.

Nous allons pouvoir passer aux tests.


Remarque:
(1) Le PDF vlc-user-guide-en.pdf précise page 25... les différentes syntaxes d'utilisation du client.
Je n'en ai testé ci-après que certaines.
(2) Ne pas installer tous les paquetages, mais seulement ceux qui correspondent à votre distribution, notamment en ce qui concerne la gestion du son.
J'ai fait des essais pour tenter de résoudre un problème (il s'agissait seulement d'un problème de volume) et j'ai complètement planté la gestion du son.


1er test:

J'ai eu des soucis avec la vidéo fr0331.mpg
Il semble que mon fichier ait un problème: via VLC, je n'obtenais que le son et pas l'image.
Et ceci alors que cette vidéo passe très bien via Kaboodle par exemple.

Avec l'autre vidéo bridgestones.mpg, je n'ai pas eu ce désagrément (mais cela m'a fait chercher un moment; n'hésitez donc pas à tester plusieurs fichiers).


Pour lire un streaming lancé vers le canal dingdong correspondant à DingDong:
[steph@DingDong steph]$ vlc -vvv udp:

Pour préciser quelle adresse écouter (ici celle de DeepGlue sur le port 1234):
[steph@DingDong steph]$ vlc -vvv udp:@192.168.52.182:1234

Remarque:
Cela ne fonctionne pas si la diffusion n'a pas été lancée avant.

Voici des captures d'écran avec:
- la console d'où est lancée la commande "vlc -vvv udp:" et où défilent ensuite bien des infos,
- la barre de pilotage,
- et la vidéo elle-même.

Console d'où est lancé VLC

Barre de pilotage de VLC

Fenêtre vidéo de VLC


n-ième test:

J'ai utilisé VLC pour lire une vidéo sur un serveur web.
Si j'ai bien saisi, c'est une lecture de streaming, donc contrairement à ce qui se passerait avec mozplugger sous Mozilla, il n'est pas nécessaire de charger tout le fichier avant de commencer à le lire.

Avec une vidéo de 34,1Mo la lecture a démarré quasi aussitôt.


 Avec juste le serveur web démarré sur DeepGlue en 192.168.52.182, j'ai lancé avec succès sur le client DingDong:

[steph@DingDong RPM]$ vlc -vvv http://192.168.52.182/steph/videolan/fr0331.mpg
VideoLAN Client 0.5.0 Natalya
[00000000] main root debug: VLC media player - version 0.5.0 Natalya - (c) 1996-2003 VideoLAN
[00000000] main root debug: libvlc was configured with ./configure \
--build=i586-mandrake-linux-gnu --prefix=/usr --exec-prefix=/usr \
--bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc \
--datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib \
--libexecdir=/usr/lib --localstatedir=/var/lib --sharedstatedir=/usr/com \
--mandir=/usr/share/man --infodir=/usr/share/info --enable-release \
--enable-dvd --without-dvdcss --enable-dvdplay --enable-mozilla \
--enable-gtk --enable-gnome --enable-ncurses --enable-lirc \
--disable-wxwindows --enable-x11 --enable-xvideo --enable-fb \
--disable-mga --enable-aa --enable-sdl --enable-ggi --enable-xosd \
--enable-mad --enable-ffmpeg --with-ffmpeg=/usr \
--with-ffmpeg-tree=/usr/lib --enable-vorbis --enable-ogg --enable-dv \
--enable-dvb --enable-dvbpsi --enable-satellite --enable-esd \
--enable-alsa --enable-arts
[00000001] main vlc debug: translation test: code is "fr"
[00000000] main root debug: checking builtin modules
[00000000] main root debug: checking plugin modules
...


Remarque:

Il est également possible de lancer vlc avec vlc -vvv puis en cliquant sur  Fichier/Ouvrir fichier, de choisir dans les 4 onglets proposés qui un Fichier, qui un Disque (DVD,...), qui un flux Réseau qui un flux Satellite .


Le plugin VLC pour Mozilla:

J'ai installé le plugin mozilla-plugin-vlc-0.5.0-1mdk.i586.rpm

[root@DingDong RPM]# urpmi mozilla-plugin-vlc-0.5.0-1mdk.i586.rpm
installation de mozilla-plugin-vlc-0.5.0-1mdk.i586.rpm

Préparation...             ##################################################
   1:mozilla-plugin-vlc    ##################################################
[root@DingDong RPM]#

Mais mes tests sont sans succès:
En visitant:
http://192.168.52.182/steph/videolan/video1.html
J'obtiens l'image noire et quand je clique sur Play, la console javascript m'informe que:
Error: document.video1.play is not a function

Je n'ai pas la solution.

Les pages web sont:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title>Demo du plugin VLC de Mozilla</title>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15">
  <meta name="GENERATOR" content="Quanta Plus">
</head>
<body>
<h1>Demo du plugin VLC de Mozilla - Exemple 1</h1>

<embed type="application/x-vlc-plugin" name="video1" autoplay="no"
loop="yes" width="400" height="300" target="http://192.168.52.182/steph/videolan/fr0331.mpg">
<br>
<a href="javascript:;" onclick="document.video1.play()">Play video1</a>
<a href="javascript:;" onclick="document.video1.pause()">Pause video1</a>
<a href="javascript:;" onclick="document.video1.stop()">Stop video1</a>
<a href="javascript:;" onclick="document.video1.fullscreenplay()">Fullscreen</a>
</body>
</html>

Et 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title>Demo du plugin VLC de Mozilla</title>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15">
  <meta name="GENERATOR" content="Quanta Plus">
</head>
<body>
<h1>Demo du plugin VLC de Mozilla - Exemple 2</h1>

<embed type="application/x-vlc-plugin" name="video2" autoplay="no"
width="400" height="300" loop="no" hidden="no" target="udp:224.0.0.0">
<br>
<a href="javascript:;" onclick="document.video2.play()">Play video2</a>
<a href="javascript:;" onclick="document.video2.stop()">Stop video2</a>
<a href="javascript:;" onclick="document.video2.fullscreenplay()">Fullscreen</a>
</body>
</html>


En vrac:

Phénomènes bizarres avec VLS:

Il semble que parfois à la suite d'une erreur de syntaxe, que la commande suivante passe mal.
En la relançant, ça passe:

steph@DeepGlue steph]$ telnet localhost 9999
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.

Videolan Server Administration System

Login: bozo
Password:

bozo@vls> start 1 dingdong local1
Provider: Manager
Error: -1
Info: Unknown pgrm 1

bozo@vls> start fr0331 dingdong local1
Provider: Admin
Error: -2
Info: start: too many arguments
Info: Usage: start <program> <channel> <input> [--loop] [--end] [--rtp] [--... value] [--...]

bozo@vls> browse
Provider: Manager
Status: 0
Info: Program Table

  Provider: fr0331
  Status: 0
  Info: None
  Info: Provided by local1

  Provider: bridgestones
  Status: 0
  Info: None
  Info: Provided by local1

  Provider: bernardetbianca
  Status: 0
  Info: None
  Info: Provided by local1

bozo@vls> start fr0331 dingdong local1
Provider: Manager
Status: 0

  Provider: local1
  Status: 0
  Info: Program fr0331 started

bozo@vls>

Puis pour l'arrêter, on "stoppe la destination":

bozo@vls> stop dingdong
Provider: Manager
Status: 0

  Provider: local1
  Status: 0
  Info: Program fr0331 stopped

bozo@vls>

Il m'est aussi arrivé de n'avoir d'autre choix que d'arrêter vls pour le redémarrer ensuite.
Je ne parvenais pas à libérer le canal d'une vidéo parvenue à son terme pour en démarrer une autre:

bozo@vls> stop dingdong
Provider: Manager
Error: -1
Info: Nothing broadcasted to channel dingdong

bozo@vls> start bridgestones dingdong local1 --loop
Provider: Manager
Error: -1
Info: Channel is busy

bozo@vls> stop dingdong
Provider: Manager
Error: -1
Info: Nothing broadcasted to channel dingdong

bozo@vls> shutdown
Provider: Admin
Status: 0
Info: Shutdowning the server

bozo@vls>
Closing connection
Connection closed by foreign host.
[steph@DeepGlue steph]$

J'ai ensuite relancé vls dans l'autre console,...


Diffusion d'un DVD en streaming via VLS:

La diffusion d'un DVD prend un peu de temps au démarrage, car elle nécessite le démarrage de la lecture, l'analyse/décodage des clés CSS.

VLS est lancé dans une console, et dans une autre:

[steph@DeepGlue steph]$ telnet localhost 9999
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.

Videolan Server Administration System

Login: bozo
Password:

bozo@vls> start bernardetbianca dingdong local1
Provider: Manager
Status: 0

  Provider: local1
  Status: 0
  Info: Program bernardetbianca started

bozo@vls>


[root@DeepGlue vls-0.5.3]# vls
VideoLAN Server v 0.5.3 (Jul  4 2003) - (c)1999-2003 VideoLAN
title == "1"
chapter == "1"
angle == ""
libdvdread: Using libdvdcss version 1.2.6 for DVD access
New Pid assigned: 80
Video: 0x80 , 128
PMT Add, PID : 0x80 , Type : 0x2
updating PCR_PID to value 128 (current pid = 0)
audio : 8000
New Pid assigned: 81
Private 1: SubId: 0x80 , Pid: 0x81 , 129
PMT Add, PID : 0x81 , Type : 0x91
audio : 8100
...
subtitle : 00000000
subtitle : 00000000
subtitle : 00000000
subtitle : 00000000

libdvdread: Attempting to retrieve all CSS keys
libdvdread: This can take a _long_ time, please be patient

libdvdread: Get key for /VIDEO_TS/VIDEO_TS.VOB at 0x0000023f
libdvdread: Elapsed time 0
libdvdread: Get key for /VIDEO_TS/VTS_01_0.VOB at 0x0000032a
libdvdread: Elapsed time 0
...
libdvdread: Get key for /VIDEO_TS/VTS_56_0.VOB at 0x0038804c
libdvdread: Elapsed time 1
libdvdread: Get key for /VIDEO_TS/VTS_56_1.VOB at 0x00388099
libdvdread: Elapsed time 0
libdvdread: Found 56 VTS's
libdvdread: Elapsed time 56
Synchronised with PS stream
New Pid assigned: 88
PMT Add, PID : 0x88 , Type : 0x5
New Pid assigned: 89
Private 1: SubId: 0x0 , Pid: 0x89 , 137
PMT Add, PID : 0x89 , Type : 0x5
New Pid assigned: 8a
PMT Add, PID : 0x8a , Type : 0x5

Et la diffusion est partie...

Je l'ai interrompue un peu après:

bozo@vls> stop dingdong
Provider: Manager
Status: 0

  Provider: local1
  Status: 0
  Info: Program bernardetbianca stopped

bozo@vls> logout
Closing connection
Connection closed by foreign host.
[steph@DeepGlue steph]$

Et l'image est restée en pause sur le client lorsque j'ai interrompu la diffusion.

A noter que pour avoir le son sur le client, j'ai dû pousser le son bien haut via kmix et sur les misérables enceintes dont je dispose.


Remarque:
Il est possible de lancer le streaming d'une autre façon:

[root@DeepGlue steph]# vls -vv -d udp:192.168.52.3 dvd:/dev/dvd --ttl 12
VideoLAN Server v 0.5.3 (Jul  4 2003) - (c)1999-2003 VideoLAN
2003-07-05 15:12:55 [INFO/Vls]  Module "channel:file" registered
2003-07-05 15:12:55 [INFO/Vls]  Module "channel:network" registered
2003-07-05 15:12:55 [INFO/Vls]  Module "mpegreader:file" registered
2003-07-05 15:12:55 [INFO/Vls]  Module "mpegconverter:ts2ts" registered
2003-07-05 15:12:55 [INFO/Vls]  Module "mpegconverter:ps2ts" registered
2003-07-05 15:12:55 [INFO/Vls]  Module "input:local" registered
2003-07-05 15:12:55 [INFO/Vls]  Module "input:video" registered
2003-07-05 15:12:55 [INFO/Vls]  Browsing modules in directory "."
2003-07-05 15:12:55 [INFO/Vls]  Browsing modules in directory "/usr/local/lib/videolan/vls"
2003-07-05 15:12:55 [INFO/Vls]  Module "mpegreader:dvd" registered
2003-07-05 15:12:55 [INFO/Vls]  Channel 'output1' created
2003-07-05 15:12:55 [INFO/Vls]  Starting input 'input1'
2003-07-05 15:12:55 [INFO/input1]  Added program 'program1'
2003-07-05 15:12:55 [INFO/Vls]  Input 'input1' sucessfully initialised
2003-07-05 15:12:55 [INFO/Vls]  Executing command1 : 'start program1 output1 input1 '
title == ""
chapter == ""
angle == ""
libdvdread: Using libdvdcss version 1.2.6 for DVD access
New Pid assigned: 80
Video: 0x80 , 128
PMT Add, PID : 0x80 , Type : 0x2
updating PCR_PID to value 128 (current pid = 0)
audio : 8000
New Pid assigned: 81
Private 1: SubId: 0x80 , Pid: 0x81 , 129
PMT Add, PID : 0x81 , Type : 0x91
audio : 8100
...


Remarque:
Lu de cette façon, on peut faire des captures d'écran avec KSnapShot, contrairement à ce qui se passerait avec une lecture classique avec Xine ou Mplayer.
La Faq de VLC fait référence à une option  "--vout x11" pour le permettre, mais je n'en ai pas eu besoin.


Diffusion en multicast avec VLS:

Voici le compte-rendu de mes essais en multicast.

J'ai dû consulter les pages de man pour voir comment configurer une adresse multicast parallèlement à ma config réseau:

[root@DeepGlue steph]# man route

En voici l'extrait utile ici:

      route add 224.0.0.0 netmask 240.0.0.0 dev eth0
           Ceci est une commande mal documentée et les gens savent ce qu'il
             faut faire? Ceci force toutes les routes IP des classes D  (mul-
             ticast)  à  passer  par "eth0". C'est la configuration correcte,
             normale pour un noyau supportant le multicast.

J'ai procédé à la configuration sur le serveur: 

[root@DeepGlue steph]# route add 224.0.0.0 dev eth0
[root@DeepGlue steph]# route
Table de routage IP du noyau
Destination    Passerelle     Genmask         Indic Metric Ref    Use Iface
224.0.0.0      *              255.255.255.255 UH    0      0        0 eth0
192.168.52.0   *              255.255.255.0   U    0      0        0 eth0
127.0.0.0      *              255.0.0.0       U    0     0        0 lo
[root@DeepGlue steph]#

Je rappelle que le fichier de config du serveur comporte des entrées correspondant au multicast:

# Channel (outputs) declaration
BEGIN "Channels"
# --- Format:
# ChannelName   = "Type"
# --- Example:
# On précise ici la liste des destinataires des vidéos.
# Leur configuration précise est indiquée plus loin.
  localhost     = "network"
  dingdong     = "network"
  multicast     = "network"
#  localfile     = "file"
END

...

# Pour diffuser en multicast:
BEGIN "multicast"                     # multicast example
  Type    = "multicast"
  TTL     = "1"                       # Time To Live
  DstHost = "224.0.0.0"               # multicast address
  DstPort = "1234"                    # destination port
END

J'ai ensuite fait tourner le serveur vls:

 [root@DeepGlue steph]# vls
VideoLAN Server v 0.5.3 (Jul  4 2003) - (c)1999-2003 VideoLAN
Synchronised with PS stream
New Pid assigned: 80
PMT Add, PID : 0x80 , Type : 0x5
Synchronised with PS stream
New Pid assigned: 81
PMT Add, PID : 0x81 , Type : 0x5
New Pid assigned: 82
PMT Add, PID : 0x82 , Type : 0x5
New Pid assigned: 83
Video: 0x83 , 131
PMT Add, PID : 0x83 , Type : 0x1
updating PCR_PID to value 131 (current pid = 0)
New Pid assigned: 84
Audio: 0x84 , 132
PMT Add, PID : 0x84 , Type : 0x3

Et lancé une  diffusion en boucle:

[steph@DeepGlue steph]$ telnet localhost 9999
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.

Videolan Server Administration System

Login: bozo
Password:

bozo@vls> start bridgestones multicast local1 --loop
Provider: Manager
Status: 0

  Provider: local1
  Status: 0
  Info: Program bridgestones started

bozo@vls>

Et côté client, sur DingDong, j'ai commencé par configurer l'adresse de multicast:

[steph@DingDong steph]$ su
Password:
[root@DingDong steph]# route add 224.0.0.0 dev eth0
[root@DingDong steph]# route
Table de routage IP du noyau
Destination    Passerelle     Genmask         Indic Metric Ref    Use Iface
224.0.0.0      *              255.255.255.255 UH    0      0        0 eth0
192.168.52.0   *              255.255.255.0   U     0      0        0 eth0
127.0.0.0      *              255.0.0.0       U     0      0        0 lo
[root@DingDong steph]# exit
exit
[steph@DingDong steph]$

Et j'ai mis le client vlc à l'écoute de la diffusion sur l'adresse multicast:

[steph@DingDong steph]$ vlc -vvv udp:@224.0.0.0:1234

Et ça marche!

Du multicast avec les deux postes de mon réseau, cela vallait drôlement le coup;o).


J'ai aussi tenté de consulter la diffusion multicast via une page web, mais il semble que mon  plugin vlc pour mozilla ne fasse pas son office.

[root@DeepGlue steph]# /usr/local/bin/vlsd
  VideoLAN Server v 0.5.3 (Jul  4 2003) - (c)1999-2003 VideoLAN

Côté client, rien ne se passe en tentant une lecture de http://192.168.52.182/steph/videolan/video1.html


Liens:

Le site officiel de VideoLAN: http://www.videolan.org
Les PDF:
http://www.videolan.org/doc/vlc-user-guide/en/vlc-user-guide-en.pdf
http://www.videolan.org/doc/vls-user-guide/en/vls-user-guide-en.pdf
http://www.videolan.org/doc/faq/fr/videolan-faq-fr.pdf

Rubrique download de VLC: http://www.videolan.org/vlc/index.html
(s'y trouvent les liens vers les paquets par distribution,...)
Le RPM qui m'a manqué un moment pour VLC (chercher libavcodec.so):
ftp://ftp.rpmfind.net/linux/Mandrake/9.1/contrib/i586/libffmpeg0.4.6-0.4.6-2mdk.i586.rpm

Rubrique download de VLS: http://www.videolan.org/streaming/download-vls-sources.html

Le site de l'Ecole Centrale de Paris: http://www.ecp.fr

A propos de multicast: man route d'une part et http://www.laissus.com/cours/node54.html d'autre part.