+++
title = "Présentation et état des lieux d'Omniroom"
date = 2023-01-03
[taxonomies]
themes = ["streaming"]
etat = ["en cours"]
+++
Ce logiciel trouve ses début lors d'un événement où nous avons concu et animé une escape game avec des amis et nous avions un besoin de monitoring video très réactif afin d'aider les joueuses.
Le besoin:
- Avoir des cameras très légères et facilement déployable dans une ou plusieurs pièces
- Pouvoir consulter les flux vidéos rapidement et de facon accessible (sans installation de binaire sur le système)
- Le flux doit être le plus faible latence possible
Je suis donc partie sur le WebRTC:
![latences](/realisations/omniroom/latences.png)
Car cela solutionne à la fois la latence et l'accessibilité car compatible avec les naviguateurs actuels
La négociation WebRTC se fait souvent au travers d'un "signaling server", l'architecture se décrit donc comme ceci:
Clients <-> Signaling server <-> Cameras
Puis, une fois la négociation faite, voici l'échange des flux:
Clients <-> Cameras
(Ici j'ignore le fait qu'il puisse y avoir de la surcharge réseau)
La première version était en:
- Client: html+css+js
- Server: python
- Camera: C
J'utilise GStreamer pour la gestion du flux video et la négociation WebRTC, cela pourra changer à l'avenir en utilisant Gstreamer + [Webrtc-rs](https://github.com/webrtc-rs/webrtc) ou même ffmpeg + Webrtc-rs
J'ai depuis refondu tout ca et maintenant tout est en Rust
Il reste cependant un soucis de fonctionnement qui empeche le flux de passer alors que la négociation s'effectue bien.
Dépots git:
- [Client](https://github.com/room-2135/omniroom2-client)
- [Server](https://github.com/room-2135/omniroom2-server)
- [Camera](https://github.com/room-2135/omniroom2-camera)