Contents Next

1   Description générale du projet

1.1   Objectif

L'objectif du projet est de concevoir et de réaliser un serveur de webcams contrôlable par un administrateur.

Le serveur gère des webcams qui lui sont connectées physiquement. Les clients peuvent demander à recevoir le flux vidéo d'une des caméras pour affichage sur leur écran. Pour cela les clients se connectent sur le serveur par telnet ou nc et utilisent des commandes ASCII. Les commandes permettent, entre autres, de lister les caméras disponibles et de demander au serveur d'envoyer le flux vidéo d'une caméra sur un serveur d'affichage. Le serveur d'affichage se charge d'envoyer dans une fenêtre X11 les images qui lui sont envoyées par la liaison TCP.

L'administrateur, chargé de la gestion des webcams et des utilisateurs, peut à tout moment intervenir pour :

1.2   Architecture générale de l'application

L'application est constituée de 3 exécutables : le serveur de webcams, le client d'administration et le serveur d'affichage. Pour permettre de traiter simultanément les requêtes de plusieurs clients ainsi que celles de l'administrateur, le serveur doit être multithreadé. Un thread est lancé pour chaque connexion de client, ce thread est chargé de satisfaire les requêtes de ce client.

De même, un thread est chargé de traiter d'éventuelles requêtes de l'administrateur. Pour chacune de ses requêtes, l'administrateur lance le client d'administration. Celui-ci communique avec le serveur principal par IPC (Files de messages).

1.3   Les requêtes client

Un client, ayant obtenu une connexion par nc <hote> <port> peut émettre les requêtes suivantes au serveur :
lister_cams :
lister les caméras configurées (avec le nombre d'utilisateurs la visualisant),
voir_cam <n> <mot de passe> [<hote>[<port>]] :
demander l'envoi du flux vidéo de la caméra numéro <n> (dont le mot de passe d'accès est <mot de passe>) sur le serveur d'affichage écoutant sur la machine <hote> (celle du client par défaut) et sur le port <port> (le port 5000 par défaut),
quitter :
se déconnecter.

1.4   Les requêtes administrateur

L'administrateur lance le client d'administration chaque fois qu'il veut effectuer une requête (la requête est fournie en argument). Dans un premier temps, on suppose que les requêtes sont effectuées séquentiellement, c'est à dire que l'administrateur ne lance qu'un client d'administration à la fois. Les requêtes que peut effectuer l'administrateur sont les suivantes :
list_cams :
lister toutes les webcams (configurées ou non),
nouv_cam <fichier système> <largeur>x<hauteur> [<palette>] :
ajouter la webcam à la table du serveur avec le fichier spécial, la résolution et éventuellement la palette spécifiés (si le numéro de palette n'est pas spécifié le serveur tentera de le trouver),
conf_cam <n> <description> <mot de passe> :
rendre la webcam numéro <n> décrite par le texte <description> disponible aux utilisateurs (enfin à ceux connaissant le mot de passe spécifié),
capt_cam <n> <fichier>:
prendre un cliché sur la caméra <n> et le sauver dans <fichier>,
supp_cam <n> :
supprimer la caméra numéro <n>,
lister_clients :
lister tous les utilisateurs connectés avec le nom de la machine d'où ils se connectent et les webcams qu'ils visualisent,
coup_client <n> <client> :
arrêter l'envoi du flux vidéo de la caméra <n> pour le client client,
supp_client <client> :
terminer la connexion du client,
stop :
stopper le serveur,
aide :
obtenir la liste des requêtes possibles.
Tout dialogue nécessaire entre le serveur principal et le client d'administration est réalisé par des communications IPC (envoi et réception de messages).

1.5   Le serveur principal

Le processus serveur tourne en tâche de fond. Il doit pouvoir traiter les demandes de connexion des clients, les requêtes des clients connectés et les requêtes du client d'administration. Pour cela, il lance un thread chargé de traiter la file de messages dans laquelle sont déposées les requêtes de l'administrateur et un thread "client" pour chaque connexion sur son port d'écoute. Ce dernier thread est chargé de traiter les requêtes du client connecté.


Contents Next