Beta / pre-release. Test before installing on a live panel.
Changes
- Added a "Restart high-memory streams" quick tool that restarts live streams using over 750 MB of memory.
- Fixed two monitors starting the same stream at once killing each other's producer: a stream's (re)start now runs under a per-stream lock.
- Bounded ffmpeg's interleave buffer to 10 s instead of disabling it, so a live source with a stalled audio track no longer grows ffmpeg's memory until the OOM killer strikes.
- On-demand streams now honor their probe settings, and bulk line edits refresh the line cache.
- The player API returns a live stream's "added" field as a string, from the cache and the database alike.
- Legacy MPEG-TS viewers stay connected across a short producer restart.
- Reseller renewals commit the line and its cache refresh in one transaction, and reseller saves refresh the cached line, so authentication no longer reads the old expiry.
- Legacy database migration no longer reports success after a partial import or throws away its source: failed imports exit with an error and keep the source data, a lock prevents concurrent imports, an interrupted cleanup blocks unsafe retries, and large imports query table metadata once per table instead of once per row.
- Fixed Add/Save doing nothing on mobile for lines, MAG devices and Enigma2 devices after an expiry date was changed.
- Serve-only load balancers: the install fetches the fanout daemon as well as the agent, certbot runs root-owned through the node helper and hands the certificate to the front, and a reinstall keeps the node's fanout and certbot configuration and its certificate.
- Load balancers can run module source drivers that opt in to them.
- Fixed a serve-only node's stale fanout status being carried into its watchdog data, which kept restarting the release canary.
- The cache page counts streams per type (live, movies, episodes, ...) and flags rows whose type no page lists.
- Fixed badges in admin data tables being hard to read, the reseller customizer theme not being saved, an undefined-array-key warning when listing backups, and blocked user agents being checked against the wrong column when saved.
- M3U imports drop entries that have no path (m3u-parser 6.2); m3u-parser updated to 6.2.0 and mobiledetectlib to 4.11.0.
Update MAIN first; load balancers follow (keep MAIN and LBs on the same version).