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.
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.