From 9f7a3bece7e743137cbacb1f97c4e1d601d15f1e Mon Sep 17 00:00:00 2001 From: Adam Belkacemi Date: Sat, 12 Sep 2026 18:51:17 +0200 Subject: [PATCH] Chemin du flux en deux segments, et revalidation de la console Larix Broadcaster refuse une URL RTMP a un seul niveau : il impose le schema rtmp://serveur/application/streamkey et affiche "Can't find rtmp app and stream". Le chemin passe donc de "biblio" a "live/biblio", ce qui satisfait cette contrainte sans rien changer pour SRT. Au passage, un defaut mis en evidence par ce renommage : les ressources statiques etaient servies sans directive de cache. Un navigateur laisse ouvert continuait d'appeler l'ancien chemin, et la panne etait invisible cote serveur - il ne voyait que des requetes vers une route disparue. max-age=0 + must-revalidate : avec ETag, la revalidation coute un 304. Co-Authored-By: Claude Opus 5 --- deploy/mediamtx/mediamtx.yml.template | 12 ++++++++---- src/main/resources/application.yml | 15 ++++++++++++++- src/main/resources/static/stream.js | 2 +- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/deploy/mediamtx/mediamtx.yml.template b/deploy/mediamtx/mediamtx.yml.template index f4edbdc..b1149d6 100644 --- a/deploy/mediamtx/mediamtx.yml.template +++ b/deploy/mediamtx/mediamtx.yml.template @@ -57,7 +57,7 @@ authInternalUsers: ips: [] permissions: - action: publish - path: biblio + path: live/biblio ############################################################################### # Entrees : ce que l'iPhone peut utiliser pour pousser @@ -110,6 +110,10 @@ hlsAlwaysRemux: no # Flux ############################################################################### paths: - # Le capteur du studio. Nom volontairement aligne sur le deviceId utilise - # par le domaine d'alarme (iphone-biblio). - biblio: + # Le capteur du studio. + # + # Deux segments et non un seul : Larix Broadcaster impose le schema RTMP + # "rtmp://serveur/application/streamkey" et refuse de valider une URL a un + # seul niveau. Un chemin en deux segments satisfait cette contrainte sans + # rien changer pour SRT, qui accepte les deux formes. + live/biblio: diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index bf3f7b1..ee5ebb4 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -34,6 +34,19 @@ spring: enabled: true baseline-on-migrate: true + web: + resources: + cache: + cachecontrol: + # La console est un fichier statique servi par l'application, mais + # elle evolue a chaque deploiement. Sans revalidation, un navigateur + # laisse ouvert des jours continue d'appeler l'ancienne API - panne + # invisible cote serveur, qui ne voit que des requetes vers une route + # qui n'existe plus. ETag et Last-Modified rendent la revalidation + # quasi gratuite : 304 et rien dans le corps. + max-age: 0 + must-revalidate: true + threads: virtual: enabled: true @@ -91,7 +104,7 @@ alarm: # 3 sondes ratees = 60 s reelles sans image. En 4G, le flux tombe # regulierement sans que personne n'ait touche au telephone. offline-threshold: ${CAMERA_OFFLINE_THRESHOLD:3} - stream-path: ${CAMERA_STREAM_PATH:biblio} + stream-path: ${CAMERA_STREAM_PATH:live/biblio} api-url: ${MEDIA_API_URL:http://mediamtx:9997} api-user: probe api-password: ${MEDIA_API_PASSWORD:} diff --git a/src/main/resources/static/stream.js b/src/main/resources/static/stream.js index b4b5a40..c9d4bb1 100644 --- a/src/main/resources/static/stream.js +++ b/src/main/resources/static/stream.js @@ -18,7 +18,7 @@ (function () { 'use strict'; - const STREAM = 'biblio'; + const STREAM = 'live/biblio'; const WHEP_URL = '/webrtc/' + STREAM + '/whep'; const HLS_URL = '/hls/' + STREAM + '/index.m3u8';