Transcoding
Transcoding converts video, audio, HDR, or subtitles into a form your playback device can use. Norri avoids transcoding whenever possible. When the file is already compatible, it streams the original media directly.
Playback Methods
Norri chooses a playback method for every session based on the file, the selected tracks, and the device playing it.
| Method | When Norri uses it | What to expect |
|---|---|---|
| Direct play | The container, video codec, audio codec, subtitles, and HDR format are supported by the client. | Fastest startup and smoothest seeking. The original file is streamed without conversion. |
| HLS remux | The video and audio codecs are supported, but the container is not. Common example: MKV with H.264 video and AAC audio in a browser. | Startup is usually about 1 to 3 seconds. Seeking can feel slightly less smooth than a single MP4 file because the stream is split into HLS segments. |
| Transcode | The video, audio, HDR format, or selected subtitle track needs conversion. | Uses CPU or GPU resources. Hardware acceleration is recommended for 4K, HDR tone mapping, and multiple simultaneous streams. |
When Transcoding Happens
Transcoding may be needed when:
- The device cannot play the source video codec.
- The device cannot play the selected audio codec or channel layout.
- HDR content is played on a device that does not support the source HDR format.
- Image-based subtitles need to be rendered into the video.
- Styled ASS or SSA subtitles are set to preserve their original styling.
- The connection quality setting is lower than the source bitrate.
Container-only incompatibility does not require full transcoding. For example, a browser that cannot play an MKV container but can play the H.264 video and AAC audio inside it gets an HLS remux instead.
Transcoding Settings
Admins can change transcoding behavior in Settings → Transcoding.
| Setting | Default | What it does |
|---|---|---|
| Hardware Acceleration | Auto-detect | Uses a supported GPU encoder when available. Choose Software Only to force CPU transcoding. |
| Maximum Streams Per User | 5 | Limits the number of active playback sessions one user can start. |
| Maximum Streams Server-Wide | 10 | Limits total active playback sessions across the server. |
| Buffer Ahead | 60 seconds | Controls how far ahead Norri prepares a transcoded stream. Higher values can help unstable networks but use more temporary storage. |
| Subtitle Burn Mode | Auto | Controls when subtitles are rendered into the video. Auto burns image-based subtitles when required. |
| Burn In Styled Subtitles | On | Preserves ASS and SSA subtitle positioning, fonts, colors, and effects by rendering them into the video. Turn it off to avoid extra transcoding, but styled subtitles are converted to plain WebVTT and lose styling. |
| Prefer External Subtitles | Off | Chooses matching sidecar subtitle files before embedded subtitle tracks during automatic selection. |
| Enable HDR Tone Mapping | On | Converts HDR to SDR when the playback device does not support the source HDR format. |
Tip
Leave Hardware Acceleration on Auto unless you are diagnosing a GPU issue. Auto lets Norri use the best available encoder and fall back to software when needed.
HDR Playback
Norri detects HDR10, HLG, and Dolby Vision during file analysis. When a client reports support for the source HDR format, Norri keeps the HDR stream intact. When the client does not support it, Enable HDR Tone Mapping converts the video to SDR so colors look correct on standard displays.
Turn Enable HDR Tone Mapping off only when every device you use can play your HDR files correctly, or when you deliberately want playback to fail instead of using extra transcoding resources.
Session Timing
The session timing settings control how long Norri keeps playback and transcoding work alive when activity stops.
| Setting | Default | What it does |
|---|---|---|
| Transcode Idle Timeout | 300 seconds | Keeps a paused transcode available for 5 minutes without activity before tearing it down. |
| Active Playback Idle Timeout | 120 seconds | Ends a playing session if the client stops checking in. This usually means the app was closed, the tab was killed, or the network dropped. |
| Paused Playback Idle Timeout | 21,600 seconds | Keeps a paused session alive for 6 hours so you can resume later without immediately rebuilding the stream. |
Lower these values on small servers with limited CPU, GPU, memory, or cache space. Raise them if clients on your network pause frequently and you want fewer stream restarts.
Track Changes
Changing audio or subtitle tracks can briefly reload the stream. Norri resumes at the current position and keeps other devices playing the same item independent from your session.
If old video data was cached before a track change, Norri rejects those stale requests and continues with the current stream. A short spinner during the switch is normal. Another device stopping at the same time is not normal; check the logs if that happens.
Hardware Transcoding
For best performance, use hardware transcoding with a supported GPU:
- Intel Quick Sync, for Intel CPUs with integrated graphics
- NVIDIA NVENC, for NVIDIA GeForce or Quadro GPUs
- AMD VCE/VCN, for supported AMD GPUs
- VideoToolbox, for supported macOS systems
See Hardware Transcoding for setup instructions.