We offer customization solutions and support ([email protected]) | Visit us on bitbyte3 for complete VOD solutions with apps.

Self-hosted video platform for VOD, live, and API access

NixStream is a Laravel app you run on your own hardware. Upload video and transcode to HLS/DASH, push live from OBS over RTMP, share with password-protected links or embeds, and automate uploads through a REST client API. Playback goes through nixstream-edge signed URLs, not Laravel public storage.

./install.sh

Copies env, builds images, runs migrations, and starts the stack. See the Docker install guide.

What it does

NixStream powers bitbyte3.com video stack (120 TB+ encoded media between 2022 and 2025) and remains in production today.

Upload videos through the admin panel or client API. Queue workers run media-vod to transcode into multi-resolution HLS and DASH, generate thumbnails, and optionally run Whisper.cpp for VTT subtitles. See VOD uploads, encoding.

Create a live stream, copy the RTMP URL and stream key into OBS, and viewers watch through the player or a share link while the event runs. Turn on Save recording as VOD to archive the broadcast into your library when it ends. See Live streaming.

Share pages work out of the box: public links, password-protected links, email invites, and embed codes. Domain allowlists and geo rules apply at the edge. See Sharing and embeds.

The client API under /api/client/v1/* handles uploads, library access, share links, and live monitoring. API keys come from Settings > General in the admin panel. See API reference, Security.

Architecture

Browser requests hit Nginx and Laravel for the admin panel and API. Encoding and transcription run in queue workers. Playback goes through nixstream-edge, which serves signed URLs and AES-128 decrypt at the edge.

ServiceRole
Laravel appAdmin panel, Client API, job dispatch
Queue workersVOD encoding (media-vod), Whisper transcripts
media-liveRTMP ingest and live packaging
nixstream-edgeSigned playback URLs, AES-128 decrypt at edge
MySQL / RedisData, cache, sessions, queues

Upload to playback

An upload triggers a queue job. media-vod transcodes the source, Shaka Packager writes HLS/DASH manifests, and the video lands in your library ready to share or embed.

NixStream upload to playback workflow

Player

Adaptive HLS/DASH playback with subtitles, quality selection, and Chromecast. Share pages and embeds use the same player.

NixStream player

Documentation