Streaming avec VLC et VLM
Date: 12/12/2007 | Catégories: Open-source | Tags: vlc,vlm
Suite des articles sur VideoLAN, nous allons aujourd'hui nous pencher sur l'interface VLM du client VideoLAN. Cette interface permet de créer un serveur pouvant lancer des streaming audio et video soit à la demande, soit en fonction d'une plage horaire.
Voici un schéma fonctionnel du système:
En entrée, on peut donc avoir:
- n'importe quel fichier audio/video lisible par VLC
- un flux audio/video venant d'une Webcam ou mieux d'une carte d'acquisition video
En sortie, VLC va générer un streaming IP pouvant se baser sur les protocoles suivants:
- HTTP (c'est du TCP, donc adapté pour des streaming de basses qualités sur des réseaux sans qualité de service. ex: Internet)
- MMSH (MMS sur HTTP, même remarque que pour le HTTP. Le principal avantage (le seul ?) de ce protocole est qu'il peut être lu par des clients Windows Media Player)
- UDP (permet un diffusion simple et sans overhead d'un streaming. Par contre, il n'y aucun contrôle... en cas de problème sur le réseau, les clients recevrons une vidéo dégradée ou plus de vidéo du tout)
- RTP (c'est un bon compromis. bassée sur UDP il permet d'avoir des statistiques sur le flux. Les prochaines versions de VideoLAN devraient inclure la prise en compte du protocole RTCP permettant de modifier dynamiquement le flux en fonction des contraintes du réseau)
Il est bien sûr possible et conseiller d'encoder ou de ré-encoder l'entrée selon vos besoins (MPEG-1, MPEG-2, MPEG-4, H.264...).
Lancement de VLC avec l'interface VLM
L'interface VLM peut être administrée par ligne de commande (Telnet) ou interface Web. Nous allons étudier dans ce billet la première solution, beaucoup plus souple et simple que la seconde.
La première chose à faire est de lancer VLC avec l'interface Telnet:
# vlc --intf telnet
VLC media player 0.8.6c Janus
[00000287] main interface: creating VLM
[00000287] telnet interface: using the VLM interface plugin...
[00000287] telnet interface: telnet interface started on interface 4212
Comme on peut le voir, le serveur se lance en écoute sur le port TCP/4212
Administration de VLM via telnet
Nous allons donc ouvrir une session telnet sur le port 4212 (on part sur le principe ou l'on administre la machine en local, si ce n'est pas le cas, il faudra que vous remplaciez l'adresse 127.0.0.1 par l'adresse IP de votre machine).
# telnet localhost 4212
telnet 127.0.0.1 4212
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Password: admin
Welcome, Master>
Nous voilà donc dans le shell de VLM. La liste des commandes disponibles peut être affichée grâce à la commande help.
Reste à voir command créer un streaming (media dans la nomenclature VLC).
Création d'un streaming à partir d'un fichier DivX
Dans ce premier exemple nous allons créer un streaming à partir d'un fichier source Divx. Ce streaming sera démarré sur action de l'administrateur (c'est à dire vous...).
Nous allons donc procéder à la création du media que nous allons nommer mondivx.
> new mondivx broadcast enabled
> setup mondivx input "Star_Wars_3.avi"
> setup mondivx output #transcode{vcodec=mp4v,vb=768,scale=1}:duplicate{dst=std{access=udp,mux=ts,dst=192.168.0.100:1234}}
La première ligne permet de créer et d'activer le media mondivx.La seconde configure la source (ici notre fichier DivX).La troisième configure le streaming. Vous pouvez faire un copier/coller de ceux qui est affiché par VideoLAN. Dans mon exemple, je diffuse en UDP vers l'adresse 192.168.0.100 (port UDP/1234).
La commande suivant permet de visualiser la liste des médias créés.
> showshow media : ( 1 broadcast - 0 vod ) mondivx type : broadcast enabled : yes instances schedule
On voit donc que le serveur VLM à 1 média de type broadcast qui se nomme mondivx.
Pour afficher le détail du média, on utilise la commande:
> show mondivxshow fileunicast type : broadcast enabled : yes loop : no inputs Star_Wars_3.avi output : #transcode{vcodec=mp4v,vb=768,scale=1}:duplicate{dst=std{access=udp,mux=ts,dst=192.168.29.157:1234}} options instances
Lancement du streaming
C'est très simple:
> control mondivx play
Pour visualiser le streaming, il suffit d'ouvrir VideoLAN (sur la machine 192.168.0.100) et de choisir "Ouvrir un flux réseau" , UDP port 1234.
Pour l'arrêter:
> control mondivx play
Création d'une streaming à partir d'une carte d'acquisition vidéo
Si vous disposé d'une carte d'acquisition vidéo ou d'une WebCam (reconnue par v4l), il suffit de configurer un nouveau media (dans mon cas mon device video est mappé sur /dev/video1).
> new macamera broadcast enabled
> setup macamera input "v4l://"
> setup macamera option v4l-vdev=/dev/video1> setup macamera option v4l-adev=/dev/dsp> setup macamera option v4l-norm=0> setup macamera option v4l-frequency=-1> setup macamera option v4l-width=640> setup macamera option v4l-height=480> setup macamera output #transcode{vcodec=mp4v,vb=768,scale=1}:duplicate{dst=std{access=udp,mux=ts,dst=192.168.0.100:1234}}
La seule différence avec le media mondivx est la source (camera).
Pour lancer le streaming:
> control macamera play
Pour visualiser le streaming, il suffit d'ouvrir VideoLAN (sur la machine 192.168.0.100) et de choisir "Ouvrir un flux réseau" , UDP port 1234.
Pour l'arrêter:
> control macamera play
Programmer des streamings
Une des fonctions intéressante de VLM est la possibilité d'automatiser le lancement et l'arrêt d'un streaming (media) à des heures données.
Pour cela nous allons définir deux horaires (celui de départ et celui de fin):
> new camera_start schedule enabled
> setup camera_start date 2007/12/31-23:00:00
> new camera_stop schedule enabled
> setup camera_stop date 2007/12/31-23:59:59
Puis l'affecter au media macamera préalablement créé.
> setup camera_start append control macamera play
> setup camera_stop append control macamera stop
Le streaming sera donc automatiquement démarré le 31 décembre 2007 à 23h00 et arrêté le même jour à 23h59.
Voici donc un rapide aperçu des fonctions de VLM. Il est également possible de faire de la VoD (vidéo à la demande). On abordera sûrement ce sujet dans un prochain billet.