On-site deployment — quick guide ================================= Three independently startable, self-contained pieces (each can be copied and handed off on its own — none depend on files outside their own folder): streaming/ Receiver: MediaMTX + control API (RTMP :1935, control API :8080). host-app/ Operator app (static). -> http://localhost:4173/ viewer/ LED-wall viewer (static). -> http://localhost:4174/ 1. Prerequisites on the target PC ---------------------------------- - Node.js (v22+) on PATH — required by all three pieces. - Firewall: allow INBOUND to MediaMTX on the LAN (RTMP :1935 at minimum — the drone/OBS publishes there). A blocked inbound rule (Avast and Windows Defender have both done this) fails SILENTLY: MediaMTX starts fine, the control API's /status looks fine, but the drone path never goes "online" — nothing to see on the receiver side, so check the firewall first if streaming/start.bat runs but nothing ever comes through. 2. Copy the bundle ------------------- Copy this whole onsite-bundle/ folder to the target PC(s) — or just the relevant subfolder(s) if streaming/host-app/viewer run on separate machines. 3. Configure ------------ - streaming/: copy .env.example to .env and adjust if needed. MediaMTX defaults assume the same PC at 127.0.0.1 — fine for a single-PC setup. WEB_BASE_URL is REQUIRED (ships pointing at production, https://drone.mec-link.com) — without it every clip/photo upload fails silently, the session looks fine but guests never get anything. Must match host-app/viewer's webBase below. - host-app/config.json and viewer/config.json (IMPORTANT — check these on every deploy): each has controlApi/webBase fields, baked in at build time from host-app/public/config.json. Shipped in THIS bundle: controlApi: http://127.0.0.1:8080 (fine for a single-PC setup) webBase: https://drone.mec-link.com (production web app) Edit either file directly if the receiver isn't on the same PC (controlApi -> the receiver's LAN URL, e.g. http://192.168.1.50:8080) or the session should point at staging instead of production (webBase). No rebuild, no re-running pack:onsite — just restart the two static servers (step 4b/4c) to pick it up. 4. Start (for a single-PC test setup), IN THIS ORDER ------------------------------------------------------ a) streaming/start.bat — this ALSO starts MediaMTX (see 'Start-Process ... mediamtx.exe' in streaming/start.ps1), you don't launch MediaMTX separately. Wait for the console to print "control API on :8080" before continuing. b) host-app/start.bat — operator app, http://localhost:4173/ c) viewer/start.bat — LED-wall viewer, http://localhost:4174/ This is the quickest path to a working setup on one PC. If streaming/host-app/ viewer run on separate machines, or you're starting them another way (e.g. as a service instead of double-clicking start.bat), adjust to fit — the only real constraint is that streaming/ (step a) must be up before host-app/viewer are used. 5. Verify it's working ----------------------- - http://localhost:8080/status -> streamReady should flip to true once the drone/OBS starts publishing to rtmp://:1935/drone (stream key "drone"). - http://localhost:9997/v3/paths/list -> the "drone" path should show online:true, available:true once a stream is connected. - Open host-app (:4173) and start a session; the live preview should show video. If host-app/viewer can't reach the receiver or web app, re-check step 3 — host-app/config.json / viewer/config.json is almost always the answer.