FFmpeg -> MediaMTX -> HLS relay with runtime-configurable modes: - PLAYBACK_MODE: standard (mpegts), fmp4 (HEVC), llhls - INGEST_MODE: rtmp, rtsp - INGEST_AUDIO_MODE: aac, copy - Hourly playlist auto-refresh from upstream URL - Fullscreen video UI with collapsible sidebar, upstream-down banner - Same-origin HLS proxy for HTTPS deployments Tagged as the last HLS-based version before the mpegts.js (v2) rework.
47 lines
1.9 KiB
Go
47 lines
1.9 KiB
Go
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"`
|
|
}
|