HTTP Live Streaming (HLS) — Apple kompaniyasi tomonidan ishlab chiqilgan adaptiv media ma'lumotlarini oqimli uzatish protokolidir. HLS video va audioni HTTP ulanishlari orqali yetkazib beradi, kontentni kichik fayl-segmentlar ketma-ketligiga bo'ladi va M3U8 formatidagi matn pleylistlari orqali ijro etishni boshqaradi. Sandvine Internet Phenomena Report (2025) ma'lumotlariga ko'ra, HLS dunyo adaptiv video striming trafigining 65% dan ortig'ini qayta ishlaydi. Protokol barcha Apple platformalarida qo'llab-quvvatlanadi va uchinchi tomon kutubxonalari orqali Android, Windows va Smart TV da mavjud.
Asosiy ma'lumotlar
HTTP Live Streaming (HLS) — Apple tomonidan 2009-yilda ishlab chiqilgan va birinchi marta iOS 3.0 va Safari-da taqdim etilgan media oqimli uzatish protokolidir. 2017-yilda protokol RFC 8216 orqali internet standarti sifatida taklif qilindi, bu uning istalgan platformada amalga oshirilishi mumkin bo'lgan ochiq spetsifikatsiya sifatidagi maqomini tasdiqladi.
HLS ning asosiy g'oyasi uzluksiz media oqimini bo'lish — 2-10 soniya davomiy qisqa segmentlarga ajratishdir. Har bir segment oddiy HTTP so'rovi orqali yuklab olinadigan mustaqil fayldir. Oqimni boshqarish M3U8 formatidagi matn pleylistlari orqali amalga oshiriladi, ular segmentlarga havolalar va ularni to'g'ri ijro etish uchun metama'lumotlarni o'z ichiga oladi.
Adaptivlik — HLS ning asosiy ustunligi. Server bir xil kontentning turli bitreytli bir nechta versiyalarini tayyorlaydi — zaif ulanishlar uchun 200 Kbps dan 4K video uchun 20+ Mbps gacha. Mijoz kanalning joriy o'tkazish qobiliyatiga qarab mos bitreytni avtomatik tanlaydi. Apple tadqiqotiga ko'ra (WWDC 2024), LL-HLS bitreytlar o'rtasidagi o'tish vaqtini 500 millisekundgacha kamaytiradi, sezilarli pauzalarsiz sifatning silliq o'zgarishini ta'minlaydi.
Birinchi versiya HLS (2009) faqat AAC audio kodeki va H.264 video kodeki bilan MPEG-2 TS segmentlarini qo'llab-quvvatladi. iOS 8 (2014) da fMP4 (fragmented MP4) segmentlari uchun qo'llab-quvvatlash qo'shildi, bu HLS dan HEVC (H.265) ni o'z ichiga olgan zamonaviyroq kodeklar bilan foydalanish imkonini berdi. iOS 11 (2017) HDR10 va Dolby Vision qo'llab-quvvatlashini taqdim etdi. iOS 13 (2019) Low-Latency HLS ni joriy qildi, kechikishni an'anaviy 6-30 soniyadan 2-6 soniyagacha kamaytirdi.
2023-yilda Apple HLS ni AV1 va EVC (Essential Video Coding) kodeklari uchun qo'llab-quvvatlash bilan kengaytirdi, shuningdek Content Steering — mijozlarni optimal yuklash uchun CDN serverlari o'rtasida dinamik yo'naltirish mexanizmini joriy qildi. Content Steering serverga segmentlarning URL larini joyida o'zgartirishga, ijroni to'xtatmasdan mijozni eng yaqin yoki eng kam yuklangan CDN tuguniga yo'naltirishga imkon beradi.
HLS arxitekturasi uchta asosiy komponentdan iborat: server qismi (origin-server + kodlovchi), tarqatish tarmog'i (CDN) va mijoz qismi (HLS qo'llab-quvvatlovchi pleyer). Butun jarayon — videoni olishdan foydalanuvchi qurilmasida ijro etishgacha — har biri striming sifati uchun muhim bo'lgan bir necha ketma-ket bosqichlarni o'z ichiga oladi.
Manba video avval turli bitreyt va rezolyusiyalarda bir nechta variantga kodlanadi. FFmpeg yoki AWS Elemental MediaConvert kabi professional kodlovchilar bir vaqtning o'zida 4-12 oqim variantini yaratadi: 240p (400 Kbps) dan 4K (40 Mbps) gacha. Har bir variant bir xil davomiylikdagi segmentlarga kesiladi, odatda LL-HLS uchun 2-6 soniya yoki an'anaviy HLS uchun 6-10 soniya.
Har bir variant uchun barcha segmentlarning URL lari va ularning davomiyligini o'z ichiga olgan media pleylist (variant playlist) yaratiladi. Qo'shimcha ravishda barcha variantlarni birlashtirgan va har biri haqida ma'lumot (rezolyusiya, bitreyt, kodek va audio treklar) ni o'z ichiga olgan master pleylist (master playlist) yaratiladi. Mijoz avval master pleylistni yuklaydi, so'ngra ulanish tezligi tahlili asosida mos variantni tanlaydi.
Segmentlar va pleylistlar foydalanuvchilarga geografik jihatdan yaqin joylashgan CDN serverlarida keshlanadi. Yetkazib berish uchun standart HTTP protokolidan foydalanish HLS ga muhim ustunlik beradi: HTTP ni qo'llab-quvvatlovchi har qanday CDN, yuk balanslagichi yoki proksi server qo'shimcha sozlashlarsiz HLS bilan ishlaydi. Bu HLS ni maxsus serverlarni talab qiladigan RTMP yoki WebRTC kabi real vaqt protokollaridan ajratib turadi.
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"
])
Mijoz tomoni bitreyt tanlash algoritmidan (ABR — Adaptive Bitrate) foydalanadi. HLS pleyeri master pleylistni yuklaydi, mavjud variantlarni tahlil qiladi va ijroni eng mos bitreytdan boshlaydi. Ijro paytida pleyer segmentlarni yuklash tezligi va buferning to'ldirilishini doimiy kuzatib boradi, yuqoriroq yoki pastroq bitreytga o'tish haqida qaror qabul qiladi. Zamonaviy ABR algoritmlari nafaqat tarmoq tezligini, balki bufer hajmini, kontent turini va hatto qurilmaning energiya sarfini ham hisobga oladi.
HLS oqimining tuzilishini tushunish kodlash, tarqatishni to'g'ri sozlash va ijro muammolarini bartaraf etish uchun zarurdir. Har bir HLS oqimi ikki darajadagi pleylistlardan va qattiq iyerarxiyada tashkil etilgan ko'plab media segmentlardan iborat.
Master playlist — HLS pleyeri uchun kirish nuqtasidir. .m3u8 kengaytmali fayl barcha oqim variantlariga (variant streams) havolalar va ularning xususiyatlarini o'z ichiga oladi. Pleyer bu faylni birinchi bo'lib yuklaydi va bitreytlar va rezolyusiyalar haqidagi ma'lumotlar asosida variantni tanlash bo'yicha dastlabki qarorni qabul qiladi. Master pleylist shuningdek muqobil audio treklarga, subtitrlarga va tez orqaga o'rash uchun I-Frame pleylistlarga havolalarni o'z ichiga olishi mumkin.
#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 oqim varianti uchun to'g'ridan-to'g'ri segmentlar ro'yxatini o'z ichiga oladi. Har bir segment davomiyligi va URI bilan ko'rsatiladi. Media pleylist statik (VOD uchun — barcha segmentlarning to'liq ro'yxati) yoki dinamik yangilanuvchi (jonli efirlar uchun — eski segmentlar o'chiriladi, yangilari qo'shiladi) bo'lishi mumkin.
#EXTM3U
#EXT-X-TARGETDURATION:6
#EXTINF:6.000,
segment001.ts
#EXTINF:6.000,
segment002.ts
#EXT-X-ENDLIST
HLS ikkita asosiy media segment formatini qo'llab-quvvatlaydi: MPEG-2 Transport Stream (.ts) va Fragmented MP4 (.m4s yoki .mp4). MPEG-2 TS — maksimal moslikni ta'minlaydigan original HLS formatidir. fMP4 — HDR, HEVC va samaraliroq siqishni qo'llab-quvvatlaydigan zamonaviyroq formatdir. Apple iOS 10 va macOS Sierra dan boshlab barcha yangi loyihalar uchun fMP4 ni tavsiya qiladi.
HLS oqimining qo'shimcha elementlariga tez orqaga o'rash uchun I-Frame pleylistlar, subtitrlar va reklama markerlarini sinxronlash uchun ID3 metama'lumotlari, shuningdek analitika serveriga tomosha ma'lumotlarini uzatish uchun Session Data kiradi. Bu elementlarning barchasi ixtiyoriy, ammo ulardan foydalanish foydalanuvchi tajribasi sifatini oshiradi.
HLS bir qator arxitektura afzalliklari tufayli video striming bozorida hukmronlik qiladi, lekin ma'lum bir loyiha uchun protokol tanlashda hisobga olinishi kerak bo'lgan cheklovlarga ham ega. HLS ni muqobil video yetkazib berish protokollari bilan solishtiramiz.
| Xususiyat | HLS | DASH | RTMP |
|---|---|---|---|
| Transport | HTTP (80/443) | HTTP (80/443) | TCP (1935) |
| Adaptivlik | Ha (ABR) | Ha (ABR) | Yo'q |
| Past kechikish | 2-6 s (LL-HLS) | 3-8 s (LL-DASH) | 0.5-2 s |
| HDR qo'llab-quvvatlashi | Ha (iOS 11+) | Ha | Cheklangan |
| Mahalliy iOS | Ha (Safari, AVPlayer) | Uchinchi tomon pleyerlari orqali | Yo'q |
| CDN qulayligi | Maksimal (HTTP) | Maksimal (HTTP) | Ixtisoslashgan serverlar |
HLS ning asosiy afzalligi — o'rnatilgan AVPlayer orqali barcha Apple qurilmalarida (iPhone, iPad, Apple TV, Mac) mahalliy qo'llab-quvvatlashdir. Bu HLS ni iOS/macOS ilovalari uchun de-fakto standartga aylantiradi. Bundan tashqari, yetkazib berish uchun standart HTTP dan foydalanish kontentni qo'shimcha sozlashlarsiz istalgan CDN va proksi serverlarda keshlash imkonini beradi, bu esa yetkazib berish infratuzilmasini sezilarli darajada soddalashtiradi.
HLS ning kamchiliklari jonli efirlar uchun RTMP yoki WebRTC bilan solishtirganda yuqoriroq kechikishni o'z ichiga oladi. Hatto LL-HLS bilan minimal kechikish 2-6 soniyani tashkil qiladi, bu real vaqt interaktiv stsenariylari uchun qabul qilib bo'lmaydi. Shuningdek, HLS serverda ko'proq fayllar yaratadi (har bir segment alohida fayl), bu ko'p sonli parallel efirlar paytida fayl tizimiga yuk hosil qilishi mumkin.
HLS ni mobil ilovalarga integratsiyasi platformaga qarab farqlanadi. iOS va macOS da HLS operatsion tizim darajasida AVFoundation va AVPlayer orqali qo'llab-quvvatlanadi, bu apparat tezlashtirish va minimal energiya sarfini ta'minlaydi. Android da HLS o'rnatilgan MediaPlayer tomonidan qo'llab-quvvatlanmaydi, lekin Google ning rasmiy media pleyeri ExoPlayer orqali mavjud.
Apple platformasida HLS ijrosi AVPlayer dagi o'rnatilgan qo'llab-quvvatlash tufayli maksimal darajada sodda. Master pleylist URL i bilan AVPlayer yaratish kifoya va tizim avtomatik ravishda adaptiv bitreyt o'tishlarini, audio treklarni tanlashni va subtitrlarni qayta ishlashni amalga oshiradi. Shu bilan birga, dasturchi AVPlayerItem va AVAssetResourceLoader orqali ijro ustidan to'liq nazoratga ega bo'ladi.
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 uchun alohida kengaytma moduli orqali HLS ni qo'llab-quvvatlovchi ExoPlayer ishlatiladi. ExoPlayer HLS oqimi ustida nozikroq nazoratni ta'minlaydi: bitreyt tanlashni boshqarish, buferni sozlash va segmentlarni yuklash xatolarini alohida qayta ishlash mumkin. LL-HLS uchun ExoPlayer 2.14.0 va undan yuqori versiyasi talab qilinadi.
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 ilovalar uyali tarmoqlarning beqarorligi va trafik cheklovlari tufayli HLS sozlashiga alohida yondashishni talab qiladi. Asosiy tavsiyalar quyidagilarni o'z ichiga oladi: tarmoq turiga (Wi-Fi yoki uyali) asoslangan boshlang'ich bitreytni o'rnatish, tezroq moslashish uchun qisqartirilgan segment davomiyligidan (2-4 soniya) foydalanish, Wi-Fi ga o'tishda buferni oldindan yuklash va zaif signalda audio trekni ustunlashtirish.
Apple HLS Authoring Specification for Apple Devices (2024) hujjatida mobil qurilmalar uchun segment hajmini 6 soniyadan ko'p bo'lmasligini va kamida 4 bitreyt variantini tavsiya qiladi. Mobil tarmoqlarda trafikni tejash uchun server segmentlarni Cache-Control HTTP sarlavhasi bilan yetkazib berishi kerak, bu kontentni aloqa operatorlarining oraliq proksi serverlarida keshlash imkonini beradi.
Ko'p beriladigan savollar
MP4 — butun video faylni saqlash uchun konteyner bo'lib, u ijro boshlanishidan oldin to'liq yuklab olinishi kerak. HLS videoni kichik segmentlarga bo'ladi va birinchi segmentni yuklagandan keyin 2-6 soniya ichida tomoshani boshlash, sifatni internet tezligiga avtomatik moslashtirish imkonini beradi.
Ha, HLS Apple server dasturiy ta'minotini talab qilmaydi. Har qanday HTTP server (Nginx, Apache, CDN) HLS kontentini tarqatishi mumkin. Videoni HLS ga kodlash uchun FFmpeg yoki professional kodlovchilar ishlatiladi. Yagona talab .m3u8 fayllari uchun MIME turini to'g'ri sozlashdir.
Ha, HLS dastlab jonli efir uchun ishlab chiqilgan. Jonli efir paytida media pleylist dinamik yangilanadi: server yangi segmentlarni qo'shadi va eskilarini o'chiradi. Low-Latency HLS (LL-HLS) kechikishni 2-6 soniyagacha kamaytiradi, bu HLS ni sport translyatsiyalari va yangiliklar efirlari uchun mos qiladi.
Master playlist bir xil kontentning turli bitreyt va rezolyusiyalardagi barcha variantlarini birlashtiradi. Pleyer uni birinchi bo'lib yuklaydi, har bir variantning xususiyatlarini (bitreyt, rezolyusiya, kodek) tahlil qiladi va joriy tarmoq sharoitlari uchun optimalini tanlaydi. Master pleylistsiz adaptiv sifat o'tishi mumkin emas.
HLS segmentlarning AES-128 shifrlashini va DRM tizimlari bilan integratsiyani qo'llab-quvvatlaydi: FairPlay Streaming (Apple), Widevine (Google) va PlayReady (Microsoft). Shifrlash kalitlari alohida himoyalangan kanal orqali uzatiladi. Qo'shimcha himoya uchun pleylistlarga kirish uchun token autentifikatsiyasi ishlatiladi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.
Shuningdek o'qing