package models // Channel represents a single IPTV channel parsed from an M3U playlist. type Channel struct { ID string `json:"id"` Name string `json:"name"` Group string `json:"group"` LogoURL string `json:"logo_url"` StreamURL string `json:"stream_url"` } // StreamHealth holds real-time FFmpeg progress metrics for diagnosing issues. // Speed < 1x indicates the upstream IPTV source can't deliver fast enough. // Drop frames > 0 with speed ~1x suggests local processing issues. type StreamHealth struct { Speed string `json:"speed"` // "1.00x" — upstream delivery rate FPS string `json:"fps"` // frames per second being processed Bitrate string `json:"bitrate"` // output bitrate DropFrames string `json:"drop_frames"` // frames dropped by FFmpeg DupFrames string `json:"dup_frames"` // frames duplicated by FFmpeg } // StreamStatus represents the current streaming state. type StreamStatus struct { Source string `json:"source"` // "obs" or "iptv" ChannelName string `json:"channel_name"` // current IPTV channel name (empty if OBS) Live bool `json:"live"` Transitioning bool `json:"transitioning"` // true while switching to a new channel UpstreamDown bool `json:"upstream_down"` // true when no data is detected from the selected upstream PlaylistVersion int64 `json:"playlist_version"` // increments when playlist reloads Health *StreamHealth `json:"health,omitempty"` } // ProcessInfo represents the status of a managed child process. type ProcessInfo struct { Running bool `json:"running"` PID int `json:"pid"` Uptime string `json:"uptime"` Error string `json:"error,omitempty"` } // SystemStatus holds status for all managed processes. type SystemStatus struct { MediaMTX ProcessInfo `json:"mediamtx"` FFmpeg ProcessInfo `json:"ffmpeg"` }