Skip to content

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 prefix playtelly is always implicit

Media documentation


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)

Playback documentation


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

Distribution documentation


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