Pierre Ficheux (pierre@alienor.fr)
Décembre 1998
Il n'est pas vraiment nécessaire d'insister sur les images, largement présentes sur la majorités des sites Web actuels. Concernant la transmission de son et de vidéo, on distinguera 2 cas:
Le système effectue alors le téléchargement du fichier puis le Navigateur lance l'application nécessaire à l'exploitation du fichier. Il est clair que les données transmises sont dans ce cas des fichiers enregistrés au préalable, donc on ne peut pas à proprement parler de données en temps réel.
Dans ce cas le serveur transmet un flux de données permanent qui doit être décodé en temps réel par le client, encore une fois par l'intermédiaire d'une application annexe ou d'un plugin du navigateur. Cette méthode, en général beaucoup plus complexe à mettre en oeuvre permet elle de travailler sur des données réellement live...
Dans les deux cas, la référence au fichier de donnée est en général intégrée à une page HTML en utilisant une commande d'incrustation:
<EMBED SRC="http://monserveur/monfichier.avi" WIDTH=320 HEIGHT=240>ou tout simplement une ancre HTML:
<A HREF="http://monserveur/monfichier.avi">Ma séquence AVI</A>
Figure 1. Le ViewCOM VM3
Il permet de convertir un signal vidéo classique (comme une entrée caméra ou magnétoscope) en un flux de données au format de type MJPEG. Une séquence MJPEG (ne pas confondre avec le MPEG) est une suite d'images (ou de portions d'images) JPEG. Le ViewCOM fut initialement conçu pour être compatible avec feu le format TVR (Télétel Vitesse Rapide) de France Télécom. Hé oui, on peut même faire de la vidéo avec un Minitel ;-) le format MJPEG utilisé (et créé) par COM One est appelé VCR. Il est important de noter qu'un plugin Netscape/IE de visualisation de fichiers au format VCR est disponible gratuitement sur le serveur WWW de COM One à l'URL http://www.com1.fr/download. Ce plugin est disponible pour les systèmes LINUX, Solaris, SunOS, Win95/98/NT et MacOS. Pour incruster un fichier VCR dans une page HTML, on utilisera donc la syntaxe:
<EMBED SRC="http://monserveur/monfichier.vcr" WIDTH=320 HEIGHT=240>Ce qui aura pour effet de charger le plugin VCR et de visualiser la séquence vidéo.
Le ViewCOM est accessible depuis une ligne téléphonique classique ou bien ISDN (Numéris). A l'aide du logiciel adéquat, on peut visualiser en temps réel l'image vue par une caméra distante et ce en utilisant une simple ligne téléphonique.
Outre la fonction principale de visualisation en temps réel, le ViewCOM inclut des fonctions de commandes de contacts, de commutation de caméra (on peut connecter 4 caméras sur un ViewCOM) ainsi que d'enregistrement de film (une séquence MJEPG) sur demande de l'utilisateur ou bien sur un évènement extérieur survenu sur un capteur connecté au ViewCOM. Le ViewCOM dispose aussi d'un port RS-232 sur lequel on peut connecter tout type de périphérique disposant d'une interface série (module de pilotage de caméra Pan&Tilt, station météo, multiplexeur de vidéo, etc...)
Ces caractéristiques font que le ViewCOM est principalement utilisé pour des applications de vidéo-sécurité. Il permet de surveiller à distance un site sans pour cela installer un couteux système de transmission vidéo sur longue distance. Plus d'information concernant le produit ViewCOM sont disponible à l'URL http://www.com1.fr/product/securite.html.
Un solution simple (sur le papier en tout cas) est d'utiliser un calculateur connecté à Internet (par exemple un PC LINUX, au hasard...) qui fera l'interface entre le réseau IP et le (ou les) ViewCOM que l'on veut exploiter (le serveur fera lui des accès téléphoniques classiques aux ViewCOM). Si l'on place le serveur relativement proche des ViewCOM, on pourra par exemple surveiller depuis Internet un site distant et ce pour le prix d'une communication Internet coté client et d'une communication locale (au pire régionale) coté serveur. Le principe de fonctionnement est décrit sur la figure 2.
Figure 2. Principe de fonctionnement
En plus de l'accès possible par le protocole TCP/IP, on remarquera qu'un autre avantage (et non des moindres) est la possibilité d'un accès simultané par plusieurs clients à la même séquence vidéo, exactement comme si celle-ci était enregistrée sur un fichier.
Une solution élégante est de conserver au niveau du fichier HTML la syntaxe d'incrustation décrite au paragraphe 2 (le mot-clé EMBED). Pour cela, il est nécessaire que le programme serveur chargé d'envoyer la vidéo en temps réel se comporte comme un serveur HTTP standard (comme Apache) en l'occurence:
Pour mémoire le type MIME permet de définir le type des données renvoyées par le serveur sur requête d'un client, comme par exemple image/gif dans le cas d'une image GIF, video/mpeg dans le cas de fichiers MPEG ou plus simplement text/html dans le cas des documents HTML standards. Sur Apache dans la distribution RedHat LINUX 5.1, la liste des types MIME est définie dans le fichier /etc/mime.types ou bien /etc/httpd/conf/mime.types suivant la version d'Apache utilisée.
Le serveur HTTP standard (Apache) utilisant le port 80 par défaut, notre serveur vidéo attendra des requêtes HTTP pour le nouveau type MIME video/x-vcr (correspondant au format VCR) sur un autre port disponible (par défaut le port 2222). La différence notable entre notre serveur vidéo et Apache est que la liste des types reconnus par notre serveur est limitée au type video/x-vcr...
En résumé, la syntaxe à utiliser pour incruster un flux vidéo dans une page HTML est donc:
<EMBED SRC="http://monserveur:2222" WIDTH=320 HEIGHT=240>
Voici un petit exemple de dialogue entre un navigateur classique (Netscape 3.01 sous Win95) et le serveur vidéo actif sur le port 2222. Le serveur navigateur envoit la requête GET au serveur:
GET / HTTP/1.0 Connection: Keep-Alive User-Agent: Mozilla/3.01 (Win95; I) Host: vclive.atlantel.fr:2222 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
La requête est correcte, le serveur renvoit l'en-tête suivie des données:
HTTP/1.0 200 OK MIME-Version: 1.0 Content-Type: video/x-vcr ...
Un autre problème important à règler est le traitement des connexions multiples. Le serveur vidéo utilise pour cela le système du multi-threading disponible sur LINUX grâce à l'excellente bibliothèque LinuxThreads écrite par Xavier Leroy (xleroy@inria.fr) et téléchargeable à l'URL http://pauillac.inria.fr/~xleroy/linuxthreads. Cette bibliothèque implémente les threads POSIX 1003.1c en utilisant l'appel système clone() standard dans le noyau LINUX. L'utilisation d'une programmation par threads permet entre-autres de traiter relativement simplement le problème du controle de flux entre le serveur et les différents clients connectés, sachant que ceux-ci peuvent disposer de connexions aux performances très différentes (un client peut être connecté en local par ethernet et un autre par modem sur un accès Internet à faible bande passante).
Un système similaire est également utilisé pour créer des séquences VCR enregistrées (dans le cas ou une vidéo temps-réel n'est pas nécessaire ou trop onéreuse). Le site ViewSurf utilise une technologie de ce type, également basée sur le ViewCOM.