Player
NixStream video player configuration
The player is Shaka-based (nixstream-player), forked from snapencode-player. It does adaptive HLS/DASH, multi-audio and subtitles, Chromecast, and i18n.
What the player supports
- Adaptive bitrate streaming (HLS and DASH)
- Multiple audio language tracks
- Subtitle and caption tracks (uploaded or Whisper-generated)
- Chromecast casting
- Internationalization (i18n)
- Signed Edge delivery for HLS and DASH (AES-128 decrypted at the edge)
- Thumbnail preview on seek bar
Player settings
Go to Settings > Player for global defaults:
| Setting | What it does |
|---|---|
| Autoplay | Start playback when the player loads |
| Muted start | Begin muted (required for autoplay in most browsers) |
| Watermark | Overlay image on the video |
| Default language | Preferred UI and subtitle language |
These settings are exposed via GET /api/settings/player for embed contexts.
Embedding a video
From the video detail page in the admin panel, copy the embed code. A typical embed looks like:
<iframe
src="https://your-domain.com/embed/vod/{video-id}"
width="640"
height="360"
frameborder="0"
allowfullscreen
></iframe>Replace your-domain.com with your APP_URL and {video-id} with the actual video UUID.
Responsive embed
For a responsive container:
<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;">
<iframe
src="https://your-domain.com/embed/vod/{video-id}"
style="position:absolute;top:0;left:0;width:100%;height:100%;"
frameborder="0"
allowfullscreen
></iframe>
</div>Edge-protected content
Manifests and segments load from nixstream-edge with signed tokens. The player does not fetch AES keys. Make sure:
- Edge is running and the Edge integration is connected
EDGE_BASE_URLis reachable from the browser- Security profiles permit the embedding domain
Customization
For advanced theming, modify components in nixstream/resources/js/lib/nixstream-player/. The player uses Shaka Player under the hood, so Shaka configuration options are available for buffer sizes, retry logic, and track selection.
Common issues
Player shows black screen
- Check that encoding completed successfully
- Verify the manifest URL is accessible
- Confirm Edge
/healthzresponds and signed manifest URLs are returned by the API
Subtitles not showing
- Confirm subtitle tracks were generated or uploaded
- Check that the correct language track is selected
- Whisper transcripts must be published before they appear
Embed blocked on external site
- Review security profile domain allowlist
- Add the embed origin to allowed domains
Chromecast not available
- Casting requires HTTPS in production
- The viewer needs a Chromecast device on the same network