HTTP Live Streaming (HLS) — adalah protokol transmisi streaming adaptif data media yang dikembangkan oleh Apple. HLS mengirimkan video dan audio melalui koneksi HTTP, membagi konten menjadi urutan file-segmen kecil dan mengelola pemutaran melalui daftar putar teks dalam format M3U8. Menurut Sandvine Internet Phenomena Report (2025), HLS memproses lebih dari 65% lalu lintas streaming video adaptif global. Protokol ini didukung di semua platform Apple dan melalui pustaka pihak ketiga tersedia di Android, Windows, dan Smart TV.
Poin Utama
HTTP Live Streaming (HLS) — adalah protokol streaming media yang dikembangkan oleh Apple pada tahun 2009 dan pertama kali diperkenalkan di iOS 3.0 dan Safari. Pada tahun 2017, protokol ini diusulkan sebagai standar internet melalui RFC 8216, yang menegaskan statusnya sebagai spesifikasi terbuka yang tersedia untuk implementasi di platform mana pun.
Gagasan utama HLS adalah membagi aliran media berkelanjutan menjadi segmen pendek berdurasi 2-10 detik. Setiap segmen adalah file mandiri yang dapat diunduh melalui permintaan HTTP biasa. Manajemen aliran dilakukan melalui daftar putar teks dalam format M3U8, yang berisi tautan ke segmen dan metadata untuk pemutaran yang benar.
Adaptif — adalah keunggulan utama HLS. Server menyiapkan beberapa versi konten yang sama dengan bitrate berbeda — dari 200 Kbps untuk koneksi lemah hingga 20+ Mbps untuk video 4K. Klien secara otomatis memilih bitrate yang sesuai berdasarkan bandwidth saluran saat ini. Menurut penelitian Apple (WWDC 2024), LL-HLS mengurangi waktu peralihan antar bitrate hingga 500 milidetik, memastikan perubahan kualitas yang mulus tanpa jeda yang terlihat.
Versi pertama HLS (2009) hanya mendukung segmen MPEG-2 TS dengan codec audio AAC dan codec video H.264. Di iOS 8 (2014), dukungan untuk segmen fMP4 (fragmented MP4) ditambahkan, memungkinkan penggunaan HLS dengan codec yang lebih modern, termasuk HEVC (H.265). iOS 11 (2017) memperkenalkan dukungan untuk HDR10 dan Dolby Vision. iOS 13 (2019) memperkenalkan Low-Latency HLS, mengurangi latensi dari 6-30 detik tradisional menjadi 2-6 detik.
Pada tahun 2023, Apple memperluas HLS dengan dukungan untuk codec AV1 dan EVC (Essential Video Coding), serta mengimplementasikan Content Steering — mekanisme pengalihan dinamis klien antar server CDN untuk pemuatan optimal. Content Steering memungkinkan server mengubah URL segmen dengan cepat, mengarahkan klien ke node CDN terdekat atau paling tidak terbebani tanpa mengganggu pemutaran.
Arsitektur HLS terdiri dari tiga komponen utama: bagian server (server asal + encoder), jaringan distribusi (CDN), dan bagian klien (pemutar dengan dukungan HLS). Seluruh proses — dari pengambilan video hingga pemutaran di perangkat pengguna — mencakup beberapa tahap berturut-turut, yang masing-masing penting untuk kualitas streaming.
Video sumber pertama-tama dikodekan menjadi beberapa varian dengan bitrate dan resolusi berbeda. Encoder profesional seperti FFmpeg atau AWS Elemental MediaConvert secara bersamaan membuat 4-12 varian aliran: dari 240p (400 Kbps) hingga 4K (40 Mbps). Setiap varian dipotong menjadi segmen dengan durasi yang sama, biasanya 2-6 detik untuk LL-HLS atau 6-10 detik untuk HLS tradisional.
Untuk setiap varian, daftar putar media (variant playlist) dibuat yang berisi URL semua segmen dan durasinya. Selain itu, daftar putar master (master playlist) dibuat yang menggabungkan semua varian dan berisi informasi tentang masing-masing: resolusi, bitrate, codec, dan trek audio. Klien mengunduh daftar putar master terlebih dahulu, kemudian memilih varian yang sesuai berdasarkan analisis kecepatan koneksi.
Segmen dan daftar putar di-cache di server CDN yang berlokasi secara geografis dekat dengan pengguna. Penggunaan protokol HTTP standar untuk pengiriman memberi HLS keunggulan penting: CDN, penyeimbang beban, atau server proksi apa pun yang mendukung HTTP akan bekerja dengan HLS tanpa konfigurasi tambahan. Ini membedakan HLS dari protokol waktu nyata seperti RTMP atau WebRTC yang memerlukan server khusus.
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"
])
Sisi klien menggunakan algoritma pemilihan bitrate (ABR — Adaptive Bitrate). Pemutar HLS mengunduh daftar putar master, menganalisis varian yang tersedia, dan memulai pemutaran dengan bitrate yang paling sesuai. Selama pemutaran, pemutar terus memantau kecepatan unduh segmen dan pengisian buffer, mengambil keputusan untuk beralih ke bitrate yang lebih tinggi atau lebih rendah. Algoritma ABR modern tidak hanya mempertimbangkan kecepatan jaringan, tetapi juga ukuran buffer, jenis konten, dan bahkan konsumsi daya perangkat.
Memahami struktur aliran HLS diperlukan untuk konfigurasi pengkodean, distribusi, dan debugging masalah pemutaran yang benar. Setiap aliran HLS terdiri dari dua tingkat daftar putar dan banyak segmen media, yang diatur dalam hierarki yang ketat.
Master playlist — adalah titik masuk untuk pemutar HLS. File dengan ekstensi .m3u8 berisi tautan ke semua varian aliran (variant streams) dan karakteristiknya. Pemutar mengunduh file ini terlebih dahulu dan berdasarkan informasi tentang bitrate dan resolusi, membuat keputusan awal tentang pemilihan varian. Daftar putar master juga dapat berisi tautan ke trek audio alternatif, subtitle, dan daftar putar I-Frame untuk pemutaran cepat.
#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 berisi langsung daftar segmen untuk satu varian aliran. Setiap segmen ditentukan dengan durasi dan URI. Daftar putar media dapat bersifat statis (untuk VOD — daftar lengkap semua segmen) atau diperbarui secara dinamis (untuk siaran langsung — segmen lama dihapus, segmen baru ditambahkan).
#EXTM3U
#EXT-X-TARGETDURATION:6
#EXTINF:6.000,
segment001.ts
#EXTINF:6.000,
segment002.ts
#EXT-X-ENDLIST
HLS mendukung dua format utama segmen media: MPEG-2 Transport Stream (.ts) dan Fragmented MP4 (.m4s atau .mp4). MPEG-2 TS — format HLS asli yang memberikan kompatibilitas maksimum. fMP4 — format yang lebih modern yang mendukung HDR, HEVC, dan kompresi yang lebih efisien. Apple merekomendasikan fMP4 untuk semua proyek baru mulai dari iOS 10 dan macOS Sierra.
Elemen tambahan aliran HLS mencakup daftar putar I-Frame untuk pemutaran cepat, metadata ID3 untuk sinkronisasi subtitle dan penanda iklan, serta Session Data untuk mengirimkan informasi tampilan ke server analitik. Semua elemen ini opsional, tetapi penggunaannya meningkatkan kualitas pengalaman pengguna.
HLS mendominasi pasar streaming video berkat sejumlah keunggulan arsitektural, tetapi juga memiliki keterbatasan yang perlu dipertimbangkan saat memilih protokol untuk proyek tertentu. Mari bandingkan HLS dengan protokol pengiriman video alternatif.
| Karakteristik | HLS | DASH | RTMP |
|---|---|---|---|
| Transport | HTTP (80/443) | HTTP (80/443) | TCP (1935) |
| Adaptif | Ya (ABR) | Ya (ABR) | Tidak |
| Latensi rendah | 2-6 dtk (LL-HLS) | 3-8 dtk (LL-DASH) | 0.5-2 dtk |
| Dukungan HDR | Ya (iOS 11+) | Ya | Terbatas |
| iOS asli | Ya (Safari, AVPlayer) | Melalui pemutar pihak ketiga | Tidak |
| Kemudahan CDN | Maksimal (HTTP) | Maksimal (HTTP) | Server khusus |
Keunggulan utama HLS — dukungan asli di semua perangkat Apple (iPhone, iPad, Apple TV, Mac) melalui AVPlayer bawaan. Ini menjadikan HLS standar de facto untuk aplikasi iOS/macOS. Selain itu, penggunaan HTTP standar untuk pengiriman memungkinkan cache konten di CDN dan server proksi mana pun tanpa konfigurasi tambahan, yang secara signifikan menyederhanakan infrastruktur pengiriman.
Kekurangan HLS mencakup latensi yang lebih tinggi dibandingkan dengan RTMP atau WebRTC untuk siaran langsung. Bahkan dengan LL-HLS, latensi minimum adalah 2-6 detik, yang tidak dapat diterima untuk skenario interaktif waktu nyata. HLS juga menghasilkan lebih banyak file di server (setiap segmen adalah file terpisah), yang dapat membebani sistem file pada jumlah siaran simultan yang besar.
Integrasi HLS di aplikasi seluler berbeda tergantung platform. Di iOS dan macOS, HLS didukung di tingkat sistem operasi melalui AVFoundation dan AVPlayer, yang memberikan akselerasi perangkat keras decoding dan konsumsi daya minimal. Di Android, HLS tidak didukung oleh MediaPlayer bawaan, tetapi tersedia melalui ExoPlayer — pemutar media resmi dari Google.
Di platform Apple, pemutaran HLS sangat sederhana berkat dukungan bawaan di AVPlayer. Cukup buat AVPlayer dengan URL daftar putar master, dan sistem akan secara otomatis menangani peralihan bitrate adaptif, pemilihan trek audio, dan pemrosesan subtitle. Pengembang memiliki akses ke kontrol penuh atas pemutaran melalui AVPlayerItem dan AVAssetResourceLoader.
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()
}
Untuk Android digunakan ExoPlayer, yang mendukung HLS melalui modul ekstensi terpisah. ExoPlayer memberikan kontrol yang lebih halus atas aliran HLS: pemilihan bitrate dapat dikelola, buffering dapat dikonfigurasi, dan kesalahan pemuatan segmen dapat ditangani secara individual. Untuk LL-HLS diperlukan ExoPlayer versi 2.14.0 dan lebih tinggi.
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()
Aplikasi seluler memerlukan pendekatan khusus untuk konfigurasi HLS karena ketidakstabilan jaringan seluler dan batasan lalu lintas. Rekomendasi utama meliputi: mengatur bitrate awal berdasarkan jenis jaringan (Wi-Fi atau seluler), menggunakan durasi segmen yang lebih pendek (2-4 detik) untuk adaptasi yang lebih cepat, memuat buffer terlebih dahulu saat beralih ke Wi-Fi, dan memprioritaskan trek audio pada sinyal lemah.
Apple dalam dokumentasi HLS Authoring Specification for Apple Devices (2024) merekomendasikan penggunaan ukuran segmen tidak lebih dari 6 detik untuk perangkat seluler dan setidaknya 4 varian bitrate. Untuk menghemat lalu lintas di jaringan seluler, server harus mengirimkan segmen dengan header HTTP Cache-Control, memungkinkan cache konten di server proksi perantara operator telekomunikasi.
Pertanyaan yang Sering Diajukan
MP4 — adalah wadah untuk menyimpan file video utuh yang harus diunduh sepenuhnya sebelum pemutaran dimulai. HLS membagi video menjadi segmen-segmen kecil dan memungkinkan menonton dimulai 2-6 detik setelah mengunduh segmen pertama, secara otomatis menyesuaikan kualitas dengan kecepatan internet.
Ya, HLS tidak memerlukan perangkat lunak server Apple. Server HTTP apa pun (Nginx, Apache, CDN) dapat mendistribusikan konten HLS. Untuk mengkodekan video ke HLS, gunakan FFmpeg atau encoder profesional. Satu-satunya persyaratan adalah konfigurasi tipe MIME yang benar untuk file .m3u8.
Ya, HLS awalnya dirancang untuk siaran langsung. Pada siaran langsung, daftar putar media diperbarui secara dinamis: server menambahkan segmen baru dan menghapus yang lama. Low-Latency HLS (LL-HLS) mengurangi latensi menjadi 2-6 detik, membuat HLS cocok untuk siaran olahraga dan berita.
Master playlist menggabungkan semua varian konten yang sama dengan bitrate dan resolusi berbeda. Pemutar mengunduhnya terlebih dahulu, menganalisis karakteristik setiap varian (bitrate, resolusi, codec) dan memilih yang optimal untuk kondisi jaringan saat ini. Tanpa daftar putar master, peralihan kualitas adaptif tidak mungkin dilakukan.
HLS mendukung enkripsi AES-128 segmen dan integrasi dengan sistem DRM: FairPlay Streaming (Apple), Widevine (Google), dan PlayReady (Microsoft). Kunci enkripsi dikirimkan melalui saluran aman terpisah. Untuk perlindungan tambahan, autentikasi token digunakan untuk akses ke daftar putar.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga