PlayoutAdmin
PlayoutAdmin is the primary web interface for managing the PlayTelly CDN platform. It covers three operational domains — Media, Playback, and Distribution — each corresponding to a backend domain in CoreAPI.
Local dev URL: http://localhost:15173
Local Dev Stack
| Service | URL | Description |
|---|---|---|
| PlayoutAdmin | localhost:15173 | This app (nginx + React) |
| CoreAPI | localhost:3000 | Go Fiber backend |
| streamer-bkk | localhost:18080 / :18081 | Castis Streamer BKK (HTTP / API) |
| streamer-ntb | localhost:19080 / :19081 | Castis Streamer NTB (HTTP / API) |
| cproxy-bkk-1 | localhost:28080 / :28081 | cproxy edge cache (proxy / API) |
| Colorbars | localhost:9999 | UDP multicast broadcaster (ffmpeg) |
| SeaweedFS UI | localhost:8888 | Object storage browser |
| pgAdmin | localhost:5050 | Postgres admin UI |
Getting Started
git clone https://mashup.castis.io/playtelly/Quickstart.git
git clone https://mashup.castis.io/playtelly/CoreAPI.git
git clone https://mashup.castis.io/playtelly/PlayoutAdmin.git
cd Quickstart
make playout
make playout starts the full local stack: infrastructure (Postgres, NATS, SeaweedFS, tusd), CoreAPI, PlayoutAdmin, streamers, cproxy, ELB, and colorbars.
Domains
Media
Handles asset uploads, processing, and storage via SeaweedFS. Assets are organised by tenant and folder.
- Upload video, image, and audio files via resumable TUS upload
- Browse and preview uploaded assets
- Assets are referenced by
storageKey(e.g.food/video/kitchen.mp4) — the bucket prefixplaytellyis always implicit
Playback
Manages IPTV channels and their live stream origins on Castis Streamer nodes.
- Create channels with UDP multicast ingest + optional file-loop fallback (
pl:///) - Configure transcoding profiles (video codec, resolution, bitrate, GOP)
- Assign multiple streamer nodes as origins per channel
- Detect UDP signal presence before creating (⚡ probe)
- Monitor channel streams via preview player (DASH/HLS)
Distribution
Manages CDN infrastructure nodes — Castis Streamers, cproxy caches, and the colorbars broadcaster.
- Register and monitor streamer and cproxy nodes
- Create named origin routing slots (keys) on cproxy
- Assign streamers as origin URLs within each key
- Sync DB state to cproxy runtime config
- View topology — which channels a streamer hosts, which cproxy keys it feeds into
Architecture Overview
Browser
└── PlayoutAdmin (localhost:15173)
└── nginx /api/ → CoreAPI (localhost:3000)
CoreAPI
├── /playback/channels → creates streams on Castis Streamers
├── /distribution/* → manages streamer + cproxy nodes
└── /media/* → manages SeaweedFS assets via tusd
Castis Streamers (streamer_bkk, streamer_ntb)
└── ingest UDP multicast or pl:/// file-loop
└── serve HLS/DASH manifests
cproxy (cproxy_bkk_1)
└── routes /key/* → streamer → caches segments
SeaweedFS
└── stores uploaded media (bucket: playtelly)
└── streamer http-remote fetches from here for pl:/// playlists
Colorbars (localhost:9999)
└── ffmpeg UDP multicast broadcaster for test signals