A la découverte du CITP
Le CITP (Controller Interface Transport Protocol) est un protocole à deux couches créé pour simplifier la communication entre les consoles, serveurs de médias et visualiseurs. Il s’agit d’un protocole IP mais il peut être “facilement” implémenté sur une autre couche de transport (exemple USB). Rentrons un peu plus dans le détail…
Un protocole à deux couches ?
- La couche haute (top layer) :
C’est le cœur du protocole, c’est cette couche qui permet de transporter les messages, de gérer la synchronisation des flux et la fragmentation des paquets. Il s’agit ni plus ni moins qu’un message d’en-tête respectant une structure. Il est présent sur chaque message CITP. - La seconde couche (second layer) :
Cette couche permet de transporter des messages spécifiques à un protocole, on retrouve pour l’instant les protocoles suivants : PINF, SDMX, FPTC, FSEL, FINF, MSEX, et OMEX. Chaqu’un de ces protocoles permet de répondre à une fonction particulière. Mais certains peuvent aussi fonctionner ensemble. Un constructeur est aussi libre de définir un nouveau protocole pour un besoin bien particulier.
Différents comportements
Le CITP peut s’utiliser de manières différentes en fonction de l’usage qu’on en aura, il est utilisé parallèlement en UDP (Datagram, sur le port 4809 avec l’adresse multicast 224.0.0.180) et en TCP.
Les différents protocoles supportés
CITP Header
Comme indiqué précédemment, le header est présent pour chaque message, c’est sur celui-ci que tient le protocole CITP. Il comporte des informations sur le protocole en tant que tel, il permet d’indiquer que le message circulant sur le réseau est de type CITP. On retrouve aussi des informations sur la version de CITP, permettant de gérer des montées de versions sans casser les implémentations actuelles des constructeurs. Ce header se termine par des informations sur le message (protocole) transporté.
CITP/PINF
Ce message permet de connaitre des informations sur un membre du réseau CITP, on y retrouve un nom (permettant d’identifier le matériel, le logiciel ou le constructeur), ainsi que des informations plus générales :
- Type : console lumière, serveur de médias, visualiseur.
- L’état : inactif (idle), en fonctionnement (running), etc…
CITP/SDMX
Le CITP permet aussi de transporter du DMX, le membre indique ses capacités, elles peuvent être de plusieurs types : Chls, SxSr, SXUS, Art-Net, BSR E1.31, ETC Net2, Ma-Net et son nom.
CITP/FPTC
Le FPTC (Ficture Patch Layer) est utilisé pour communiquer un plan d’adressage. Il permet aussi de venir patcher, depatcher un projecteur ou plus généralement un appareil (appelé fixture). Nous n’allons pas rentrer dans les détails mais les messages FSEL et FINF sont aussi liés à cet usage.
CITP/MSEX
Le Media Server eXtension Layer est certainement le message le plus intéressant et actuellement la plus utilisés sur les différentes implémentations de CITP. Il s’agit des messages permettant de communiquer avec les serveurs de médias. Il y a déjà plusieurs versions du MSEX (1.0, 1.1 et 1.2), il faut partager une même version entre deux membres mais une session globale MSEX peut contenir plus versions différentes. Le MSEX permet de faire transiter des images sur le réseau, plusieurs formats sont supportés (RGB8, JPEG, PNG). Pour le streaming de vidéos il est possible d’utiliser des images fragmentées (JPG, PNG). Ce protocole est découpés en plusieurs messages, en voici les principaux :
- CITP/MSEX/Cinf (Client Information Message)
Permet au client d’indiquer aux serveurs la version de MSEX supportée. Ce message est obligatoire et doit être envoyé par un client (et non un serveur). En général, le serveur de médias prendra la version du protocole la plus haute supportée par les deux membres. - CITP/MSEX/Sinf (Server Information Message)
Il s’agit d’une réponse au message CITP/MSEX/Cinf, on peut y retrouver en fonction des versions de MSEX les informations suivantes : un identifiant unique du serveur de médias, le format des miniatures et du streaming, ainsi que des informations DMX. - CITP/MSEX/Nack Negative Acknowledge Message
Permet au client d’indiquer qu’il ne comprend pas un message. - CITP/MSEX/LSta (Layer Status Message)
Message envoyé régulièrement (toutes les 4 secondes environ) permettant de donner des informations sur l’état d’un membre (numéro du layer actuellement joué, le nom du média joué, la taille du média joué, l’avancement du média média, le mode de lecture, etc…). - CITP/MSEX/Geli (Get Element Library Information)
Demandé d’un client pour un serveur de médias afin d’avoir des informations sur ou plusieurs éléments. - CITP/MSEX/ELIn (Element Library Information)
Réponse du serveur de média au message Geli
On retrouvera aussi plusieurs autres messages permettant de déterminer les sources vidéos (CITP/MSEX/VSrc) et le gérer le streaming (CITP/MSEX/RqSt CITP/SEX/StFr).
Le CITP/MSEX en utilisation
Voici une vidéo illustrant la connexion entre une console lumière (GrandMA2) et un serveur de médias (Arkaos).