Overview
The Streaming API provides endpoints for direct playback of audio and video content. These endpoints support both static streaming (direct file access) and dynamic transcoding based on client capabilities.Audio Stream
Stream audio content with optional transcoding.Get Audio Stream
The unique identifier of the audio item
The audio container format (e.g., mp3, aac, flac, opus)
If true, streams the original file without encoding. Use either no extension or the original file extension
The media version id, if playing an alternate version
The device id of the client requesting. Used to stop encoding processes when needed
Specify an audio codec to encode to (e.g., mp3, aac, opus). If omitted, the server will auto-select using the URL’s extension
Specify an audio bitrate to encode to (e.g., 128000). If omitted, this will be left to encoder defaults
Specify a specific number of audio channels to encode to (e.g., 2)
Specify a maximum number of audio channels to encode to (e.g., 2)
Specify a specific audio sample rate (e.g., 44100)
The maximum audio bit depth
Specify a starting offset, in ticks. 1 tick = 10000 ms (0.01ms)
Whether to allow automatic stream copy if requested values match the original source
Whether to allow copying of the audio stream URL
Whether to enable Audio VBR (Variable Bit Rate) Encoding
Audio file stream with appropriate MIME type
200 OK- Audio stream returned successfully401 Unauthorized- Authentication required404 Not Found- Item not found
Example Request
Video Stream
Stream video content with optional transcoding.Get Video Stream
The unique identifier of the video item
The video container. Possible values: ts, webm, asf, wmv, ogv, mp4, m4v, mkv, mpeg, mpg, avi, 3gp, wtv, m2ts, mov, iso, flv
If true, streams the original file without encoding
The media version id, if playing an alternate version
The device id of the client requesting
Specify a video codec to encode to (e.g., h264, hevc, vp9). If omitted, the server will auto-select
Specify an audio codec to encode to (e.g., aac, mp3, opus)
Specify a video bitrate to encode to (e.g., 5000000). If omitted, left to encoder defaults
Specify an audio bitrate to encode to (e.g., 128000)
The fixed horizontal resolution of the encoded video
The fixed vertical resolution of the encoded video
The maximum horizontal resolution of the encoded video
The maximum vertical resolution of the encoded video
A specific video framerate to encode to (e.g., 23.976). Generally should be omitted unless device has specific requirements
A specific maximum video framerate to encode to
Specify a starting offset, in ticks. 1 tick = 10000 ms
The index of the subtitle stream to use. If omitted, no subtitles will be used
Specify the subtitle delivery method:
Encode, Embed, External, HlsVideo file stream with appropriate MIME type
200 OK- Video stream returned successfully400 Bad Request- Invalid parameters or unsupported protocol401 Unauthorized- Authentication required404 Not Found- Item not found
Example Request
Universal Audio Stream
Intelligent audio streaming endpoint that automatically selects the best streaming method based on device capabilities.Get Universal Audio Stream
The unique identifier of the audio item
Comma-delimited list of supported containers (e.g., “mp3,aac,flac”)
The media version id, if playing an alternate version
The device id of the client requesting
The user id (optional, defaults to authenticated user)
The audio codec to transcode to
The maximum number of audio channels
The number of audio channels to transcode to
The maximum streaming bitrate
Specify an audio bitrate to encode to (e.g., 128000)
Specify a starting offset, in ticks
The container to transcode to
The transcoding protocol:
http or hlsThe maximum audio sample rate
The maximum audio bit depth
Whether to enable remote media
Whether to enable Audio VBR Encoding
Whether to enable redirection for remote streams
200 OK- Audio stream returned302 Found- Redirected to remote audio stream404 Not Found- Item not found
Example Request
Notes
Ticks
Jellyfin uses “ticks” as a time unit where 1 tick = 0.01 milliseconds = 10000 ticks per millisecond. This allows for high-precision timing. Conversion:- Milliseconds to Ticks:
milliseconds * 10000 - Seconds to Ticks:
seconds * 10000000 - Ticks to Milliseconds:
ticks / 10000
Static vs Dynamic Streaming
Static Streaming:- Serves the original file without modification
- Requires client to support the native format
- Lower server resource usage
- Faster startup time
- Transcodes content on-the-fly
- Adapts to client capabilities and network conditions
- Higher server resource usage
- More compatible with diverse clients
HTTP Methods
Most streaming endpoints support both:GET- Returns the actual streamHEAD- Returns headers only (useful for checking availability and getting metadata)