HTTP Live Streaming (HLS) — Apple şirkəti tərəfindən hazırlanmış adaptiv media axını protokoludur. HLS video və audionu HTTP bağlantıları vasitəsilə çatdırır, məzmunu kiçik fayl-seqmentlər ardıcıllığına bölür və M3U8 formatında mətn pleylistləri vasitəsilə oxutmanı idarə edir. Sandvine Internet Phenomena Report (2025) məlumatına görə, HLS dünya adaptiv video striminq trafikinin 65%-dən çoxunu emal edir. Protokol bütün Apple platformalarında dəstəklənir və üçüncü tərəf kitabxanaları vasitəsilə Android, Windows və Smart TV-də mövcuddur.
Əsas məqamlar
HTTP Live Streaming (HLS) — Apple tərəfindən 2009-cu ildə hazırlanmış və ilk dəfə iOS 3.0 və Safari-də təqdim edilmiş media axını protokoludur. 2017-ci ildə protokol RFC 8216 vasitəsilə internet standartı kimi təklif edilmişdir ki, bu da onun istənilən platformada tətbiq oluna bilən açıq spesifikasiya statusunu təsdiqləmişdir.
HLS-nin əsas ideyası fasiləsiz media axınını bölmək — 2-10 saniyə müddətində qısa seqmentlərə ayırmaqdır. Hər bir seqment adi HTTP sorğusu vasitəsilə yüklənə bilən müstəqil fayldır. Axının idarə edilməsi M3U8 formatında mətn pleylistləri vasitəsilə həyata keçirilir ki, bunlar da seqmentlərə keçidlər və onların düzgün oxudulması üçün metadata ehtiva edir.
Adaptivlik — HLS-nin əsas üstünlüyüdür. Server eyni məzmunun müxtəlif bitrate-li bir neçə versiyasını hazırlayır — zəif bağlantılar üçün 200 Kbps-dən 4K video üçün 20+ Mbps-dək. Müştəri kanalın cari ötürmə qabiliyyətinə əsasən uyğun bitrate-i avtomatik seçir. Apple-ın tədqiqatına görə (WWDC 2024), LL-HLS bitrate-lər arasında keçid vaxtını 500 millisaniyəyə qədər azaldır, nəzərə çarpan fasilələr olmadan keyfiyyətin hamar dəyişməsini təmin edir.
İlk versiya HLS (2009) yalnız AAC audio kodeki və H.264 video kodeki ilə MPEG-2 TS seqmentlərini dəstəkləyirdi. iOS 8-də (2014) fMP4 (fragmented MP4) seqmentləri üçün dəstək əlavə edildi ki, bu da HLS-dən HEVC (H.265) daxil olmaqla daha müasir kodeklərlə istifadə etməyə imkan verdi. iOS 11 (2017) HDR10 və Dolby Vision dəstəyini təqdim etdi. iOS 13 (2019) Low-Latency HLS-i təqdim edərək gecikməni ənənəvi 6-30 saniyədən 2-6 saniyəyə endirdi.
2023-cü ildə Apple HLS-ni AV1 və EVC (Essential Video Coding) kodekləri üçün dəstəklə genişləndirdi, həmçinin Content Steering — müştərilərin optimal yükləmə üçün CDN serverləri arasında dinamik yönləndirilməsi mexanizmini tətbiq etdi. Content Steering serverə seqmentlərin URL-lərini ani olaraq dəyişməyə, oxutmanı kəsmədən müştərini ən yaxın və ya ən az yüklənmiş CDN node-na yönləndirməyə imkan verir.
HLS arxitekturası üç əsas komponentdən ibarətdir: server hissəsi (origin-server + kodlayıcı), paylama şəbəkəsi (CDN) və müştəri hissəsi (HLS dəstəyi olan pleyer). Bütün proses — videonun tutulmasından istifadəçi cihazında oxudulmasına qədər — hər biri striminq keyfiyyəti üçün kritik olan bir neçə ardıcıl mərhələni əhatə edir.
Mənbə video əvvəlcə müxtəlif bitrate və rezolyusiyalarda bir neçə varianta kodlaşdırılır. FFmpeg və ya AWS Elemental MediaConvert kimi peşəkar kodlayıcılar eyni vaxtda 4-12 axın variantı yaradır: 240p (400 Kbps)-dən 4K (40 Mbps)-dək. Hər bir variant eyni müddətli seqmentlərə kəsilir, adətən LL-HLS üçün 2-6 saniyə və ya ənənəvi HLS üçün 6-10 saniyə.
Hər bir variant üçün bütün seqmentlərin URL-lərini və onların müddətini ehtiva edən media pleylisti (variant playlist) yaradılır. Əlavə olaraq bütün variantları birləşdirən və hər biri haqqında məlumatı (rezolyusiya, bitrate, kodek və audio trekləri) ehtiva edən master pleylist (master playlist) yaradılır. Müştəri əvvəlcə master pleylisti yükləyir, sonra isə bağlantı sürətinin təhlili əsasında uyğun variantı seçir.
Seqmentlər və pleylistlər istifadəçilərə coğrafi cəhətdən yaxın yerləşən CDN serverlərində keşlənir. Çatdırılma üçün standart HTTP protokolunun istifadəsi HLS-yə kritik üstünlük verir: HTTP-i dəstəkləyən istənilən CDN, yük balanslaşdırıcısı və ya proksi server əlavə konfiqurasiya olmadan HLS ilə işləyir. Bu, HLS-ni xüsusi serverlər tələb edən RTMP və ya WebRTC kimi real vaxt protokollarından fərqləndirir.
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"
])
Müştəri tərəfi bitrate seçimi alqoritmindən (ABR — Adaptive Bitrate) istifadə edir. HLS pleyeri master pleylisti yükləyir, mövcud variantları təhlil edir və oxutmanı ən uyğun bitrate-dən başlayır. Oxutma zamanı pleyer seqmentlərin yükləmə sürətini və buferin doldurulmasını daim izləyir, daha yüksək və ya aşağı bitrate-ə keçid barədə qərar qəbul edir. Müasir ABR alqoritmləri təkcə şəbəkə sürətini deyil, həm də bufer ölçüsünü, məzmun növünü və hətta cihazın enerji istehlakını nəzərə alır.
HLS axınının strukturunu başa düşmək kodlaşdırmanın, paylamanın düzgün konfiqurasiyası və oxutma problemlərinin aradan qaldırılması üçün zəruridir. Hər bir HLS axını iki səviyyəli pleylistlərdən və ciddi iyerarxiyada təşkil edilmiş çoxsaylı media seqmentlərindən ibarətdir.
Master playlist — HLS pleyeri üçün giriş nöqtəsidir. .m3u8 genişlənməli fayl bütün axın variantlarına (variant streams) keçidləri və onların xarakteristikalarını ehtiva edir. Pleyer bu faylı ilk olaraq yükləyir və bitrate və rezolyusiyalar haqqında məlumat əsasında variant seçimi barədə ilkin qərar qəbul edir. Master pleylist həmçinin alternativ audio treklərinə, altyazılara və sürətli irəli çəkmə üçün I-Frame pleylistlərə keçidlər ehtiva edə bilər.
#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 bir axın variantı üçün birbaşa seqmentlər siyahısını ehtiva edir. Hər bir seqment müddəti və URI ilə göstərilir. Media pleylist statik (VOD üçün — bütün seqmentlərin tam siyahısı) və ya dinamik yenilənən (canlı yayımlar üçün — köhnə seqmentlər silinir, yeniləri əlavə olunur) ola bilər.
#EXTM3U
#EXT-X-TARGETDURATION:6
#EXTINF:6.000,
segment001.ts
#EXTINF:6.000,
segment002.ts
#EXT-X-ENDLIST
HLS iki əsas media seqment formatını dəstəkləyir: MPEG-2 Transport Stream (.ts) və Fragmented MP4 (.m4s və ya .mp4). MPEG-2 TS — maksimum uyğunluğu təmin edən orijinal HLS formatıdır. fMP4 — HDR, HEVC və daha səmərəli sıxılmanı dəstəkləyən daha müasir formatdır. Apple iOS 10 və macOS Sierra-dan başlayaraq bütün yeni layihələr üçün fMP4-ü tövsiyə edir.
HLS axınının əlavə elementlərinə sürətli irəli çəkmə üçün I-Frame pleylistlər, altyazıların və reklam markerlərinin sinxronizasiyası üçün ID3 metadatası, həmçinin analitik serverə baxış məlumatlarının ötürülməsi üçün Session Data daxildir. Bütün bu elementlər isteğe bağlıdır, lakin onların istifadəsi istifadəçi təcrübəsinin keyfiyyətini artırır.
HLS bir sıra arxitektura üstünlükləri sayəsində video striminq bazarında üstünlük təşkil edir, lakin konkret layihə üçün protokol seçərkən nəzərə alınmalı olan məhdudiyyətlərə də malikdir. HLS-ni alternativ video çatdırılma protokolları ilə müqayisə edək.
| Xarakteristika | HLS | DASH | RTMP |
|---|---|---|---|
| Nəqliyyat | HTTP (80/443) | HTTP (80/443) | TCP (1935) |
| Adaptivlik | Bəli (ABR) | Bəli (ABR) | Xeyr |
| Aşağı gecikmə | 2-6 san (LL-HLS) | 3-8 san (LL-DASH) | 0.5-2 san |
| HDR dəstəyi | Bəli (iOS 11+) | Bəli | Məhdud |
| Yerli iOS | Bəli (Safari, AVPlayer) | Üçüncü tərəf pleyerlər vasitəsilə | Xeyr |
| CDN asanlığı | Maksimal (HTTP) | Maksimal (HTTP) | İxtisaslaşmış serverlər |
HLS-nin əsas üstünlüyü — daxili AVPlayer vasitəsilə bütün Apple cihazlarında (iPhone, iPad, Apple TV, Mac) yerli dəstəkdir. Bu, HLS-ni iOS/macOS tətbiqləri üçün de-fakto standartına çevirir. Bundan əlavə, çatdırılma üçün standart HTTP-dən istifadə məzmunu əlavə konfiqurasiya olmadan istənilən CDN və proksi serverlərdə keşləməyə imkan verir ki, bu da çatdırılma infrastrukturunu əhəmiyyətli dərəcədə sadələşdirir.
HLS-nin çatışmazlıqlarına canlı yayımlar üçün RTMP və ya WebRTC ilə müqayisədə daha yüksək gecikmə daxildir. Hətta LL-HLS ilə minimal gecikmə 2-6 saniyə təşkil edir ki, bu da real vaxt interaktiv ssenariləri üçün qəbuledilməzdir. Həmçinin HLS serverdə daha çox fayl yaradır (hər seqment ayrıca fayldır), bu da çox sayda paralel yayım zamanı fayl sisteminə yük yarada bilər.
HLS-in mobil tətbiqlərə inteqrasiyası platformadan asılı olaraq fərqlənir. iOS və macOS-da HLS əməliyyat sistemi səviyyəsində AVFoundation və AVPlayer vasitəsilə dəstəklənir ki, bu da aparat sürətləndirilməsi və minimal enerji sərfiyyatını təmin edir. Android-də HLS daxili MediaPlayer tərəfindən dəstəklənmir, lakin Google-ın rəsmi media pleyeri olan ExoPlayer vasitəsilə mövcuddur.
Apple platformasında HLS oxutması AVPlayer-də daxili dəstək sayəsində maksimum dərəcədə sadədir. Master pleylistin URL-i ilə AVPlayer yaratmaq kifayətdir və sistem avtomatik olaraq adaptiv bitrate keçidini, audio treklərin seçilməsini və altyazıların işlənməsini idarə edəcək. Bununla yanaşı, developer AVPlayerItem və AVAssetResourceLoader vasitəsilə oxutma üzərində tam nəzarət əldə edir.
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()
}
Android üçün ayrıca genişlənmə modulu vasitəsilə HLS-ni dəstəkləyən ExoPlayer istifadə olunur. ExoPlayer HLS axını üzərində daha incə nəzarət təmin edir: bitrate seçimini idarə etmək, buferi konfiqurasiya etmək və seqment yükləmə xətalarını fərdi şəkildə emal etmək mümkündür. LL-HLS üçün ExoPlayer 2.14.0 və daha yüksək versiyası tələb olunur.
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()
Mobil tətbiqlər hüceyrə şəbəkələrinin qeyri-sabitliyi və trafik məhdudiyyətləri səbəbindən HLS konfiqurasiyasına xüsusi yanaşma tələb edir. Əsas tövsiyələrə daxildir: şəbəkə növünə (Wi-Fi və ya hüceyrə) əsasən ilkin bitrate-in təyin edilməsi, daha sürətli adaptasiya üçün qısaldılmış seqment müddətindən (2-4 saniyə) istifadə, Wi-Fi-a keçid zamanı buferin ilkin yüklənməsi və zəif siqnal zamanı audio trekin prioritetləşdirilməsi.
Apple HLS Authoring Specification for Apple Devices (2024) sənədində mobil cihazlar üçün seqment ölçüsünün 6 saniyədən çox olmamasını və minimum 4 bitrate variantını tövsiyə edir. Mobil şəbəkələrdə trafikə qənaət etmək üçün server seqmentləri Cache-Control HTTP başlığı ilə təqdim etməlidir ki, bu da məzmunun operatorların aralıq proksi serverlərində keşlənməsinə imkan verir.
Tez-tez verilən suallar
MP4 — bütöv video faylı saxlamaq üçün konteynerdir və oxutma başlamazdan əvvəl tam yüklənməlidir. HLS videonu kiçik seqmentlərə bölür və ilk seqmentin yüklənməsindən 2-6 saniyə sonra izləməyə başlamağa imkan verir, keyfiyyəti avtomatik olaraq internet sürətinə uyğunlaşdırır.
Bəli, HLS Apple server proqram təminatı tələb etmir. İstənilən HTTP server (Nginx, Apache, CDN) HLS məzmununu paylaya bilər. Videonun HLS-ə kodlaşdırılması üçün FFmpeg və ya peşəkar kodlayıcılardan istifadə olunur. Yeganə tələb .m3u8 faylları üçün MIME tipinin düzgün konfiqurasiyasıdır.
Bəli, HLS əvvəlcə canlı yayım üçün hazırlanmışdır. Canlı yayım zamanı media pleylist dinamik olaraq yenilənir: server yeni seqmentlər əlavə edir və köhnələrini silir. Low-Latency HLS (LL-HLS) gecikməni 2-6 saniyəyə qədər azaldır ki, bu da HLS-ni idman yayımları və xəbər efirləri üçün uyğun edir.
Master playlist eyni məzmunun müxtəlif bitrate və rezolyusiyalı bütün variantlarını birləşdirir. Pleyer onu ilk olaraq yükləyir, hər bir variantın xarakteristikalarını (bitrate, rezolyusiya, kodek) təhlil edir və cari şəbəkə şəraiti üçün optimal olanı seçir. Master pleylist olmadan adaptiv keyfiyyət keçidi mümkün deyil.
HLS seqmentlərin AES-128 şifrələməsini və DRM sistemləri ilə inteqrasiyanı dəstəkləyir: FairPlay Streaming (Apple), Widevine (Google) və PlayReady (Microsoft). Şifrələmə açarları ayrıca qorunan kanal vasitəsilə ötürülür. Əlavə qoruma üçün pleylistlərə giriş üçün token autentifikasiyası istifadə olunur.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun