Connections
Live viewer sessions across all active channels, read from the active_connections table. Same data as the Connections tab inside Clients; this is the full-page version with its own Refresh button.
On this page
Connections is in Monitor (2.9.402)
The Connections page now opens Monitor › Now: Who is watching is the same list with recordings and films, Details and Stop (was Kick). The Connections tab on the Clients page stays until the next update. Staff logins see shortened addresses there too.
See who is watching right now
Connections in the sidebar. The "Active Now" tile counts the rows; the table shows User, IP Address, Channel, Started and a Kick button. The page header carries "Clients" (jump back to the client list) and "Refresh" — there is no auto-refresh, so re-press Refresh to re-poll.
Kick a session
Press "⚡ Kick" on the row and confirm. The session is archived into watch history and the row is deleted, which frees the subscriber's connection slot immediately. The identical action exists on the Dashboard's Active Streams rows.
Diagnose a "max connections reached" complaint
Search the client list for that username, check their Max Connections, then count their rows here. Rows only count toward the cap while last_seen is fresh (90 s by default, tunable with the security_stale_connection_secs setting); rows silent for 3× that (minimum 5 minutes) are reaped automatically. If the customer is locked out with no rows visible here, the connection cap is not the cause — check Clients → Security (Active Security Blocks / Security Event Feed) or the client's 🛡️ Security / Locker modal for the deny reason.
Force a subscriber off everything
Set Status = Disabled in Edit User (or press "Reset Streaming Links"), then kick any remaining rows. Status is evaluated when a stream starts, so a disabled account keeps playing its current stream and is blocked on the next play or reconnect.
Watch out
- What Kick actually does depends on the delivery path. For direct/proxied TS (app, XC players, MAG, VLC) the streaming loop re-checks its own row about once a second and stops as soon as it disappears — that is a real cut-off. For a browser HLS session the session monitor re-inserts the same row within ~10 s and the ffmpeg session keeps running, so the viewer plays on and reappears in the list; that session only ends when the page closes or its 120 s idle reaper fires.
- Because the list is heartbeat-driven, a set-top box that lost power stays visible until the stale window passes. Do not read a stale row as evidence of sharing.
- The kick endpoint archives and deletes the row only — it does not emit a stream.stop event (rotating a token and superseded zaps do). Do not look for a stop event to confirm a kick.
- There is no per-row detail here: protocol/stream mode, client type, device label and user agent are returned by the API but not rendered. For that detail use Clients → the 🛡️ Security / Locker modal (Recent Source History shows IP, protocol, channel) or the Security event feed.
- Recordings, films and series never take a connection slot, so they never appear here. Up to 2.9.315 a film or series was still refused when the household's live TV had filled its Max Connections; since 2.9.316 it starts anyway (setting
vod_outside_stream_limit, default 1; 0 brings the refusal back). The licence's server-wide stream limit is still checked. To see who is watching recordings or VOD, use the Dashboard's Active Streams Snapshot or Analytics → "Watching now".