streamtop
Live HLS, DASH, and IPTV stream diagnostics in the terminal.
Install
Or build a release binary:
Windows: if the linker fails, put WinLibs MinGW on your PATH, then rebuild.
Quick start
--probe-headers downloads only the start of each segment (faster, enough for header and wire checks).
What you see
| Area | Meaning |
|---|---|
| Status | URL, LIVE / ESTIMATED, health score (SHI), video FPS, latency, CDN, buffer |
| Last segment | Sequence, sizes, DNS / TCP / TLS / TTFB, container type |
| ABR ladder | Bitrates, resolution, FPS, codecs — [wire] = from the bitstream, red = manifest vs wire mismatch |
| Charts | Latency or TTFB, download rate or transfer time |
| Log | Warnings, ads (SCTE-35), stalls, HTTP errors |
FPS comes from the playlist (FRAME-RATE / @frameRate) when present; otherwise from the media bitstream when it can be read.
Commands
# Live dashboard
# Compare two feeds side by side
# Webhook alerts (Slack / Discord / any HTTP endpoint)
# Channel list audit → audit_report.json / .csv
# Headless pass/fail (CI)
# Prometheus metrics on :9090/metrics
# Grafana dashboard JSON (import; scrape streamtop --prometheus)
Alert kinds for --alert-on: stall, shi_below_70, http_5xx, mismatch, ad_start.
Keys
| Key | Action |
|---|---|
q / Esc / Ctrl+C |
Quit (Esc returns to channel list when one is open) |
Space |
Save report under diagnostics/ |
c |
Copy a curl for the last segment |
p |
Quick Play via mpv or ffplay (non-blocking) |
r |
Reset metrics |
Tab |
Channel overlay |
? |
Help |
/ |
Search in channel list |
j / k |
Scroll log or channel list |
License
MIT — see LICENSE.