############################################################################### # MediaMTX - serveur media du systeme d'alarme. # # Role : recevoir le flux pousse par l'iPhone (SRT ou RTMP) et le re-publier # dans des formats lisibles par un navigateur (WebRTC, HLS). # # Pourquoi un service separe et pas du code Java : transporter de la video est # un probleme resolu, temps-reel et gourmand en I/O. Le faire transiter par la # JVM n'apporterait rien et couterait cher. L'application Spring Boot garde le # domaine d'alarme ; le media passe a cote. # # Pourquoi le telephone POUSSE au lieu d'etre interroge : en 4G comme derriere # la box du studio, l'iPhone n'a pas d'adresse joignable depuis Internet # (CGNAT operateur, NAT domestique, UPnP indisponible). Seule une connexion # sortante depuis le telephone fonctionne dans les deux cas. # # CE FICHIER EST GENERE depuis mediamtx.yml.template - ne pas l'editer a la main. ############################################################################### logLevel: info logDestinations: [stdout] readTimeout: 10s writeTimeout: 10s # API interne, utilisee pour la sonde de sante. Non publiee sur l'hote. api: yes apiAddress: :9997 ############################################################################### # Authentification # # Lecture publique : choix assume, le flux est une vitrine. # Publication authentifiee : sans ca, n'importe qui sur Internet pourrait # pousser sa propre video sur "biblio" et remplacer l'image du studio. ############################################################################### authMethod: internal authInternalUsers: - user: any pass: ips: [] permissions: - action: read - action: playback # Lecture seule de l'API, pour la sonde de presence de l'application. # Restreinte au reseau Docker interne : l'API n'est de toute facon pas # publiee sur l'hote, mais deux verrous valent mieux qu'un. - user: probe pass: __API_PASSWORD__ ips: ['172.16.0.0/12'] permissions: - action: api - user: iphone pass: __PUBLISH_PASSWORD__ ips: [] permissions: - action: publish path: live/biblio ############################################################################### # Entrees : ce que l'iPhone peut utiliser pour pousser ############################################################################### # SRT - a privilegier. UDP avec retransmission : encaisse la perte de paquets # d'un lien mobile la ou RTMP (TCP) se met a bufferiser puis decroche. srt: yes srtAddress: :8890 # RTMP - repli. Plus universellement supporte par les applications mobiles. rtmp: yes rtmpAddress: :1935 rtmpEncryption: "no" # MoQ (Media over QUIC) : experimental, aucun navigateur ne le consomme # aujourd'hui et la console ne l'utilise pas. Desactive. moq: no # RTSP desactive : l'iPhone n'est pas joignable en entrant, ce protocole # n'aurait aucun usage ici et ouvrirait une surface d'attaque de plus. rtsp: no ############################################################################### # Sorties : ce que le navigateur consomme ############################################################################### # WebRTC - chemin principal, latence inferieure a la seconde. webrtc: yes webrtcAddress: :8889 webrtcAllowOrigins: ['*'] webrtcLocalUDPAddress: :8189 # Le conteneur ne voit qu'une IP privee ; sans cette declaration, les # candidats ICE annonces seraient inutilisables depuis l'exterieur. webrtcIPsFromInterfaces: no webrtcAdditionalHosts: [__PUBLIC_IP__] # HLS - repli universel, ~6 s de latence. Couvre les reseaux d'entreprise # qui filtrent l'UDP et donc WebRTC. hls: yes hlsAddress: :8888 hlsAllowOrigins: ['*'] hlsVariant: lowLatency hlsSegmentCount: 7 hlsSegmentDuration: 1s hlsPartDuration: 200ms hlsAlwaysRemux: no ############################################################################### # Flux ############################################################################### paths: # 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: