What Is Adaptive Bitrate Streaming?
ABR (Adaptive Bitrate Streaming) automatically adjusts video quality based on available bandwidth. Instead of a single file, the server delivers small chunks (2–10 seconds), and the player selects optimal quality at each moment — eliminating buffering.
HLS — HTTP Live Streaming
Developed by Apple in 2009, the most widely used web streaming protocol.
- HTTP-based: works through any CDN or standard web server.
- Divides video into
.tsor.fmp4segments. - A
.m3u8playlist lists available segments. - Native support on iOS and Safari.
master.m3u8 content:
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080
1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720
720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360
360p.m3u8
DASH — Dynamic Adaptive Streaming over HTTP
ISO standard alternative. Manifest format: MPD (XML). Supports H.264, H.265, VP9, AV1. Not natively supported by Safari.
HLS vs DASH
| Feature | HLS | DASH |
|---|---|---|
| iOS/Safari | ✅ Native | ❌ Needs library |
| Codecs | H.264, H.265 | H.264, H.265, VP9, AV1 |
| Latency | Medium (6–30 s) | Low (with LL-DASH) |
Generate HLS with FFmpeg
ffmpeg -i input.mp4 \
-codec:v libx264 -crf 20 -preset fast \
-codec:a aac -b:a 128k \
-hls_time 6 -hls_playlist_type vod \
-hls_segment_filename "stream_%03d.ts" \
stream.m3u8
Web Players
| Player | HLS | DASH | License |
|---|---|---|---|
| hls.js | ✅ | ❌ | Apache 2.0 |
| Shaka Player | ✅ | ✅ | Apache 2.0 |
| Video.js | ✅ | ✅ | Apache 2.0 |
Conclusion
HLS for iOS and Safari compatibility. DASH for codec flexibility in non-Apple contexts. Many platforms serve both and let the player choose. FFmpeg generates HLS streams directly.
Advanced Use Cases
Multi-platform distribution: each social network has preferred specs — YouTube accepts MP4 H.264 up to 4K 60fps with AAC 384 kbps; Instagram Reels prefers MP4 H.264 at 1080×1920 vertical; TikTok recommends MP4 H.264/H.265 up to 60 seconds with bitrate of 5-10 Mbps; LinkedIn caps at 5 GB and prefers MP4 H.264. Converting your master to each platform's exact specs before upload guarantees that the server's internal re-encoding (which always happens) starts from optimal input, preserving maximum final quality. Professional editing: editors like DaVinci Resolve, Premiere Pro and Final Cut Pro work best with intermediate codecs (ProRes, DNxHD, CineForm) rather than H.264 final-delivery — converting your material to an intermediate format before editing dramatically accelerates render and avoids generation loss in multi-track timelines. Live streaming: OBS Studio and Streamlabs require input in H.264/H.265 with keyframes every 2 seconds for HLS; converting recordings to this preset facilitates uplink.
Best Practices and Professional Tips
Two-pass encoding vs CRF: for specific target file size (e.g. "max 25 MB for WhatsApp") use two-pass; for target quality use CRF (Constant Rate Factor) with values 18-23 for H.264, 22-28 for H.265 — visually-lossless under normal conditions. Audio passthrough: if your destination video supports the original audio codec, use stream copy (-c:a copy in FFmpeg) — preserves 100% audio quality without re-encoding. Container vs codec: distinguish between container (MP4, MKV, MOV) and internal codec (H.264, H.265, AV1). Changing only the container is a trivial operation without re-encoding (seconds vs minutes for re-encode). HDR preservation: if your source is HDR10/Dolby Vision, ensure the destination also supports HDR — converting HDR to SDR permanently loses dynamic range. Frame rate: never increase frame rate (24→60 doesn't add real information); reducing it (60→30) removes frames without visible loss for most content.
Compatibility and Technical Considerations
KaijuConverter processes video with FFmpeg 6.x compiled with all critical extensions: x264/x265 for H.264/H.265 encoding with configurable presets (ultrafast to veryslow, default medium for balance), libvpx-vp9 for WebM, SVT-AV1 for modern AV1 encoding with 10-bit color space support, libfdk-aac for AAC audio, libopus for Opus. We support files up to 500 MB and resolutions up to 4K (3840×2160) at 60 fps. The cloud pipeline uses hardware acceleration when available (NVENC/QuickSync) which accelerates 5-10× over CPU encoding. Processing time: a 1080p 60-second video typically converts in 12-30 seconds depending on destination codec and preset. 4K HDR material may require 2-5 minutes. Limitations: DRM-protected files (Netflix, Disney+, Amazon Prime, Apple TV+) cannot be converted — DRM blocks stream extraction. Very specific proprietary codecs (RED RAW, ARRI Alexa raw, Sony X-OCN) require dedicated software. Privacy: video encrypted in transit (TLS 1.3), processed in isolated Docker containers, automatically deleted after 2 hours with secure multi-pass overwrite.
Related conversions
Common video conversions that pair well with this guide: