HTTP Live Streaming (HLS) হল Apple দ্বারা বিকশিত একটি অ্যাডাপটিভ মিডিয়া ডেটা স্ট্রিমিং প্রোটোকল। HLS কন্টেন্টকে ছোট ছোট সেগমেন্ট ফাইলের ক্রমে বিভক্ত করে এবং M3U8 ফর্ম্যাটে টেক্সট প্লেলিস্টের মাধ্যমে প্লেব্যাক পরিচালনা করে HTTP কানেকশনের মাধ্যমে ভিডিও এবং অডিও সরবরাহ করে। Sandvine Internet Phenomena Report (2025) অনুসারে, HLS বিশ্বের 65% এর বেশি অ্যাডাপটিভ ভিডিও স্ট্রিমিং ট্রাফিক পরিচালনা করে। প্রোটোকলটি সমস্ত Apple প্ল্যাটফর্মে সমর্থিত এবং থার্ড-পার্টি লাইব্রেরির মাধ্যমে Android, Windows এবং Smart TV-তে উপলব্ধ।
মূল পয়েন্ট
HTTP Live Streaming (HLS) হল Apple দ্বারা 2009 সালে বিকশিত এবং প্রথমবার iOS 3.0 এবং Safari-তে প্রবর্তিত একটি মিডিয়া স্ট্রিমিং প্রোটোকল। 2017 সালে, প্রোটোকলটি RFC 8216-এর মাধ্যমে একটি ইন্টারনেট স্ট্যান্ডার্ড হিসেবে প্রস্তাবিত হয়েছিল, যা যেকোনো প্ল্যাটফর্মে বাস্তবায়নের জন্য উপলব্ধ একটি উন্মুক্ত স্পেসিফিকেশন হিসেবে এর অবস্থান নিশ্চিত করেছে।
HLS-এর মূল ধারণা হল একটি ধারাবাহিক মিডিয়া স্ট্রিমকে 2–10 সেকেন্ডের ছোট সেগমেন্টে বিভক্ত করা। প্রতিটি সেগমেন্ট একটি স্বাধীন ফাইল যা একটি সাধারণ HTTP অনুরোধের মাধ্যমে ডাউনলোড করা যেতে পারে। স্ট্রিম পরিচালনা M3U8 ফর্ম্যাটে টেক্সট প্লেলিস্টের মাধ্যমে করা হয়, যাতে সেগমেন্টের রেফারেন্স এবং সঠিক প্লেব্যাকের জন্য মেটাডেটা থাকে।
অ্যাডাপটিভিটি হল HLS-এর মূল সুবিধা। সার্ভার বিভিন্ন বিটরেটে একই কন্টেন্টের একাধিক সংস্করণ প্রস্তুত করে — দুর্বল কানেকশনের জন্য 200 Kbps থেকে 4K ভিডিওর জন্য 20+ Mbps পর্যন্ত। ক্লায়েন্ট বর্তমান চ্যানেল ব্যান্ডউইথের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে উপযুক্ত বিটরেট নির্বাচন করে। Apple গবেষণা (WWDC 2024) অনুসারে, LL-HLS বিটরেটের মধ্যে সুইচ করার সময় 500 মিলিসেকেন্ডে কমিয়ে আনে, যা লক্ষণীয় বিরতি ছাড়াই মসৃণ মান পরিবর্তন নিশ্চিত করে।
প্রথম সংস্করণ HLS (2009) শুধুমাত্র AAC অডিও কোডেক এবং H.264 ভিডিও কোডেক সহ MPEG-2 TS সেগমেন্ট সমর্থন করত। 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) কোডেকের সমর্থন সহ বিস্তৃত করে, এবং কন্টেন্ট স্টিয়ারিং — সর্বোত্তম লোড ব্যালেন্সের জন্য CDN সার্ভারের মধ্যে ক্লায়েন্টকে গতিশীলভাবে পুনঃনির্দেশিত করার একটি প্রক্রিয়া — চালু করে। কন্টেন্ট স্টিয়ারিং সার্ভারকে প্লেব্যাক ব্যাহত না করেই ক্লায়েন্টকে নিকটতম বা সর্বনিম্ন লোডেড CDN নোডে পুনঃনির্দেশিত করার সময় সেগমেন্ট URL পরিবর্তন করতে দেয়।
HLS আর্কিটেকচারে তিনটি প্রধান উপাদান থাকে: সার্ভার পক্ষ (অরিজিন সার্ভার + এনকোডার), বিতরণ নেটওয়ার্ক (CDN), এবং ক্লায়েন্ট পক্ষ (HLS সমর্থন সহ প্লেয়ার)। সম্পূর্ণ প্রক্রিয়া — ভিডিও ক্যাপচার থেকে ব্যবহারকারীর ডিভাইসে প্লেব্যাক পর্যন্ত — বেশ কয়েকটি ধারাবাহিক ধাপ অন্তর্ভুক্ত করে, যার প্রতিটি স্ট্রিমিং মানের জন্য গুরুত্বপূর্ণ।
উৎস ভিডিও প্রথমে বিভিন্ন বিটরেট এবং রেজোলিউশনে একাধিক ভেরিয়েন্টে এনকোড করা হয়। FFmpeg বা AWS Elemental MediaConvert-এর মতো পেশাদার এনকোডার একসাথে 4–12টি স্ট্রিম ভেরিয়েন্ট তৈরি করে: 240p (400 Kbps) থেকে 4K (40 Mbps) পর্যন্ত। প্রতিটি ভেরিয়েন্ট সমান দৈর্ঘ্যের সেগমেন্টে বিভক্ত হয়, সাধারণত LL-HLS-এর জন্য 2–6 সেকেন্ড বা ঐতিহ্যবাহী HLS-এর জন্য 6–10 সেকেন্ড।
প্রতিটি ভেরিয়েন্টের জন্য একটি ভেরিয়েন্ট প্লেলিস্ট তৈরি করা হয় যাতে সমস্ত সেগমেন্টের URL এবং তাদের দৈর্ঘ্য থাকে। অতিরিক্তভাবে, একটি মাস্টার প্লেলিস্ট তৈরি করা হয় যা সমস্ত ভেরিয়েন্ট একত্রিত করে এবং প্রতিটি সম্পর্কে তথ্য রাখে: রেজোলিউশন, বিটরেট, কোডেক এবং অডিও ট্র্যাক। ক্লায়েন্ট প্রথমে মাস্টার প্লেলিস্ট লোড করে, তারপর কানেকশন গতি বিশ্লেষণের উপর ভিত্তি করে উপযুক্ত ভেরিয়েন্ট নির্বাচন করে।
সেগমেন্ট এবং প্লেলিস্ট ভৌগলিকভাবে ব্যবহারকারীদের কাছাকাছি অবস্থিত CDN সার্ভারে ক্যাশ করা হয়। বিতরণের জন্য স্ট্যান্ডার্ড HTTP প্রোটোকল ব্যবহার HLS-কে একটি গুরুত্বপূর্ণ সুবিধা দেয়: যেকোনো CDN, লোড ব্যালেন্সার বা প্রক্সি সার্ভার যা HTTP সমর্থন করে, অতিরিক্ত কনফিগারেশন ছাড়াই HLS-এর সাথে কাজ করে। এটি HLS-কে RTMP বা WebRTC-এর মতো রিয়েল-টাইম প্রোটোকল থেকে আলাদা করে, যার জন্য বিশেষায়িত সার্ভার প্রয়োজন।
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) ব্যবহার করে। HLS প্লেয়ার মাস্টার প্লেলিস্ট লোড করে, উপলব্ধ ভেরিয়েন্ট বিশ্লেষণ করে এবং সবচেয়ে উপযুক্ত বিটরেটে প্লেব্যাক শুরু করে। প্লেব্যাকের সময়, প্লেয়ার ক্রমাগত সেগমেন্ট ডাউনলোড গতি এবং বাফার পূরণের স্তর পর্যবেক্ষণ করে, উচ্চ বা নিম্ন বিটরেটে সুইচ করার সিদ্ধান্ত নেয়। আধুনিক ABR অ্যালগরিদম শুধু নেটওয়ার্ক গতিই নয়, বাফার আকার, কন্টেন্টের ধরন এবং এমনকি ডিভাইসের পাওয়ার খরচও বিবেচনা করে।
এনকোডিং, বিতরণ সঠিকভাবে কনফিগার করতে এবং প্লেব্যাক সমস্যা ডিবাগ করতে HLS স্ট্রিমের কাঠামো বোঝা প্রয়োজন। প্রতিটি HLS স্ট্রিমে দুটি স্তরের প্লেলিস্ট এবং অসংখ্য মিডিয়া সেগমেন্ট থাকে যা একটি কঠোর শ্রেণিবিন্যাসে সংগঠিত।
মাস্টার প্লেলিস্ট HLS প্লেয়ারের জন্য প্রবেশ বিন্দু। .m3u8 এক্সটেনশনযুক্ত ফাইলটিতে সমস্ত স্ট্রিম ভেরিয়েন্ট এবং তাদের বৈশিষ্ট্যের রেফারেন্স থাকে। প্লেয়ার প্রথমে এই ফাইলটি লোড করে এবং বিটরেট ও রেজোলিউশন সম্পর্কে তথ্যের উপর ভিত্তি করে কোন ভেরিয়েন্ট নির্বাচন করবে সে সম্পর্কে প্রাথমিক সিদ্ধান্ত নেয়। মাস্টার প্লেলিস্টে বিকল্প অডিও ট্র্যাক, সাবটাইটেল এবং দ্রুত স্কিপিংয়ের জন্য I-Frame প্লেলিস্টের রেফারেন্সও থাকতে পারে।
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080
1080p/video.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360
360p/video.m3u8
মিডিয়া প্লেলিস্ট-এ একটি স্ট্রিম ভেরিয়েন্টের জন্য প্রকৃত সেগমেন্টের তালিকা থাকে। প্রতিটি সেগমেন্ট তার দৈর্ঘ্য এবং URI সহ উল্লেখ করা হয়। মিডিয়া প্লেলিস্ট স্থির (VOD-এর জন্য — সমস্ত সেগমেন্টের সম্পূর্ণ তালিকা) বা গতিশীলভাবে আপডেট হওয়া (লাইভ সম্প্রচারের জন্য — পুরানো সেগমেন্ট সরানো হয়, নতুন যোগ করা হয়) হতে পারে।
#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 iOS 10 এবং macOS Sierra থেকে শুরু করে সমস্ত নতুন প্রকল্পের জন্য fMP4 সুপারিশ করে।
অতিরিক্ত HLS স্ট্রিম উপাদানগুলির মধ্যে দ্রুত স্কিপিংয়ের জন্য I-Frame প্লেলিস্ট, সাবটাইটেল এবং বিজ্ঞাপন মার্কার সিঙ্ক্রোনাইজ করার জন্য ID3 মেটাডেটা, এবং অ্যানালিটিক্স সার্ভারে দেখার তথ্য প্রেরণের জন্য Session Data অন্তর্ভুক্ত। এই সমস্ত উপাদান ঐচ্ছিক, তবে তাদের ব্যবহার ব্যবহারকারীর অভিজ্ঞতার মান উন্নত করে।
HLS বেশ কয়েকটি আর্কিটেকচারাল সুবিধার কারণে ভিডিও স্ট্রিমিং বাজারে আধিপত্য বিস্তার করে, তবে এর সীমাবদ্ধতাও রয়েছে যা একটি নির্দিষ্ট প্রকল্পের জন্য প্রোটোকল নির্বাচনের সময় বিবেচনা করা আবশ্যক। আসুন HLS-এর তুলনা বিকল্প ভিডিও বিতরণ প্রোটোকলের সাথে করি।
| বৈশিষ্ট্য | HLS | DASH | RTMP |
|---|---|---|---|
| পরিবহন | 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-এর হল বিল্ট-ইন AVPlayer-এর মাধ্যমে সমস্ত Apple ডিভাইসে (iPhone, iPad, Apple TV, Mac) নেটিভ সমর্থন। এটি HLS-কে iOS/macOS অ্যাপ্লিকেশনের জন্য ডি-ফ্যাক্টো স্ট্যান্ডার্ড বানায়। এছাড়া, বিতরণের জন্য স্ট্যান্ডার্ড HTTP ব্যবহার অতিরিক্ত কনফিগারেশন ছাড়াই যেকোনো CDN এবং প্রক্সি সার্ভারে কন্টেন্ট ক্যাশ করার অনুমতি দেয়, যা বিতরণ পরিকাঠামো উল্লেখযোগ্যভাবে সহজ করে।
HLS-এর অসুবিধাগুলির মধ্যে লাইভ সম্প্রচারের জন্য RTMP বা WebRTC-এর তুলনায় উচ্চতর লেটেন্সি অন্তর্ভুক্ত। LL-HLS-এর সাথেও, ন্যূনতম লেটেন্সি 2–6 সেকেন্ড, যা রিয়েল-টাইম ইন্টারঅ্যাকটিভ পরিস্থিতির জন্য অগ্রহণযোগ্য। এছাড়া, HLS সার্ভারে আরও ফাইল তৈরি করে (প্রতিটি সেগমেন্ট একটি পৃথক ফাইল), যা বৃহৎ সংখ্যক একসঙ্গে স্ট্রিমের সাথে ফাইল সিস্টেমে লোড তৈরি করতে পারে।
মোবাইল অ্যাপ্লিকেশনে HLS-এর একীকরণ প্ল্যাটফর্মের উপর নির্ভর করে ভিন্ন। iOS এবং macOS-এ, HLS অপারেটিং সিস্টেম স্তরে AVFoundation এবং AVPlayer-এর মাধ্যমে সমর্থিত, যা হার্ডওয়্যার-ত্বরিত ডিকোডিং এবং ন্যূনতম পাওয়ার খরচ প্রদান করে। Android-এ, HLS বিল্ট-ইন MediaPlayer দ্বারা সমর্থিত নয় তবে Google-এর অফিসিয়াল মিডিয়া প্লেয়ার ExoPlayer-এর মাধ্যমে উপলব্ধ।
Apple প্ল্যাটফর্মে, AVPlayer-এ বিল্ট-ইন সমর্থনের কারণে HLS প্লেব্যাক অত্যন্ত সহজ। শুধু মাস্টার প্লেলিস্ট URL সহ একটি AVPlayer তৈরি করুন, এবং সিস্টেম স্বয়ংক্রিয়ভাবে অ্যাডাপটিভ বিটরেট সুইচিং, অডিও ট্র্যাক নির্বাচন এবং সাবটাইটেল প্রক্রিয়াকরণ পরিচালনা করে। ডেভেলপার AVPlayerItem এবং 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()
}
Android-এর জন্য ExoPlayer ব্যবহার করা হয়, যা একটি পৃথক এক্সটেনশন মডিউলের মাধ্যমে HLS সমর্থন করে। ExoPlayer HLS স্ট্রিমের উপর আরও সূক্ষ্ম নিয়ন্ত্রণ প্রদান করে: বিটরেট নির্বাচন পরিচালনা, বাফারিং কনফিগার এবং সেগমেন্ট লোডিং ত্রুটিগুলি পৃথকভাবে পরিচালনা করা সম্ভব। LL-HLS-এর জন্য ExoPlayer সংস্করণ 2.14.0 বা উচ্চতর প্রয়োজন।
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 কনফিগারেশনের জন্য একটি বিশেষ পদ্ধতির প্রয়োজন। প্রধান সুপারিশগুলির মধ্যে অন্তর্ভুক্ত: নেটওয়ার্কের ধরন (Wi-Fi বা সেলুলার) উপর ভিত্তি করে প্রাথমিক বিটরেট কনফিগার করা, দ্রুত অভিযোজনের জন্য ছোট সেগমেন্ট দৈর্ঘ্য (2–4 সেকেন্ড) ব্যবহার করা, Wi-Fi-তে সুইচ করার সময় বাফার প্রি-লোড করা এবং দুর্বল সিগন্যালে অডিও ট্র্যাককে অগ্রাধিকার দেওয়া।
Apple HLS Authoring Specification for Apple Devices (2024) মোবাইল ডিভাইসের জন্য সর্বোচ্চ 6 সেকেন্ডের সেগমেন্ট আকার এবং কমপক্ষে 4টি বিটরেট ভেরিয়েন্ট ব্যবহার করার সুপারিশ করে। মোবাইল নেটওয়ার্কে ট্রাফিক বাঁচানোর জন্য, সার্ভারকে Cache-Control HTTP হেডার সহ সেগমেন্ট সরবরাহ করা উচিত, যা টেলিকম অপারেটরদের মধ্যবর্তী প্রক্সি সার্ভারে কন্টেন্ট ক্যাশ করার অনুমতি দেয়।
সচরাচর জিজ্ঞাসা
MP4 হল একটি সম্পূর্ণ ভিডিও ফাইল সংরক্ষণের জন্য একটি কন্টেইনার যা প্লেব্যাক শুরু হওয়ার আগে সম্পূর্ণরূপে ডাউনলোড করা আবশ্যক। HLS ভিডিওকে ছোট সেগমেন্টে বিভক্ত করে এবং প্রথম সেগমেন্ট লোড করার 2–6 সেকেন্ড পরে দেখা শুরু করার অনুমতি দেয়, ইন্টারনেট গতি অনুযায়ী স্বয়ংক্রিয়ভাবে মান অভিযোজিত করে।
হ্যাঁ, HLS-এর Apple সার্ভার সফ্টওয়্যারের প্রয়োজন নেই। যেকোনো HTTP সার্ভার (Nginx, Apache, CDN) HLS কন্টেন্ট সরবরাহ করতে পারে। ভিডিও HLS-এ এনকোড করতে FFmpeg বা পেশাদার এনকোডার ব্যবহার করা হয়। একমাত্র শর্ত হল .m3u8 ফাইলের জন্য সঠিক MIME-টাইপ কনফিগারেশন।
হ্যাঁ, HLS মূলত লাইভ সম্প্রচারের জন্য বিকশিত হয়েছিল। লাইভ সম্প্রচারের সময়, মিডিয়া প্লেলিস্ট গতিশীলভাবে আপডেট হয়: সার্ভার নতুন সেগমেন্ট যোগ করে এবং পুরানো সরিয়ে দেয়। Low-Latency HLS (LL-HLS) লেটেন্সি 2–6 সেকেন্ডে কমিয়ে আনে, যা HLS-কে খেলাধুলা এবং সংবাদ সম্প্রচারের জন্য উপযুক্ত করে তোলে।
মাস্টার প্লেলিস্ট বিভিন্ন বিটরেট এবং রেজোলিউশনে একই কন্টেন্টের সমস্ত ভেরিয়েন্ট একত্রিত করে। প্লেয়ার এটি প্রথমে লোড করে, প্রতিটি ভেরিয়েন্টের বৈশিষ্ট্য (বিটরেট, রেজোলিউশন, কোডেক) বিশ্লেষণ করে এবং বর্তমান নেটওয়ার্ক অবস্থার জন্য সর্বোত্তমটি নির্বাচন করে। মাস্টার প্লেলিস্ট ছাড়া অ্যাডাপটিভ মান সুইচিং অসম্ভব।
HLS সেগমেন্টের AES-128 এনক্রিপশন এবং DRM সিস্টেমের সাথে একীকরণ সমর্থন করে: FairPlay Streaming (Apple), Widevine (Google) এবং PlayReady (Microsoft)। এনক্রিপশন কীগুলি একটি পৃথক সুরক্ষিত চ্যানেলে প্রেরণ করা হয়। অতিরিক্ত সুরক্ষার জন্য প্লেলিস্ট অ্যাক্সেসে টোকেন-ভিত্তিক প্রমাণীকরণ ব্যবহার করা হয়।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন