Wiki du LOL

Construire ensemble

Outils pour utilisateurs

Outils du site


screen_wall

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
screen_wall [2025/12/20 09:39] – Ajout de la configuration dnsmasq, du script iPXE et de la configuration nginx mirsalscreen_wall [2026/05/04 14:08] (Version actuelle) – Ordre X, Y mirsal
Ligne 70: Ligne 70:
 ===== Production du flux video ===== ===== Production du flux video =====
  
-On utilise ffmpeg pour convertir le flux initial aux bonnes dimensions en utilisant les filtres [[https://ffmpeg.org/ffmpeg-filters.html#scale-1|scale]] puis [[https://ffmpeg.org/ffmpeg-filters.html#pad-1|pad]].+On utilise ffmpeg pour convertir le flux initial aux bonnes dimensions en utilisant les filtres [[https://ffmpeg.org/ffmpeg-filters.html#scale-1|scale]] puis [[https://ffmpeg.org/ffmpeg-filters.html#pad-1|pad]]. On utilise VLC pour émettre un flux rtp  multicast.
  
-  ffmpeg -re -i <input-file> -map 0:v -map 0:a -vf "scale=2560x2048:force_original_aspect_ratio=decrease,pad=w=2560:h=2048:x=in_w/2-out_w/2:y=in_h/2-out_h/2" -c:v mpeg2video -b:v 1M -f mpegts "udp://127.0.0.1:5020/"+  ffmpeg -re -stream_loop -1 -i <input_file> -map 0:v -vf "scale=2560x2048:force_original_aspect_ratio=decrease,pad=w=2560:h=2048:x=in_w/2-out_w/2:y=in_h/2-out_h/2" -c:v mpeg2video -b:v 20M -f mpegts - | cvlc - --sout="#rtp{mux=ts,dst=239.255.255.250,port=5010}"
  
-On utilise ensuite VLC pour emettre un flux rtp en multicast.+L'émission d'un flux multicast nécessite l'installation d'une route:
  
-  cvlc "udp://@:5020" --sout="#rtp{mux=ts,dst=239.255.255.250,port=5010}"+  ip route add multicast 239.255.255.250 dev $IFACE
  
 ===== Affichage sur les ecrans ===== ===== Affichage sur les ecrans =====
- 
  
 On utilise un serveur X sans gestionnaire fenêtre. On utilise un serveur X sans gestionnaire fenêtre.
Ligne 86: Ligne 85:
   cvlc --width 1280 --video-splitter=wall --wall-cols=3 --wall-rows=1 --wall-active=0   cvlc --width 1280 --video-splitter=wall --wall-cols=3 --wall-rows=1 --wall-active=0
  
 +La géométrie est configurée au lancement des instances clientes, en fonction du placement des écrans:
 +
 +  #!/bin/sh
 +  ssh -oStrictHostKeyChecking=no 192.168.212.101 -lroot -i ~/.ssh/videowall_ed25519 'su - user -c "DISPLAY=:0 xset dpms 0 0 0; DISPLAY=:0 cvlc --video-splitter=wall --wall-rows=2 --wall-cols=1 --wall-active=0 rtp://239.255.255.250:5010"' &
 +  ssh -oStrictHostKeyChecking=no 192.168.212.102 -lroot -i ~/.ssh/videowall_ed25519 'su - user -c "DISPLAY=:0 xset dpms 0 0 0; DISPLAY=:0 cvlc --video-splitter=wall --wall-rows=2 --wall-cols=2 --wall-active=2 rtp://239.255.255.250:5010"' &
 +  ssh -oStrictHostKeyChecking=no 192.168.212.103 -lroot -i ~/.ssh/videowall_ed25519 'su - user -c "DISPLAY=:0 xset dpms 0 0 0; DISPLAY=:0 cvlc --video-splitter=wall --wall-rows=2 --wall-cols=2 --wall-active=3 rtp://239.255.255.250:5010"' &
 +
 +Pour desactiver la gestion de l'energie qui eteins les ecrans. On ajoute dans le script de demarrage de X les commandes suivantes:
 +
 +    # Disable screen saving
 +    xset s off
 +    xset -dpms
 +    xset s noblank
 +
 +===== PoC =====
 +
 +{{:signal-2025-12-20-110331_002.jpeg?600|}}
 +{{:signal-2025-12-20-110331_003.jpeg?600|}}
 +{{:signal-2025-12-20-110431_002.jpeg?600|}}
 +
 +
 +===== Installation Drags & Nerds =====
 +
 +Pour la soirée Drags & Nerds, Une station avec OBS est utilisée pour capturer les performances live et orchestrer la diffusion du flux vidéo. Le flux sortant d'OBS est envoyé vers un socket UNIX auquel est connectée une instance de ffmpeg qui re-encapsule et renvoie le flux vers VLC pour la diffusion en RTP multicast:
 +
 +  #!/bin/sh
 +  mkdir -p /tmp/obs
 +  sudo ip route add multicast 239.255.255.250 dev enp0s25 || true
 +  ffmpeg -fflags nobuffer -re -flags low_delay -f mpegts -listen 1 -i unix:///tmp/obs/obs.sock -map 0:v -c copy -f rtp rtp://239.255.255.250:5010
 +
 +OBS est configuré pour envoyer le flux vidéo vers le socket UNIX sur lequel ffmpeg écoute:
 +
 +{{:screenshot_from_2026-05-03_21-20-53.png?800|}}
 +
 +Les différents clients récupèrent le flux RTP multicast et l'affichent via ffplay:
 +
 +==== Mur de LED ====
 +
 +  ffplay -noborder -fflags nobuffer -an -fast -left 0 -top 0 -x 192 -y 384 -i rtp://239.255.255.250:5010 -vf scale=w=iw:h=384:force_original_aspect_ratio=decrease,crop=w=192:h=ih,eq=brightness=-0.3
 +
 +==== Écran simple ou vidéo-projecteur ====
 +
 +  DISPLAY=:0 ffplay -sync ext -framedrop -flags low_delay -fflags nobuffer -probesize 32 rtp://239.255.255.250:5010 -fs
 +
 +==== Affichage partiel sur deux écrans ====
 +
 +  # 0 - 0
 +  DISPLAY=:0 ffplay -fflags nobuffer -noborder -x 2560 -y 1024 -left 0 -top 0 -probesize 32 -framedrop -sync ext rtp://239.255.255.250:5010 -vf "scale=w=1280*4:h=1024*3:eval=frame,crop=w=2560:h=1024:x=0:y=0"
 +
 +  # 0 - 1
 +  DISPLAY=:0 ffplay -fflags nobuffer -noborder -x 2560 -y 1024 -left 0 -top 0 -probesize 32 -framedrop -sync ext rtp://239.255.255.250:5010 -vf "scale=w=1280*4:h=1024*3:eval=frame,crop=w=2560:h=1024:x=0:y=1024"
 +
 +  # 0 - 2
 +  DISPLAY=:0 ffplay -fflags nobuffer -noborder -x 2560 -y 1024 -left 0 -top 0 -probesize 32 -framedrop -sync ext rtp://239.255.255.250:5010 -vf "scale=w=1280*4:h=1024*3:eval=frame,crop=w=2560:h=1024:x=0:y=2048"
 +
 +  # 1 - 0
 +  DISPLAY=:0 ffplay -fflags nobuffer -noborder -x 2560 -y 1024 -left 0 -top 0 -probesize 32 -framedrop -sync ext rtp://239.255.255.250:5010 -vf "scale=w=1280*4:h=1024*3:eval=frame,crop=w=2560:h=1024:x=2560:y=0"
 +
 +  # 1 - 1
 +  DISPLAY=:0 ffplay -fflags nobuffer -noborder -x 2560 -y 1024 -left 0 -top 0 -probesize 32 -framedrop -sync ext rtp://239.255.255.250:5010 -vf "scale=w=1280*4:h=1024*3:eval=frame,crop=w=2560:h=1024:x=2560:y=1024"
 +
 +  # 1 - 2
 +  DISPLAY=:0 ffplay -fflags nobuffer -noborder -x 2560 -y 1024 -left 0 -top 0 -probesize 32 -framedrop -sync ext rtp://239.255.255.250:5010 -vf "scale=w=1280*4:h=1024*3:eval=frame,crop=w=2560:h=1024:x=2560:y=2048"
screen_wall.1766223592.txt.gz · Dernière modification : de mirsal