HLS: шта је то, протокол и принцип рада

Аутор: IT Sectr Објављено: 2026-05-23 Време читања: 9 мин

HTTP Live Streaming (HLS) — је протокол адаптивног стриминга медијских података, развијен од стране компаније Apple. HLS испоручује видео и аудио преко HTTP веза, разбијајући садржај на низ малих датотека-сегмената и управљајући репродукцијом преко текст плејлиста у формату M3U8. Према извештају Sandvine Internet Phenomena Report (2025), HLS обрађује више од 65% светског саобраћаја адаптивног видео стриминга. Протокол је подржан на свим Apple платформама и преко библиотека трећих страна доступан је на Android-у, Windows-у и Smart TV-у.

Главно

  • HLS — је протокол адаптивног стриминга од Apple-а, заснован на HTTP-у и користи M3U8 плејлисте за управљање током.
  • Адаптивност HLS-а омогућава аутоматско пребацивање између битрејтова у зависности од брзине интернета корисника.
  • Плејлисте master.m3u8 и сегментне .ts или .m4s датотеке чине основну архитектуру HLS тока.
  • Заштита садржаја се реализује кроз AES-128 шифровање и подршку DRM системима (FairPlay Streaming, Widevine).
  • Латентност HLS-а је смањена на 2-6 секунди захваљујући Low-Latency HLS (LL-HLS), представљеном 2020. године.

Шта је HLS?

HTTP Live Streaming (HLS) — је протокол стриминга медијских података, развијен од стране Apple-а 2009. године и први пут представљен у iOS 3.0 и Safari-ју. 2017. године протокол је предложен као интернет стандард кроз RFC 8216, што је потврдило његов статус као отворене спецификације доступне за имплементацију на било којој платформи.

Основна идеја HLS-а је подела континуираног медијског тока на кратке сегменте дужине 2-10 секунди. Сваки сегмент представља самосталну датотеку која се може преузети путем обичног HTTP захтева. Управљање током се врши преко текст плејлиста у M3U8 формату, које садрже линкове ка сегментима и метаподатке за њихову исправну репродукцију.

Адаптивност — кључна предност HLS-а. Сервер припрема неколико верзија истог садржаја са различитим битрејтовима — од 200 Kbps за слабе везе до 20+ Mbps за 4K видео. Клијент аутоматски бира одговарајући битрејт на основу тренутне пропусне моћи канала. Према истраживању Apple-а (WWDC 2024), LL-HLS смањује време пребацивања између битрејтова на 500 милисекунди, обезбеђујући глатку промену квалитета без приметних пауза.

Историја развоја HLS-а

Прва верзија HLS-а (2009) подржавала је само MPEG-2 TS сегменте са аудио кодеком AAC и видео кодеком H.264. У iOS 8 (2014) додата је подршка за fMP4 (fragmented MP4) сегменте, што је омогућило коришћење HLS-а са модернијим кодеком, укључујући HEVC (H.265). iOS 11 (2017) представио је подршку за HDR10 и Dolby Vision. iOS 13 (2019) увео је Low-Latency HLS, смањивши латентност са традиционалних 6-30 секунди на 2-6 секунди.

2023. године Apple је проширио HLS подршком за кодеке AV1 и EVC (Essential Video Coding), а такође је имплементирао Content Steering — механизам динамичког преусмеравања клијената између CDN сервера за оптимално оптерећење. Content Steering омогућава серверу да мења URL-ове сегмената у лету, преусмеравајући клијента на најближи или најмање оптерећени CDN чвор без прекида репродукције.

Како ради HLS?

Архитектура HLS се састоји од три главне компоненте: серверски део (origin сервер + кодер), дистрибутивна мрежа (CDN) и клијентски део (плејер са подршком за HLS). Цео процес — од хватања видеа до репродукције на уређају корисника — укључује неколико узастопних фаза, од којих је свака критична за квалитет стриминга.

Кодирање и сегментација

Изворни видео се прво кодира у неколико варијанти са различитим битрејтовима и резолуцијама. Професионални кодери, као што су FFmpeg или AWS Elemental MediaConvert, истовремено креирају 4-12 варијанти тока: од 240p (400 Kbps) до 4K (40 Mbps). Свака варијанта се сече на сегменте исте дужине, обично 2-6 секунди за LL-HLS или 6-10 секунди за традиционални HLS.

За сваку варијанту се креира медијска плејлиста (variant playlist) која садржи URL-ове свих сегмената и њихово трајање. Додатно се креира мастер-плејлиста (master playlist) која обједињује све варијанте и садржи информације о свакој: резолуцију, битрејт, кодек и аудио траке. Клијент прво учитава мастер-плејлисту, а затим бира одговарајућу варијанту на основу анализе брзине везе.

Достава преко CDN-а

Сегменти и плејлисте се кеширају на CDN серверима, који су географски блиски корисницима. Коришћење стандардног HTTP протокола за доставу даје HLS-у критичну предност: било који CDN, балансер оптерећења или прокси сервер који подржава HTTP ради са HLS-ом без додатног подешавања. Ово разликује HLS од протокола реалног времена, као што су RTMP или WebRTC, који захтевају специјализоване сервере.

python
import subprocess

subprocess.run([
    "ffmpeg",
    "-i", "input.mp4",
    "-codec:v", "libx264",
    "-codec:a", "aac",
    "-hls_time", "6",
    "-hls_list_size", "0",
    "-var_stream_map", "v:0,a:0 v:1,a:1",
    "-map", "v:0", "-b:v:0", "5000k",
    "-map", "v:1", "-b:v:1", "1000k",
    "-f", "hls",
    "stream/output.m3u8"
])

Клијентска страна користи алгоритам избора битрејта (ABR — Adaptive Bitrate). HLS плејер учитава мастер-плејлисту, анализира доступне варијанте и започиње репродукцију са најпогоднијим битрејтом. Током репродукције, плејер континуирано прати брзину учитавања сегмената и пуњење бафера, доносећи одлуку о пребацивању на виши или нижи битрејт. Савремени ABR алгоритми узимају у обзир не само брзину мреже, већ и величину бафера, тип садржаја, па чак и потрошњу енергије уређаја.

Структура HLS тока: плејлисте и сегменти

Разумевање структуре HLS тока је неопходно за правилно подешавање кодирања, дистрибуције и отклањање проблема са репродукцијом. Сваки HLS ток се састоји од два нивоа плејлиста и мноштва медијских сегмената, организованих у строгу хијерархију.

Master Playlist (мастер-плејлиста)

Master playlist — је улазна тачка за HLS плејер. Датотека са екстензијом .m3u8 садржи линкове ка свим варијантама тока (variant streams) и њихове карактеристике. Плејер прво учитава ову датотеку и на основу информација о битрејтовима и резолуцијама доноси почетну одлуку о избору варијанте. Мастер-плејлиста такође може садржати линкове ка алтернативним аудио тракама, титловима и I-Frame плејлистама за брзо премотавање.

m3u8
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080
1080p/video.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360
360p/video.m3u8

Media Playlist (медијска плејлиста)

Media playlist садржи директно листу сегмената за једну варијанту тока. Сваки сегмент се наводи са трајањем и URI-јем. Медијска плејлиста може бити статична (за VOD — пуна листа свих сегмената) или динамички ажурирана (за уживо преносе — стари сегменти се уклањају, нови се додају).

m3u8
#EXTM3U
#EXT-X-TARGETDURATION:6
#EXTINF:6.000,
segment001.ts
#EXTINF:6.000,
segment002.ts
#EXT-X-ENDLIST

Формати сегмената

HLS подржава два главна формата медијских сегмената: MPEG-2 Transport Stream (.ts) и Fragmented MP4 (.m4s или .mp4). MPEG-2 TS — оригинални HLS формат, који обезбеђује максималну компатибилност. fMP4 — модернији формат, који подржава HDR, HEVC и ефикаснију компресију. Apple препоручује fMP4 за све нове пројекте почевши од iOS 10 и macOS Sierra.

Додатни елементи HLS тока укључују I-Frame плејлисте за брзо премотавање, ID3 метаподатке за синхронизацију титлова и рекламних маркера, као и Session Data за пренос информација о гледању на сервер аналитике. Сви ови елементи су опциони, али њихово коришћење побољшава квалитет корисничког искуства.

Предности и недостаци HLS-а

HLS доминира на тржишту видео стриминга захваљујући низу архитектонских предности, али има и ограничења која се морају узети у обзир при избору протокола за одређени пројекат. Упоредимо HLS са алтернативним протоколима за доставу видеа.

КарактеристикаHLSDASHRTMP
ТранспортHTTP (80/443)HTTP (80/443)TCP (1935)
АдаптивностДа (ABR)Да (ABR)Не
Ниска латентност2-6 сек (LL-HLS)3-8 сек (LL-DASH)0.5-2 сек
Подршка за HDRДа (iOS 11+)ДаОграничено
Изворни iOSДа (Safari, AVPlayer)Преко плејера трећих странаНе
Једноставност CDN-аМаксимална (HTTP)Максимална (HTTP)Специјализовани сервери

Главна предност HLS-а — изворна подршка на свим Apple уређајима (iPhone, iPad, Apple TV, Mac) преко уграђеног AVPlayer-а. То чини HLS дефакто стандардом за iOS/macOS апликације. Поред тога, употреба стандардног HTTP-а за доставу омогућава кеширање садржаја на било ком CDN-у и прокси серверима без додатног подешавања, што значајно поједностављује инфраструктуру доставе.

Недостаци HLS-а укључују већу латентност у поређењу са RTMP или WebRTC за уживо преносе. Чак и са LL-HLS, минимална латентност је 2-6 секунди, што је неприхватљиво за интерактивне сценарије у реалном времену. Такође, HLS генерише више датотека на серверу (сваки сегмент је засебна датотека), што може створити оптерећење на систем датотека при великом броју истовремених преноса.

HLS у мобилним апликацијама

Интеграција HLS-а у мобилне апликације се разликује у зависности од платформе. На iOS-у и macOS-у, HLS је подржан на нивоу оперативног система кроз AVFoundation и AVPlayer, што обезбеђује хардверско убрзање декодирања и минималну потрошњу енергије. На Android-у, HLS није подржан од стране уграђеног MediaPlayer-а, али је доступан преко ExoPlayer-а — званичног медијског плејера од Google-а.

HLS на iOS-у преко AVPlayer-а

На Apple платформи, репродукција HLS-а је максимално једноставна захваљујући уграђеној подршци у AVPlayer. Довољно је креирати AVPlayer са URL-ом мастер-плејлисте, и систем ће аутоматски обрадити адаптивно пребацивање битрејтова, избор аудио трака и обраду титлова. Притом, програмер има приступ потпуној контроли над репродукцијом кроз AVPlayerItem и AVAssetResourceLoader.

swift
import AVFoundation

let url = URL(string: "https://example.com/stream.m3u8")!
let player = AVPlayer(url: url)
let controller = AVPlayerViewController()
controller.player = player
present(controller, animated: true) {
    player.play()
}

HLS на Android-у преко ExoPlayer-а

За Android се користи ExoPlayer, који подржава HLS кроз засебан модул проширења. ExoPlayer пружа финију контролу над HLS током: могуће је управљати избором битрејта, подешавати бафер и обрађивати грешке учитавања сегмената појединачно. За LL-HLS је потребна верзија ExoPlayer 2.14.0 и виша.

kotlin
val player = ExoPlayer.Builder(this).build()

val uri = Uri.parse("https://example.com/stream.m3u8")
val mediaItem = MediaItem.fromUri(uri)

player.setMediaItem(mediaItem)
player.prepare()
player.play()

Оптимизација HLS-а за мобилне мреже

Мобилне апликације захтевају посебан приступ подешавању HLS-а због нестабилности ћелијских мрежа и ограничења саобраћаја. Главне препоруке укључују: подешавање почетног битрејта на основу типа мреже (Wi-Fi или ћелијска), коришћење скраћеног трајања сегмената (2-4 секунде) за бржу адаптацију, претходно учитавање бафера при преласку на Wi-Fi и приоритизацију аудио траке при слабом сигналу.

Apple у документацији HLS Authoring Specification for Apple Devices (2024) препоручује коришћење величине сегмената не веће од 6 секунди за мобилне уређаје и најмање 4 варијанте битрејта. За уштеду саобраћаја на мобилним мрежама, сервер треба да испоручује сегменте са HTTP заглављем Cache-Control, омогућавајући кеширање садржаја на посредничким прокси серверима оператора комуникација.

Често постављана питања

По чему се HLS разликује од обичног MP4 видеа?

MP4 — је контејнер за складиштење целе видео датотеке, која мора бити у потпуности преузета пре почетка репродукције. HLS разбија видео на мале сегменте и омогућава почетак гледања 2-6 секунди након учитавања првог сегмента, аутоматски прилагођавајући квалитет брзини интернета.

Може ли се HLS користити без Apple сервера?

Да, HLS не захтева серверски софтвер компаније Apple. Било који HTTP сервер (Nginx, Apache, CDN) може дистрибуирати HLS садржај. За кодирање видеа у HLS користи се FFmpeg или професионални кодери. Једини захтев је исправна конфигурација MIME типа за .m3u8 датотеке.

Да ли HLS подржава уживо преносе?

Да, HLS је првобитно развијен за уживо емитовање. Код уживо преноса, медијска плејлиста се динамички ажурира: сервер додаје нове сегменте и уклања старе. Low-Latency HLS (LL-HLS) смањује латентност на 2-6 секунди, што чини HLS погодним за спортске преносе и информативне емисије.

Зашто је потребна мастер-плејлиста у HLS-у?

Master playlist обједињује све варијанте истог садржаја са различитим битрејтовима и резолуцијама. Плејер је учитава прву, анализира карактеристике сваке варијанте (битрејт, резолуција, кодек) и бира оптималну за тренутне услове мреже. Без мастер-плејлисте, адаптивно пребацивање квалитета је немогуће.

Како заштитити HLS садржај од преузимања?

HLS подржава AES-128 шифровање сегмената и интеграцију са DRM системима: FairPlay Streaming (Apple), Widevine (Google) и PlayReady (Microsoft). Кључеви за шифровање се преносе преко засебног заштићеног канала. За додатну заштиту користи се токен аутентификација приступа плејлистама.

Закључак

  • HLS — протокол адаптивног стриминга од Apple-а, заснован на HTTP-у и користи M3U8 плејлисте и медијске сегменте.
  • Адаптивност кроз вишеструке варијанте битрејта (ABR) обезбеђује глатку репродукцију при било каквим условима мреже.
  • LL-HLS смањује латентност уживо преноса на 2-6 секунди, приближавајући се показатељима RTMP-а.
  • На iOS-у HLS се репродукује кроз уграђени AVPlayer са хардверским убрзањем; на Android-у — кроз ExoPlayer.
  • Формати сегмената: MPEG-2 TS (.ts) за компатибилност и fMP4 (.m4s) за HDR/HEVC.
  • Заштита садржаја се реализује кроз AES-128 шифровање и DRM (FairPlay, Widevine).
  • Препоручује се коришћење HLS-а за било које iOS/macOS пројекте са стримингом и за међуплатформска решења кроз ExoPlayer на Android-у.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође