Implementing Adaptive HLS Streaming with Multiple Quality Profiles

Adaptive HLS Streaming: How It Works and Why It's Profitable

Development and maintenance of all types of websites:

Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Our competencies:

Frequently Asked Questions

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1418
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1286
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    983
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1243
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Website development for FIXPER company
    998

Adaptive HLS Streaming: How It Works and Why It's Profitable

Direct MP4 delivery via HTTP breaks on long videos, weak connections, and mobile devices. Users wait for buffering, every speed drop kills retention, and CDN traffic grows wasted. We implement HLS (HTTP Live Streaming) — Apple's protocol that has become the de-facto standard on the web. Video is cut into segments of 2-6 seconds, the player automatically selects quality based on current bandwidth. Result: instant start, no freezes, up to 40% traffic savings.

Our HLS implementation with adaptive streaming and multiple quality profiles ensures optimal video delivery for all devices.

With over 5 years of experience in video streaming and 30+ successful projects, we have delivered turnkey adaptive HLS solutions. On one online education platform, we reduced buffering from 15% to under 1% by implementing HLS with three quality profiles and cut CDN costs by 35%. For instance, one client saved $400 per month on CDN costs after implementing our HLS solution. We guarantee stable operation on any device: from old Android to latest iPhone and Smart TV.

Why HLS Instead of Direct MP4 Delivery?

MP4 with progressive download (byte-range requests) only works for short clips and requires server support (Accept-Ranges, partial content). To switch to another quality, you must either load a second file in parallel or endure buffering. HLS solves this architecturally: a playlist (.m3u8) contains links to segments of different bitrates; the player switches between them at segment boundaries — no playback interruption.

Adaptive HLS streaming is 3x more efficient than direct MP4 delivery, reducing buffering by up to 90%.

"HTTP Live Streaming works by breaking the video into small HTTP downloads, each loading one short fragment of the video." — Apple Developer Documentation

Comparison of HLS and MP4:

Feature HLS MP4 with progressive download
Start on slow connection Instant (2-6 sec) Requires 10+ sec buffering
Quality switching Seamless, at segment boundaries Impossible without reload
CDN caching Efficient (independent segments) Poor (large files, partial content)
Browser support Native in Safari, HLS.js for others Native, but no adaptivity
Origin server load Low (small files easily cached) High (range requests)

How to Select Optimal Quality Profiles?

Profiles are chosen based on two criteria: target audience and content type. We use this table as a baseline:

Profile Resolution Bitrate CRF Preset Target Connection
360p 640x360 600 Kbps 28 fast 3G / Edge
720p 1280x720 2500 Kbps 23 fast LTE / 4G
1080p 1920x1080 5000 Kbps 22 medium Wi-Fi / 5G

For action scenes or live sports, we increase bitrates by 30-50%; for static presentations, we reduce. We evaluate your project and select profiles individually.

Generating HLS with FFmpeg (Multiple Qualities in One Pass)

One FFmpeg command generates all profiles — more CPU-efficient than separate processes:

ffmpeg -i input.mp4 \ -map 0:v:0 -map 0:a:0 \ -map 0:v:0 -map 0:a:0 \ -map 0:v:0 -map 0:a:0 \ \ -c:v:0 libx264 -crf 28 -preset fast \ -vf:v:0 "scale=640:360:force_original_aspect_ratio=decrease,pad=640:360:(ow-iw)/2:(oh-ih)/2:black" \ -b:v:0 600k -maxrate:v:0 800k \ -c:a:0 aac -b:a:0 96k \ \ -c:v:1 libx264 -crf 23 -preset fast \ -vf:v:1 "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2:black" \ -b:v:1 2500k -maxrate:v:1 3000k \ -c:a:1 aac -b:a:1 128k \ \ -c:v:2 libx264 -crf 22 -preset medium \ -vf:v:2 "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black" \ -b:v:2 5000k -maxrate:v:2 6000k \ -c:a:2 aac -b:a:2 192k \ \ -hls_time 4 -hls_list_size 0 -hls_flags independent_segments \ -hls_segment_filename "360p/seg%03d.ts" \ -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" \ -master_pl_name master.m3u8 \ %v/index.m3u8 

%v substitutes the stream index. -hls_flags independent_segments makes every segment an independent key frame — the player can switch quality instantly.

What do the key FFmpeg parameters mean? - `-map`: selects streams for each variant. - `-c:v` and `-c:a`: video codec (libx264 = H.264) and audio codec (aac). - `-crf`: video quality (lower = higher quality & bitrate). - `-preset`: compression speed (fast/medium — balance of speed and size). - `-hls_time`: segment duration in seconds. - `-master_pl_name`: name of the master playlist.

What's Included

We deliver:

  • PHP HLS service with flexible profile configuration (class HlsService supporting any number of profiles);
  • Job handler for asynchronous generation in a queue (Laravel Horizon, Redis);
  • Nginx configuration with correct MIME types, CORS, and caching;
  • Player using HLS.js with fallback for Safari/iOS;
  • Documentation for deployment and integration;
  • 30 days of support after delivery.

Frontend Player

HLS.js is the primary library for browsers without native support (Chrome, Firefox, Edge). Integration code:

<video id="video" controls preload="none"></video> <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script> <script> const video = document.getElementById('video'); const src = '/hls/1/master.m3u8'; if (Hls.isSupported()) { const hls = new Hls({ maxBufferLength: 30, startLevel: -1, // auto quality selection abrEwmaDefaultEstimate: 1_000_000, // initial bandwidth 1 Mbps }); hls.loadSource(src); hls.attachMedia(video); } else if (video.canPlayType('application/vnd.apple.mpegurl')) { video.src = src; } </script> 

Segment Storage

For an hour-long video in three qualities, ~2000 .ts files. Local disk works, but for scaling we move to S3-compatible storage (MinIO, AWS S3). FFmpeg can write directly to S3 via s3:// URI if built with libavformat supporting S3. Alternative: generate locally, then sync with aws s3 sync.

Process and Timeline

  1. Analysis — we study the source video, target audience, and bitrate requirements.
  2. Design — we select profiles, codec, and ABR parameters.
  3. Implementation — we configure FFmpeg, write the PHP service, set up the queue, Nginx, and player.
  4. Testing — we test on mobile, desktop, Smart TV; measure LCP and time to first frame.
  5. Deployment — we roll out to production with player error monitoring.

Estimated timeline: 2-3 business days for basic integration. We'll assess your project in 1 day — reach out for a consultation.

Typical Mistakes and How to Avoid Them

  • Codec incompatibility: we use H.264 High Profile — supported by all devices.
  • Incorrect playlist paths: we verify relative paths when generating segments.
  • Missing CORS: we add the Access-Control-Allow-Origin: * header for players on other domains.
  • Too many files: we configure cleanup of old segments (for live) or use S3 with TTL.

With turnkey HLS, your content will work fast and reliably on any device — contact us to get started.