Streaming
Transcodely supports packaging transcoded video into HLS and DASH adaptive streaming formats. A single output can contain multiple video variants (an ABR ladder) that players switch between based on the viewer’s bandwidth.
Output Types
| Type | API Value | Produces | Use Case |
|---|---|---|---|
| HLS | hls | .m3u8 master + variant playlists + segments | Apple devices, Safari, most web players |
| DASH | dash | .mpd manifest + segments | Android, Chrome, cross-platform |
| Adaptive | adaptive | Both HLS + DASH from shared CMAF segments | Maximum compatibility with minimal storage |
Basic HLS Output
Create an HLS output with an ABR ladder of three resolutions:
{
"type": "hls",
"video": [
{"codec": "h264", "resolution": "1080p", "quality": "standard"},
{"codec": "h264", "resolution": "720p", "quality": "standard"},
{"codec": "h264", "resolution": "480p", "quality": "economy"}
]
}This produces:
master.m3u8— Master playlist referencing all variantsh264_1080p.m3u8— Variant playlist for 1080ph264_720p.m3u8— Variant playlist for 720ph264_480p.m3u8— Variant playlist for 480p- Segment files (
.m4swith fMP4, or.tswith legacy TS)
Basic DASH Output
{
"type": "dash",
"video": [
{"codec": "h264", "resolution": "1080p", "quality": "standard"},
{"codec": "h264", "resolution": "720p", "quality": "standard"}
]
}This produces:
manifest.mpd— DASH manifest- Segment files (
.m4sin fMP4 format)
CMAF / Adaptive Output
The adaptive type produces both HLS and DASH manifests from the same set of CMAF (Common Media Application Format) segments. This halves your storage costs compared to generating HLS and DASH separately.
{
"type": "adaptive",
"video": [
{"codec": "h264", "resolution": "1080p", "quality": "standard"},
{"codec": "h264", "resolution": "720p", "quality": "standard"}
]
}This produces:
master.m3u8— HLS master playlistmanifest.mpd— DASH manifest- Shared
.m4ssegments used by both
Segment Configuration
Control how the video is split into segments for streaming. These settings apply to all streaming output types.
{
"type": "hls",
"video": [...],
"segments": {
"duration": 6,
"gop_alignment": "aligned"
}
}| Parameter | Range | Default | Description |
|---|---|---|---|
duration | 1-30 seconds | 6 | Segment duration |
gop_alignment | aligned, fixed | aligned | How keyframes align with segments |
gop_size | 1-10 seconds | N/A | Fixed GOP size (only when gop_alignment: "fixed") |
Segment duration recommendations:
| Duration | Tradeoff |
|---|---|
| 2 seconds | Low latency, more CDN requests, higher overhead |
| 4 seconds | Good balance (Bitmovin default) |
| 6 seconds | Apple recommended, fewer requests (default) |
| 10 seconds | Higher latency, most efficient for long-form content |
GOP Alignment
GOP (Group of Pictures) alignment controls how keyframes line up with segment boundaries.
Aligned mode (default, recommended): The GOP size matches the segment duration. Every segment starts with a keyframe, ensuring clean switching between bitrate variants.
{
"segments": {
"duration": 6,
"gop_alignment": "aligned"
}
}Fixed mode: Use a fixed GOP size independent of segment duration. Useful for ad insertion (DAI) or specific keyframe requirements.
{
"segments": {
"duration": 6,
"gop_alignment": "fixed",
"gop_size": 2
}
}HLS Configuration
Customize HLS-specific options:
{
"type": "hls",
"video": [...],
"hls": {
"manifest": "index",
"segment_format": "fmp4",
"playlist_type": "vod",
"variant_pattern": "{codec}_{resolution}"
}
}| Parameter | Default | Description |
|---|---|---|
manifest | "master" | Master playlist name (produces {name}.m3u8) |
segment_format | "fmp4" | Segment format: "fmp4" (CMAF) or "ts" (legacy) |
playlist_type | "vod" | Playlist type: "vod" or "event" |
variant_pattern | "{codec}_{resolution}" | Pattern for variant playlist names |
Segment format comparison:
| Format | File Extension | Codecs | Notes |
|---|---|---|---|
| fMP4 (CMAF) | .m4s | H.264, H.265, VP9, AV1 | Modern, recommended |
| TS | .ts | H.264 only | Legacy, widest device support |
Playlist types:
| Type | Use Case |
|---|---|
vod | On-demand content — complete, immutable playlist |
event | Live-to-VOD transitions — append-only playlist |
DASH Configuration
Customize DASH-specific options:
{
"type": "dash",
"video": [...],
"dash": {
"manifest": "stream"
}
}| Parameter | Default | Description |
|---|---|---|
manifest | "manifest" | Manifest name (produces {name}.mpd) |
DASH always uses fMP4 segments regardless of any segment format setting.
Multi-Codec ABR Ladders
You can mix codecs within a single streaming output for modern multi-codec delivery:
{
"type": "hls",
"video": [
{"codec": "h264", "resolution": "1080p", "quality": "standard"},
{"codec": "h264", "resolution": "720p", "quality": "standard"},
{"codec": "h265", "resolution": "1080p", "quality": "standard"},
{"codec": "h265", "resolution": "720p", "quality": "standard"}
],
"hls": {
"segment_format": "fmp4"
}
}Players that support H.265 will select those variants for better quality at the same bandwidth, while older devices fall back to H.264. Note that multi-codec HLS requires fMP4 segments (not TS).
Multi-Audio Streaming
Add multiple audio language tracks to streaming outputs:
{
"type": "hls",
"video": [
{"codec": "h264", "resolution": "1080p", "quality": "standard"}
],
"audio": [
{"language": "eng", "label": "English", "is_default": true},
{"language": "spa", "label": "Spanish", "source_track": 1}
]
}Audio tracks appear as selectable language options in the player UI. Up to 8 audio tracks per output are supported.
Complete Streaming Example
A production-ready HLS output with a 3-tier ABR ladder, custom manifest names, and multi-audio:
{
"type": "hls",
"video": [
{"codec": "h264", "resolution": "1080p", "quality": "premium", "framerate": 30},
{"codec": "h264", "resolution": "720p", "quality": "standard", "framerate": 30},
{"codec": "h264", "resolution": "480p", "quality": "economy", "framerate": 30}
],
"audio": [
{"language": "eng", "label": "English", "is_default": true},
{"language": "spa", "label": "Spanish", "source_track": 1}
],
"hls": {
"manifest": "index",
"segment_format": "fmp4",
"playlist_type": "vod",
"variant_pattern": "video_{resolution}"
},
"segments": {
"duration": 6,
"gop_alignment": "aligned"
}
}Variant Pricing
Each variant in a streaming output is priced independently. The per-variant cost is calculated using the same formula:
variant_cost = (duration_minutes) x base_price x codec_mult x resolution_mult x framerate_mult x quality_multThe total output cost is the sum of all variant costs. During encoding, per-variant progress is tracked in the variant_pricing array of the job response.