
Avec Tacview Advanced et versions supérieures, vous pouvez diffuser des données de télémétrie en temps réel via le protocole public décrit dans cette documentation. Cette fonctionnalité est extrêmement utile pour surveiller en temps réel une bataille se déroulant dans un simulateur de vol, et sera ensuite étendue à l’aviation réelle afin que vous puissiez suivre un vol en cours à l’aide de smartphones et/ou d’enregistreurs de données à faible coût.
Tout comme le format acmi 2.x, le protocole de télémétrie en temps réel de Tacview a été conçu pour être très facile à utiliser. Il s’agit d’un protocole texte pur UTF-8 pouvant être implémenté dans la plupart des langages de programmation, y compris des langages de script tels que Lua. Après une simple négociation (connexion) avec Tacview, le flux de données devient continu, compact et fiable grâce au TCP/IP.
En résumé, le protocole de télémétrie en temps réel utilise un socket TCP/IP pour transmettre des données ACMI 2.x non compressées séquentielles.
L’application tierce est l’hôte de la session et Tacview est le client. Autrement dit, l’application tierce héberge une session en attente de un ou plusieurs clients Tacview qui se connecteront pour analyser les données en temps réel. Par exemple, plusieurs clients Tacview locaux ou distants peuvent se connecter simultanément aux exportateurs développés pour DCS World, FSX et X-Plane.
La première partie de la communication s’appelle la négociation (handshaking). Il s’agit d’un échange de données qui vérifie que l’hôte et Tacview utilisent le même protocole. Cet échange inclut le nom d’utilisateur de chaque partie ainsi que le hachage de mot de passe requis pour rejoindre une session protégée. Le nom d’utilisateur peut contenir n’importe quel caractère UTF-8, sauf des caractères de contrôle tels que \n.
Si l’une des parties n’est pas satisfaite des données de négociation, elle peut fermer la connexion avec un arrêt de socket propre.
Dès que les deux parties approuvent le protocole et le hachage du mot de passe, la transmission de télémétrie peut commencer. Voici un exemple de données échangées entre l’hôte et un client :
XtraLib.Stream.0␊
Tacview.RealTimeTelemetry.0␊
Host username␊
␀
Après l’établissement de la connexion socket, l’hôte envoie le protocole bas niveau et sa version XtraLib.Stream.0 suivi du protocole haut niveau Tacview.RealTimeTelemetry.0. La ligne suivante contient le nom d’utilisateur de l’hôte pour l’affichage et la dernière ligne est vide car l’hôte n’envoie pas le hachage du mot de passe.
Chaque ligne (sauf la dernière) se termine par le caractère \n. Le paquet de négociation se termine par un \0. Les exportateurs ou clients Tacview interrompront la connexion si la négociation prend trop de temps.
XtraLib.Stream.0␊
Tacview.RealTimeTelemetry.0␊
Client username␊
0␀
Une fois connecté, le client envoie des données similaires — y compris le hachage du mot de passe si nécessaire. Si aucun mot de passe n’est requis, le hachage est ignoré. S’il est requis mais incorrect, la connexion est fermée. Le hachage du mot de passe utilise CRC-64-ECMA du mot de passe UTF-16 (sans le caractère '\0').
Ni l’hôte ni le client ne communiquent explicitement la raison d’un refus. La connexion peut être fermée à tout moment. Une fois la connexion approuvée, l’hôte commence immédiatement l’envoi des données — aucun paquet de maintien en vie ou de requête n’est nécessaire.
FileType=text/acmi/tacview␊
FileVersion=2.2␊
Cela correspond au format acmi 2.x. Les données transmises correspondent au contenu d’un fichier ACMI non compressé.
0,ReferenceTime=2017-05-01T05:27:00Z␊
0,RecordingTime=2017-03-09T16:17:49Z␊
0,Title=test simple aircraft␊
0,DataRecorder=DCS2ACMI 1.6.0␊
0,DataSource=DCS 1.5.6.1938␊
0,Author=AuthorName␊
0,ReferenceLongitude=37␊
0,ReferenceLatitude=37␊
40000001,T=4.6789343|5.1865487|2000|617414|-291014,Type=Navaid+Bullseye,Color=Blue,Coalition=Enemies␊
40000002,T=1.987465|8.0833075|2000|371700|11557,Type=Navaid+Bullseye,Color=Red,Coalition=Allies␊
Pour réduire la latence, l’hôte doit envoyer un nouveau paquet de données à chaque image afin que Tacview puisse rejouer les données en direct au fur et à mesure qu’elles sont enregistrées.
#114.76␊
0,Category=CAP␊
101,T=4.8502002|4.9274637|20.26||-0.2|75.9|634576.06|-318348.25|69.9,Type=Air+FixedWing,Name=Su-27,Pilot=Vyrtuoz,Color=Red,Coalition=Allies,Country=ru,Debug=wsType[1.1.1.3],Importance=1,IAS=0,Throttle=0.72,Afterburner=0,AirBrakes=0,Flaps=1,LandingGear=1,Tailhook=0,HDM=63.28␊
Tacview ajuste automatiquement le minutage de lecture afin de maintenir de bonnes performances et une synchronisation fluide.
#114.87␊
101,T=4.8502023|4.9274641|||-0.3||634576.25|-318348.19|,HDM=63.29␊
Tacview ne coupe pas la connexion si l’hôte suspend temporairement le flux — il n’y a aucun délai d’expiration pendant la transmission.
Utilisez \n au lieu de \r\n pour économiser 1 octet par ligne.
Éviter les données redondantes
Si vos données tiennent dans un secteur de 10×10°, utilisez ReferenceLongitude et ReferenceLatitude afin de réduire la taille des coordonnées.
Exportez uniquement les chiffres significatifs pour réduire la bande passante. Des fonctions personnalisées printf() permettent d’éviter des zéros inutiles.
Résolutions recommandées :
| Property | Suggested resolution |
|---|---|
| # (frame time) | 0.01 s |
| T (longitude/latitude) | 0.0000001° |
| T (altitude) | 0.01 m |
| T (roll/pitch/yaw) | 0.1° |
| T (flat coordinates) | 0.01 m |
| AGL | 0.01 m |
| HDG | 0.1° |
| IAS | 0.1 m/s |
Optimisez la fréquence d’exportation par type d’objet afin d’équilibrer taille et latence.
| Object Type | Frequency |
|---|---|
| Player aircraft | 10 Hz (up to 16 Hz when remote) |
| Weapon | 8 Hz |
| Air objects | 5 Hz |
| Projectile / Bomb / Decoy / Ground | 2 Hz |
| Other objects | 1 Hz |
Accédez à la documentation, aux forums communautaires, ou contactez le support.