# Diffusion du conseil municipal

Solution de diffusion en direct du conseil municipal de la ville d'Échirolles.

La solution repose sur des caméras tourelles permettant l'intégration des flux vidéo en temps réel, le pilotage à distance depuis OBS et la diffusion multi-plateformes. OBS Studio est utilisé pour la gestion des caméras et la réalisation en direct du conseil.

# Installation d'OBS Studio sur Zorin OS (ou Ubuntu)

#### Avant propos

OBS Studio est le logiciel libre utilisé par la ville pour diffuser le conseil municipal, et d’autres manifestations, en direct. Cette prodédure décrit l’installation du logiciel et des plugins nécessaires à son fonctionnement, dans l’environnement qui est le nôtre.

#### Prérequis

→ ZorinOS peut-être téléchargé [en cliquant sur ce lien](https://zorin.com/os/download/). Choisir la version Core.

### Installation d’OBS Studio

1. Cette procédure nécessite l’installation préalable de [Zorin OS Core](https://wiki-dsi.echirolles.fr/Proc%C3%A9dures/Bureautique/zorin-installation), dans sa dernière version (version 17 au jour de la rédaction).
2. Ajouter le PPA permettant l’installation de la dernière version d’OBS Studio :
    
    ```
    sudo add-apt-repository -y ppa:obsproject/obs-studio
    sudo apt update
    ```

Installer la dernière version d’OBS Studio :

```
sudo apt install obs-studio
```

<div class="toolbar" id="bkmrk-"></div><p class="callout warning">Attention : **n’installez pas le paquet obs-plugins**</p>

### Installation de NDI

NDI (ou NDI-HX) est un protocole temps réel qui permet de découvrir les caméras compatibles connectées **sur le même réseau**, de récupérer le flux vidéo et de l’intégrer simplement à OBS. L’avantage de NDI, par rapport aux protocoles vidéo standard (RTSP, par exemple) est qu’il permet d’obtenir un flux en temps réel, et donc de ne pas avoir de décalage entre l’audio et la vidéo.

L’installation se déroule en deux temps :

#### 1. Installation du runtime NDI (propriétaire)

La procédure d'installation se trouve [sur cette page](https://github.com/DistroAV/DistroAV/wiki/1.-Installation) (voir section : Required Components - NDI Runtime / Linux)

<div class="toolbar" id="bkmrk--1"></div><div class="toolbar" id="bkmrk--2"></div><div class="toolbar" id="bkmrk--3"></div>#### 2. Installation du plugin DistroAV (anciennement OBS-NDI)

1. Télécharger le paquet depuis [cette page Github](https://github.com/obs-ndi/obs-ndi/releases/) (à la date de rédaction de cette documentation, il s’agit du paquet **distroav-6.1.1-x86\_64-linux-gnu.deb**).
2. L’installer.

Lancer OBS Studio et vérifier que, quand on rajoute une source (clic droit dans le dock « Sources »), le choix « Source NDI™ » est bien disponible dans le menu.

### Installation de PTZ Controls

PTZ Controls est un plugin qui permet de piloter les caméras depuis OBS Studio. La page Github du projet [se trouve ici](https://github.com/glikely/obs-ptz).

1. Télécharger la version la plus récente du paquet [depuis cette page](https://github.com/glikely/obs-ptz/releases) (à la date de rédaction de cette documentation, il s’agit du paquet **obs-ptz-0.17.0-x86\_64-linux-gnu.deb**).
2. Installer le paquet.

<p class="callout danger">Attention, le point 3 ci-dessous est important : il existe une dépendance mal documentée pour faire fonctionner PTZ Controls. Si vous ne l’installez pas, PTZ Controls n’apparaîtra pas dans le menu « Docks » d’OBS Studio !</p>

3. Conformément à l’alerte ci-dessus, installer ce paquet :
    
    ```
    sudo apt install libqt6serialport6
    ```

Lancer OBS Studio. Dans le menu « **Docks** », un nouveau dock « **PTZ Controls** » devrait être présent. Sélectionner le dock et le glisser en bas, entre « Sources » et « Mélangeur audio » par exemple.

<p class="callout success">→ Vous devriez disposer d’un OBS Studio opérationnel.</p>

<p class="callout info">Auteur original de cette documentation : [Nicolas Vivant](https://www.linkedin.com/in/vivant/).</p>

# Matériel et setup

[Échirolles](https://www.echirolles.fr) a conçu le streaming de son conseil municipal avec le maximum d’outils libres (et environ 6000 € d’investissement), un thread testé et approuvé en 7 points.  
Si ça peut aider…

##### 1. Les caméras.

- Acquisition de 2 caméras-tourelles POE compatibles avec le protocole NDI (modèle : [Avonic CM70-NDI](https://avonic.com/fr/produit/ndi-ptz-camera-20x-zoom-white/)).
- Le POE (Power Over Ethernet) permet de les alimenter et de récupérer les flux vidéos avec un câble unique.

##### 2. Le son.

- Une carte son [Scarlett 2i2 3rd generation](https://focusrite.com/fr/usb-audio-interface/scarlett/scarlett-2i2) : 2 entrées XLR/gros jacks (6.35 mm), une sortie USB-C → USB direction le PC.

##### 3. Le réseau.

- Un switch 8 ports POE, sur lequel le PC et les caméras sont connectés.

##### 4. La machine.

- Un PC sous [Zorin OS](https://zorin.com/os/) Core, avec un processeur récent (Intel Core i5 ou AMD Ryzen équivalent), 16 Go de mémoire, et un disque dur SSD de 500 Go minimum.

##### 5. Le logiciel.

- [OBS Studio](https://obsproject.com/fr) avec libndi, DistroAV (anciennement OBS-NDI) et [PTZ Controls](https://github.com/glikely/obs-ptz).
- [PTZ Controls](https://github.com/glikely/obs-ptz) permet de piloter les caméras et de gérer les prépositions directement depuis OBS.

##### 6. Le graphisme.

- Le service communication fournit l’habillage et les polices, choisit le cadrage, etc.

##### 7. La diffusion.

- Un serveur [Peertube](https://joinpeertube.org/) pour publier les vidéos du conseil municipal.
- [https://video.echirolles.fr](https://video.echirolles.fr/) si vous voulez voir à quoi ressemble le résultat.

Nota :

- cette solution est couplée à BigBlueButton, notre solution libre de visioconférence, une intégration décrite dans [un autre article](https://france-numerique-libre.org/visioconference-et-streaming-libres/).
- un serveur rtmp interne (via un module nginx) permet de compenser la limitation d’OBS Studio (un seul flux de streaming possible) et de diffusion sur plusieurs plate-formes, une autre solution qu’il serait utile de documenter. Au moins deux plugins pour OBS permettent de faire la même chose dans passer par un serveur dédié : [Aitum Multistream](https://obsproject.com/forum/resources/aitum-multistream.1991/) et [Multistream by Streamway](https://obsproject.com/forum/resources/multistream-by-streamway.1882/)

<p class="callout info">Auteur original de cette documentation : [Nicolas Vivant](https://www.linkedin.com/in/vivant/).</p>

# Intégration de BigBlueButton (visioconférence)

#### Avant-propos

Pour les visioconférences, nous avons fait le choix de [BigBlueButton](https://bigbluebutton.org). Utilisable depuis un navigateur web, ses fonctionnalités de vote, de gestion de la parole et des présentations semblent adaptées pour une participation à distance en conseil municipal. Pour ce faire, un certain nombre de points sont incontournables :

1. les participantes et participants doivent pouvoir se voir, dans la visioconférence et dans la salle ;
2. ils doivent pouvoir s’entendre et interagir de façon fluide ;
3. une présentation, réalisée en salle ou à distance doit être également visible par toutes et tous ;
4. tout cela doit être accessible dans la diffusion en ligne, en direct et en rediffusion.

Trouver la solution nous a pris un peu de temps, et c’est pourquoi il me semble utile de la partager.

## Se voir

Dans OBS, nous disposons déjà des images de la salle. L’utilisation de la fonctionnalité « caméra virtuelle » du logiciel va permettre de transformer ce flux en caméra, et de l’envoyer dans BigBlueButton. Il convient d’activer la fonction, puis d’utiliser son navigateur (Firefox, chez nous) sur la même machine pour rejoindre la visioconférence. Une caméra « OBS » est alors proposée, il suffit de l’activer et le flux vidéo est automatiquement transmis dans la réunion. Le son de la salle, en revanche, sera transmis par un autre moyen. Il ne faut donc pas l’activer.

Une capture de la fenêtre de visioconférence dans une scène OBS dédiée permet de diffuser l’image de la visioconférence quand c’est utile. Dans la salle, un PC connecté dans la visioconférence permettra de retransmettre les images sur un écran ou un vidéoprojecteur, toujours sans le son et avec un minium de délai (moins d’une seconde).

## S’entendre

C’est là que les choses se compliquent. Dans notre conseil municipal, les élu·e·s parlent dans des micros et s’entendent dans les bas parleurs de ces mêmes micros. Un système intégré à la console de gestion permet d’éliminer l’écho, de telle sorte qu’un micro activé ne reprend pas le son diffusé dans les bas parleurs. Dans le cas contraire, un larsen ne manquerait pas de se produire. Le problème est le même pour une intervention dans la salle en visioconférence : l’écho doit absolument être éliminé.

Nous avons donc utilisé la console de gestion des micros pour gérer le son de la visioconférence. Un PC dédié, sous Zorin OS, est connecté dans le salon via le navigateur Firefox. Il reçoit le son des micros depuis la console, et le renvoie dans la console pour que les interventions depuis BigBlueButton soient audibles dans la salle via les bas parleurs. Ce ce que décrit la partie encadrée en rouge ci-dessous.

[![obs-bbb-audio-1024x724.jpg](https://documentation.echirolles.fr/uploads/images/gallery/2025-06/scaled-1680-/obs-bbb-audio-1024x724.jpg)](https://documentation.echirolles.fr/uploads/images/gallery/2025-06/obs-bbb-audio-1024x724.jpg)

Autre initiative intéressante : l’utilisation d’un serveur RTMP qui nous permet de contourner une limitation d’OBS, qui ne peut diffuser qu’un seul flux à la fois (deux, en fait, si on considère la fonction de caméra virtuelle comme un flux à part entière), et de récupérer le flux depuis n’importe quel PC pour de l’affichage en direct sur un ou plusieurs écrans distants. Installé sur notre serveur de visioconférence BigBlueButton, il permet de diffuser sur un nombre indéfini de plate-formes. À Échirolles, nous diffusons sur Facebook, la page de la ville étant plutôt bien suivie, et sur notre serveur Peertube pour une meilleure qualité et une meilleure intégration sur notre site web (Drupal).

Ainsi, les habitant·e·s qui ne disposent pas (ou ne souhaitent pas disposer) d’un compte Facebook peuvent assister au conseil en ligne, sans contrainte, algorithme ou publicité intempestive.

Si vous souhaitez diffuser sur plusieurs plateformes et que la mise en place d’un serveur RTMP vous semble trop lourde, au moins deux plugins pour OBS permettent de faire la même chose dans passer par un serveur RTMP dédié : [Aitum Multistream](https://obsproject.com/forum/resources/aitum-multistream.1991/) et [Multistream by Streamway](https://obsproject.com/forum/resources/multistream-by-streamway.1882/).

L’ensemble des vidéos d’Échirolles peuvent être consultées sur notre compte Peertube : [https://video.echirolles.fr](https://video.echirolles.fr).

<p class="callout info">Auteur original de cette documentation : [Nicolas Vivant](https://www.linkedin.com/in/vivant/).</p>

# Intégration de présentations (ZowieBox)

Un-e présentateur-ice veut projeter une présentation, soit depuis le PC à disposition, soit depuis le sien. On veut récupérer les diapos :

- sur l’écran de projection (écran télé) ;
- sur le vidéoprojecteur (salle des mariages, mais en plus grand) ;
- sur le stream Peertube

### La solution

Nous avons choisi d'utiliser une ZowieBox ([voir ici](https://zowietek.com/product/4k-video-streaming-encoder-decoder/)).

Connectée au réseau, la ZowieBox permet, à partir d'une entrée HDMI, d'obtenir plusieurs flux en sortie sur le réseau. Une sortie HDMI permet également de récupérer le signal vidéo en direct.

### Schéma

<div class="diagram" id="bkmrk-text-is-not-svg---ca">[![Capture d’écran du 2025-06-20 18-24-42.png](https://documentation.echirolles.fr/uploads/images/gallery/2025-06/scaled-1680-/capture-decran-du-2025-06-20-18-24-42.png)](https://documentation.echirolles.fr/uploads/images/gallery/2025-06/capture-decran-du-2025-06-20-18-24-42.png)</div>### ZowieBox

La ZowieBox prend une IP en DHCP. Elle réagit bien à un débranchement/rebranchement de l’HDMI d’entrée. Elle exporte :

- une sortie pass-through HDMI, qui réagit également bien au débranchement/rebranchement de l’HDMI d’entrée comme de sortie ;
- des flux rtsp, qui fonctionnent bien, mais ont quelques soucis : 
    - lorsque le flux est interrompu (veille de l’ordinateur de présentation, HDMI débranché, …), le flux est **coupé**. Le comportement des lecteurs de flux diffère : conservation de la dernière image, quitter, … Pas extrêmement pratique. On ne peut pas non plus se connecter au flux tant qu’aucun écran ne projette dessus.
    - après branchement d’un flux, il faut quelques secondes avant que le flux ne revienne. Si on s’y connecte trop vite, il y a une latence assez pénible (quelques 100ms) qui persiste dans le temps, alors que tout se passe beaucoup mieux si on s’y connecte quelques secondes après.
- un flux NDI. Protocole propriétaire, mais qui marche globalement mieux.

Les paramètres du flux d’entrée (résolution + fréquence) sont repris pour l’encodeur *à chaque branchement d’HDMI d’entrée*. Une fréquence à 60Hz donne une mauvaise qualité d’image (plein d’artefacts) ; il faut baisser cette fréquence à 25 ou 30Hz.

### PC Zorin de projection

On utilise [obs](https://obsproject.com/) pour afficher le flux NDI. L’installation n’est pas évidente avec NDI.

- installer obs-studio :

```bash
sudo apt install obs-studio  # version 30.2.3 à cette date
```

<div class="toolbar" id="bkmrk--1"><div class="toolbar-item">  
</div></div>- installer libndi **en version 5** : aujourd’hui (2025-02-17), la version 6 n’arrive pas à décoder un flux NDI correctement. Récupérer [libndi-get.sh](https://github.com/DistroAV/DistroAV/blob/master/CI/libndi-get.sh), puis

```bash
$EDITOR libndi-get.sh  # modifier la ligne 4, v5 -> v6
sudo bash ./libndi-get.sh  # installer
```

<div class="toolbar" id="bkmrk--2"><div class="toolbar-item">  
</div></div>- installer DistroAV aka obs-ndi. Récupérer le `.deb` dans les [releases GitHub](https://github.com/DistroAV/DistroAV/releases/) (en version 4.13.0 en février 2025), puis

```bash
sudo apt install ./obs-ndi-*.deb
```

<div class="toolbar" id="bkmrk--3"><div class="toolbar-item">  
</div></div>- Lancer OBS. Ajouter une source NDI (appelée eg. « ZowieBox »), sélectionner la bonne source (le PC doit être dans le même VLAN que la zowiebox).
- Mettre la source en plein écran : clic droit sur la source, `Projecteur plein écran (source)` -&gt; `Moniteur ...`

### Pendant les présentations

- à chaque débranchement du câble HDMI : remettre en 30Hz l’encodeur de la ZowieBox (à la main…)
- gérer OBS comme pour les diffusions du conseil
- Si ça plante, essayer de : 
    - Vérifier tous les branchements
    - Redémarrer OBS et la projection plein écran
    - Redémarrer la ZowieBox (reboot électrique) (1 min de boot environ ?)
    - Redémarrer les ordinateurs

<p class="callout info">Auteur original de cette documentation : [Philippe Le Brouster](https://www.linkedin.com/in/philippe-le-brouster-24a475161/).</p>