Standalone Python exporter that polls go2rtc /api/streams and Frigate
/api/stats every 15s, tracking bytes_recv deltas to detect stalled
streams. Exposes metrics on port 9199 including stream_up,
bytes_per_second, consumers, and camera_fps.
The websockets library defaults to ping_interval=20, ping_timeout=20.
go2rtc doesn't respond to these pings, so the upstream WebSocket was
being killed after ~50 seconds causing all camera streams to freeze.
Disabled ping_interval and ping_timeout on the upstream connection.
- Add auto-reconnect with exponential backoff to MSE and WebRTC streams
when connections drop, preventing permanent freezes in grid view
- Add onDisconnect callback to Go2RTCWebRTC (connectionstate monitoring)
and Go2RTCMSE (WebSocket close detection)
- Fix alert camera names to use Frigate names (Front_Porch, etc.)
instead of display names which never matched MQTT events
- Disable offline WyzePanV3 camera
- Switch from WebRTC-first to MSE-first streaming (more reliable
across all camera types including high-res IP cameras)
- Send required {"type":"mse"} init message to go2rtc WebSocket
- Fix infinite re-render loop in configStore (pre-compute enabled
cameras instead of deriving in selector)
- Fix mqtt_bridge global variable scope in broadcast()
- Add React ErrorBoundary for visible crash reporting
- Remove unused go2rtcUrl dependency from useStream hook