Dynamic Adaptive Streaming over HTTP (DASH) হল মাল্টিমিডিয়ার অ্যাডাপ্টিভ স্ট্রিমিংয়ের জন্য একটি আন্তর্জাতিক মান, যা MPEG (Moving Picture Experts Group) দ্বারা তৈরি। DASH, Media Presentation Description (MPD) ফরম্যাটে XML স্ট্রিম বিবরণ ব্যবহার করে HTTP-এর মাধ্যমে ভিডিও এবং অডিও সরবরাহ করে এবং কন্টেন্টকে বিভিন্ন বিটরেট-এর সেগমেন্টে ভাগ করে। Bitmovin Video Developer Report (2025) অনুসারে, 58% ভিডিও ডেভেলপার DASH ব্যবহার করে, যা একে HLS-এর পরে দ্বিতীয় সর্বাধিক জনপ্রিয় প্রোটোকল করে তুলেছে।
মূল পয়েন্ট
MPEG-DASH (Dynamic Adaptive Streaming over HTTP) হল একটি আন্তর্জাতিক মান ISO/IEC 23009-1, যা 2012 সালে মালিকানাধীন অ্যাডাপ্টিভ স্ট্রিমিং সমাধানের খণ্ডিতকরণের প্রতিক্রিয়া হিসেবে প্রকাশিত হয়। HLS (Apple-এর মালিকানাধীন প্রোটোকল) এবং Smooth Streaming (Microsoft)-এর বিপরীতে, DASH প্রথম থেকেই একটি উন্মুক্ত, ভেন্ডর-স্বাধীন মান হিসেবে তৈরি করা হয়েছিল, যা শিল্পে এর ব্যাপক সমর্থন নিশ্চিত করেছে।
DASH-এর প্রধান উদ্ভাবন হল স্ট্রিম বিবরণ এবং মিডিয়া কন্টেন্টের পৃথকীকরণ। স্ট্রিম বিবরণ MPD (Media Presentation Description) নামক একটি XML ফাইলে সংরক্ষণ করা হয়, যাতে উপলব্ধ বিকল্পগুলি সম্পর্কে সমস্ত তথ্য থাকে: বিটরেট, রেজোলিউশন, কোডেক, সাবটাইটেল, অডিও ট্র্যাক। মিডিয়া কন্টেন্ট পৃথক সেগমেন্টে (সাধারণত fMP4) সংরক্ষণ করা হয়, যা HTTP-এর মাধ্যমে স্বাধীনভাবে লোড করা যায়। এই আর্কিটেকচার সার্ভার পরিকাঠামোকে যতটা সম্ভব সহজ করতে দেয় — যেকোনো HTTP সার্ভার DASH কন্টেন্ট সরবরাহ করতে পারে।
DASH-এ অভিযোজনযোগ্যতা কন্টেন্ট ভেরিয়েন্টের মাল্টিপ্লেক্সিংয়ের মাধ্যমে বাস্তবায়িত হয়। সার্ভার একাধিক Representation তৈরি করে — বিভিন্ন কম্প্রেশন প্যারামিটার সহ কন্টেন্টের কপি। ক্লায়েন্ট চ্যানেল ব্যান্ডউইথ বিশ্লেষণ করে এবং গুণমান এবং প্লেব্যাক স্থিতিশীলতার সর্বোত্তম ভারসাম্য বেছে নিয়ে প্রতিনিধিত্বের মধ্যে গতিশীলভাবে সুইচ করে। একটি একাডেমিক গবেষণা (IEEE Access, 2024) অনুসারে, BOLA অ্যালগরিদম সহ DASH অস্থির সংযোগে HLS-এর তুলনায় 22% কম বিটরেট সুইচ দেখায়।
MPEG বিদ্যমান সমাধানগুলি: Apple HLS, Microsoft Smooth Streaming এবং Adobe HDS বিশ্লেষণ করার পর 2010 সালে DASH-এ কাজ শুরু করে। মানের প্রথম সংস্করণ (ISO/IEC 23009-1:2012) 2012 সালে প্রকাশিত হয়। দ্বিতীয় সংস্করণ (2014) ইভেন্টের জন্য সমর্থন, উন্নত বিজ্ঞাপন সন্নিবেশ এবং সার্ভার-নিয়ন্ত্রিত অভিযোজন যুক্ত করে। তৃতীয় সংস্করণ (2019) HDR, 8K, হ্যাপটিক ভিডিও এবং 5G নেটওয়ার্কের জন্য MMT (MPEG Media Transport)-এর সাথে উন্নত একীকরণের জন্য সমর্থন যুক্ত করে।
2024 সালে, MPEG DASH Next Generation ঘোষণা করে, যার মধ্যে নিউরাল নেটওয়ার্ক কোডেক, ক্লাউড রেন্ডারিং এবং এক্সটেন্ডেড রিয়েলিটি (XR) পরিস্থিতির জন্য অপ্টিমাইজেশন অন্তর্ভুক্ত রয়েছে। একটি মূল উদ্ভাবন হল নিউরাল নেটওয়ার্ক-ভিত্তিক ভিডিও কোডিং (NNVC), যা ক্লায়েন্ট-সাইড ডিকোডিংয়ের জন্য ML মডেল ব্যবহার করে, যা গুণমান বজায় রেখে বিটরেট 30-50% কমাতে পারে।
DASH স্ট্রিম প্লেব্যাক প্রক্রিয়ায় চারটি ক্রমিক ধাপ রয়েছে: MPD প্রাপ্তি, স্ট্রিম বিবরণ পার্স করা, প্রাথমিক প্রতিনিধিত্ব নির্বাচন এবং প্রতিনিধিত্বের মধ্যে গতিশীল সুইচিং। প্রতিটি ধাপের নিজস্ব বৈশিষ্ট্য রয়েছে যা ব্যবহারকারীর অভিজ্ঞতার গুণমানকে প্রভাবিত করে।
প্লেয়ার একটি পরিচিত URL থেকে MPD ফাইল লোড করে। MPD-তে সম্পূর্ণ স্ট্রিম বর্ণনাকারী XML কাঠামো থাকে: কন্টেন্ট সময়কাল, টাইমলাইন, উপলব্ধ পিরিয়ড (Period), অ্যাডাপ্টেশন সেট (AdaptationSet), এবং নির্দিষ্ট এনকোডিং প্যারামিটার সহ প্রতিনিধিত্ব (Representation)। প্লেয়ার MPD পার্স করে এবং উপলব্ধ মিডিয়া রিসোর্সের একটি অভ্যন্তরীণ মডেল তৈরি করে।
দুটি রেজোলিউশন সহ VOD কন্টেন্টের জন্য একটি বেসিক MPD ফাইলের উদাহরণ:
<?xml version="1.0" encoding="utf-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
type="static"
mediaPresentationDuration="PT1H30M">
<Period duration="PT1H30M">
<AdaptationSet mimeType="video/mp4">
<Representation bandwidth="5000000"
width="1920" height="1080"
codecs="avc1.640028"/>
<Representation bandwidth="1000000"
width="640" height="360"
codecs="avc1.64001E"/>
</AdaptationSet>
</Period>
</MPD>
প্রাথমিক প্রতিনিধিত্ব নির্বাচনের পর, প্লেয়ার সেগমেন্ট লোড করা শুরু করে। প্রতিটি সেগমেন্টে কয়েক সেকেন্ডের কন্টেন্ট (সাধারণত 2-10 সেকেন্ড) থাকে। প্লেয়ার বেশ কয়েকটি সেগমেন্ট এগিয়ে একটি বাফার বজায় রাখে, যা নেটওয়ার্ক গতিতে স্বল্পমেয়াদী পতনের বিরুদ্ধে স্থিতিস্থাপকতা নিশ্চিত করে। ABR (অ্যাডাপ্টিভ বিটরেট) অ্যালগরিদম ক্রমাগত সেগমেন্ট ডাউনলোড গতি পর্যবেক্ষণ করে এবং উপলব্ধ বিটরেটের মধ্যে সুইচ করার সিদ্ধান্ত নেয়।
DASH-এর জন্য আধুনিক ABR অ্যালগরিদম, যেমন BOLA (Buffer Occupancy based Lyapunov Algorithm) এবং Pensieve (Reinforcement Learning-ভিত্তিক), শুধুমাত্র বর্তমান ব্যান্ডউইথ নয় বরং বাফার আকার, কন্টেন্টের ধরন (খেলা, সংবাদ, চলচ্চিত্র) এবং এমনকি ডিভাইসের পাওয়ার খরচও বিবেচনা করে। BOLA, যা dash.js এবং ExoPlayer-এর অংশ, স্থিতিশীল বাফার বজায় রেখে বিটরেট সুইচের সংখ্যা কমিয়ে দেয়, যা ACM গবেষণা (Spiteri et al., 2020) দ্বারা নিশ্চিত করা হয়েছে।
একটি DASH স্ট্রিমের শ্রেণিবদ্ধ কাঠামো চারটি স্তরে সংগঠিত: MPD → Period → AdaptationSet → Representation। প্রতিটি স্তর বিশদ একটি স্তর যোগ করে, যা সরল VOD থেকে বিজ্ঞাপন সন্নিবেশ এবং মাল্টি-এঙ্গেল ভিডিও সহ লাইভ সম্প্রচার পর্যন্ত জটিল পরিস্থিতি বর্ণনা করার অনুমতি দেয়।
MPD হল মূল উপাদান যা সম্পূর্ণ মিডিয়া উপস্থাপনা বর্ণনা করে। MPD বৈশিষ্ট্যগুলি স্ট্রিমের ধরন (VOD-এর জন্য static, লাইভের জন্য dynamic), মোট সময়কাল, টাইমলাইন, প্রোফাইল এবং DRM তথ্য সংজ্ঞায়িত করে। MPD-তে এক বা একাধিক Period থাকতে পারে, যার প্রতিটি কন্টেন্টের একটি স্বাধীন সময় খণ্ডের প্রতিনিধিত্ব করে।
Period উপস্থাপনার একটি সময় খণ্ড। VOD-এর জন্য, সম্পূর্ণ কন্টেন্টের জন্য একটি একক Period ব্যবহার করা হয়। বিজ্ঞাপন বিরতি সহ লাইভের জন্য, Period গতিশীলভাবে পরিবর্তিত হতে পারে — প্লেয়ার আপডেট করা MPD লোড করে এবং বিজ্ঞাপন ব্লকের সাথে সম্পর্কিত একটি নতুন Period সনাক্ত করে। প্রতিটি Period-এ এক বা একাধিক AdaptationSet থাকে।
AdaptationSet হল একটি মিডিয়া প্রকারের বিনিময়যোগ্য প্রতিনিধিত্বের একটি গ্রুপ: ভিডিও, অডিও, সাবটাইটেল। একটি AdaptationSet-এর মধ্যে, সমস্ত প্রতিনিধিত্ব শুধুমাত্র বিটরেট এবং/অথবা রেজোলিউশনে ভিন্ন, কিন্তু একই কন্টেন্ট এনকোড করে। একটি গুরুত্বপূর্ণ বৈশিষ্ট্য: প্লেয়ার প্লেব্যাক বাধা ছাড়াই সেগমেন্ট সীমানায় একই AdaptationSet-এর মধ্যে প্রতিনিধিত্বের মধ্যে সুইচ করতে পারে।
Representation হল একটি নির্দিষ্ট বিটরেট, রেজোলিউশন এবং কোডেক সহ একটি নির্দিষ্ট এনকোডিং ভেরিয়েন্ট। প্রতিটি Representation-এর জন্য, MPD সেগমেন্ট লোড করার জন্য একটি URL টেমপ্লেট নির্দিষ্ট করে। DASH একটি নমনীয় সেগমেন্ট অ্যাড্রেসিং সিস্টেম ব্যবহার করে — সেগমেন্ট নম্বর এবং সময় প্রতিস্থাপন ($Number$, $Time$) সহ URL টেমপ্লেটের মাধ্যমে, যা সার্ভারকে MPD-তে প্রতিটি সেগমেন্ট তালিকাভুক্ত না করেই গতিশীলভাবে ফাইলের নাম তৈরি করার অনুমতি দেয়।
DASH-এ সেগমেন্ট দুই ধরনের হতে পারে: Segment প্রকার (শুধুমাত্র মিডিয়া ডেটা থাকে) এবং Subsegment প্রকার (আরও সূক্ষ্ম অ্যাক্সেসের জন্য সেগমেন্টের অংশ)। DASH কন্টেন্ট এনকোড করার জন্য FFmpeg বা ব্যাচ এনকোডারের মতো টুল ব্যবহার করা হয়। একটি ইনপুট ফাইল থেকে DASH স্ট্রিম তৈরির উদাহরণ:
import subprocess
subprocess.run([
"ffmpeg",
"-i", "input.mp4",
"-filter_complex",
"[0:v]split=2[v1][v2];[v1]scale=1920:1080[v1out];[v2]scale=640:360[v2out]",
"-map", "[v1out]", "-b:v:0", "5000k",
"-map", "[v2out]", "-b:v:1", "1000k",
"-map", "0:a",
"-f", "dash",
"-seg_duration", "4",
"-use_template", "1",
"-use_timeline", "1",
"dash/stream.mpd"
])
DASH এবং HLS-এর মধ্যে পছন্দ একটি ভিডিও স্ট্রিমিং সিস্টেম ডিজাইন করার সময় মূল সিদ্ধান্তগুলির মধ্যে একটি। উভয় প্রোটোকল একই সমস্যা (HTTP-এর মাধ্যমে অ্যাডাপ্টিভ ভিডিও সরবরাহ) সমাধান করে, কিন্তু আর্কিটেকচার, কোডেক সমর্থন এবং ইকোসিস্টেমে মৌলিক পার্থক্য রয়েছে। আসুন মূল প্যারামিটার দ্বারা তাদের পরীক্ষা করি।
| প্যারামিটার | DASH | HLS |
|---|---|---|
| মান | আন্তর্জাতিক (ISO/IEC 23009-1) | মালিকানাধীন (RFC 8216, Apple) |
| স্ট্রিম বিবরণ | XML (MPD) | M3U8 প্লেলিস্ট |
| কোডেক | যেকোনো (H.264, HEVC, AV1, VP9) | সীমিত (H.264, HEVC, 2023 থেকে AV1) |
| সেগমেন্ট ফরম্যাট | fMP4 (প্রধান), MPEG-2 TS | MPEG-2 TS, fMP4 |
| DRM | CENC (সব DRM-এর জন্য একীভূত) | FairPlay, Widevine (পৃথক) |
| iOS সমর্থন | তৃতীয়-পক্ষ প্লেয়ারের মাধ্যমে | নেটিভ (AVPlayer, Safari) |
| ব্রাউজার | Chrome, Firefox, Edge (MSE-এর মাধ্যমে) | Safari (নেটিভ), অন্যান্য MSE-এর মাধ্যমে |
মূল সুবিধা DASH-এর — কোডেক স্বাধীনতা। যেখানে HLS মূলত কোডেকগুলিকে Apple (H.264, HEVC, এবং সম্প্রতি AV1) দ্বারা সমর্থিত পর্যন্ত সীমাবদ্ধ করেছিল, সেখানে DASH প্লেয়ার দ্বারা সমর্থিত যেকোনো কোডেক ব্যবহার করতে পারে: VP9/VP8 (YouTube এবং Chrome-এর জন্য গুরুত্বপূর্ণ), AV1 (দক্ষতার জন্য), H.264/HEVC (সামঞ্জস্যের জন্য)। এটি DASH-কে ক্রস-প্ল্যাটফর্ম পরিষেবার জন্য পছন্দের বিকল্প করে তোলে যেখানে সমস্ত ডিভাইসের জন্য একটি একীভূত স্ট্রিম প্রয়োজন।
অসুবিধা iOS-এ DASH-এর — Safari এবং AVPlayer-এ নেটিভ সমর্থনের অভাব। iOS ডেভেলপারদের VTDecoder-এর মাধ্যমে একীকরণ সহ তৃতীয়-পক্ষ HLS-সামঞ্জস্যপূর্ণ প্লেয়ার বা libdash-এর মতো লাইব্রেরি ব্যবহার করতে হবে। অনুশীলনে, এর অর্থ হল iOS-প্রথম প্রকল্পগুলির জন্য, HLS প্রকৃত মান হিসাবে রয়ে গেছে, যেখানে Android এবং ওয়েব প্ল্যাটফর্মের জন্য, DASH আরও নমনীয় এবং শক্তিশালী সমাধান।
মোবাইল অ্যাপ্লিকেশনে DASH-এর একীকরণ প্ল্যাটফর্মের উপর নির্ভর করে। Android-এ, DASH এক্সটেনশন মডিউলের সাথে সরাসরি ExoPlayer-এর মাধ্যমে সমর্থিত। iOS-এ, AVFoundation বা MPEGDASHPlayer-এর মাধ্যমে একীকরণ সহ libdash-এর মতো তৃতীয়-পক্ষ লাইব্রেরির প্রয়োজন। আসুন উভয় প্ল্যাটফর্মের জন্য ব্যবহারিক বাস্তবায়ন দেখি।
Google-এর ExoPlayer `exoplayer-dash` মডিউলের মাধ্যমে DASH-এর জন্য অন্তর্নির্মিত সমর্থন প্রদান করে। একটি DASH স্ট্রিম সংযোগ করা অন্যান্য ফরম্যাট থেকে আলাদা নয় — শুধু MediaItem-এ MPD ফাইলের URI পাস করুন। ExoPlayer স্বয়ংক্রিয়ভাবে কন্টেন্ট ফরম্যাট সনাক্ত করে এবং উপযুক্ত রেন্ডারার চালু করে, সমস্ত মানক ABR অ্যালগরিদম সমর্থন করে।
val player = ExoPlayer.Builder(this).build()
val dashMediaItem = MediaItem
.Builder()
.setUri("https://example.com/dash/stream.mpd")
.setMimeType("application/dash+xml")
.build()
player.setMediaItem(dashMediaItem)
player.prepare()
player.playWhenReady = true
Common Encryption (CENC) DASH-এর মূল বৈশিষ্ট্যগুলির মধ্যে একটি, যা বিভিন্ন DRM সিস্টেমের সাথে একটি একক মিডিয়া স্ট্রিম ব্যবহারের অনুমতি দেয়। MPD ফাইলে DRM সিস্টেম শনাক্তকারী (Widevine, PlayReady, FairPlay) সহ ContentProtection XML উপাদান থাকে। ক্লায়েন্ট তার প্ল্যাটফর্মের উপর ভিত্তি করে উপযুক্ত DRM সিস্টেম নির্বাচন করে এবং লাইসেন্স সার্ভার থেকে একটি লাইসেন্সের অনুরোধ করে।
val drmLicenseUri = Uri.parse("https://license.example.com/wv")
val drmSessionManager = DefaultDrmSessionManager
.Builder()
.setUuidAndExoMediaDrmProvider(
C.WIDEVINE_UUID,
FrameworkMediaDrm.DEFAULT_PROVIDER
)
.build(drmLicenseUri, null)
val mediaItem = MediaItem
.Builder()
.setUri("https://example.com/encrypted/stream.mpd")
.setDrmConfiguration(
MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
.setLicenseUri("https://license.example.com/wv")
.build()
)
.build()
মোবাইল অ্যাপ্লিকেশনগুলির ব্যান্ডউইথ এবং পাওয়ার খরচের সীমাবদ্ধতার কারণে বিশেষ DASH কনফিগারেশন প্রয়োজন। মূল সুপারিশগুলির মধ্যে রয়েছে: স্বল্পমেয়াদী গতি হ্রাসের বিরুদ্ধে স্থিতিস্থাপকতার জন্য ন্যূনতম 2-3 সেগমেন্টের বাফার সেট করা, নেটওয়ার্ক পরিবর্তনে দ্রুত প্রতিক্রিয়ার জন্য 2-4 সেকেন্ড দীর্ঘ সেগমেন্ট ব্যবহার করা এবং গুণমান পরিবর্তন করার সময় পরবর্তী সেগমেন্ট প্রিলোড করা।
মোবাইল নেটওয়ার্কে ট্রাফিক বাঁচাতে, Bitmovin (2024) Content Steering ব্যবহারের সুপারিশ করে — HLS-এর অনুরূপ ফাংশনের মতো একটি প্রক্রিয়া, যা ক্লায়েন্টকে গতিশীলভাবে সর্বোত্তম CDN নোডে নির্দেশিত করার অনুমতি দেয়। DASH Content Steering ISO/IEC 23009-1:2022 স্পেসিফিকেশনে বর্ণিত হয়েছে এবং dash.js 4.5+ এবং ExoPlayer 2.18+ এ সমর্থিত।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
DASH হল একটি উন্মুক্ত আন্তর্জাতিক MPEG মান, যা কোনো ভেন্ডরের সাথে আবদ্ধ নয়। HLS (Apple-এর মালিকানাধীন প্রোটোকল) এর বিপরীতে, DASH যেকোনো কোডেক সমর্থন করে, M3U8-এর পরিবর্তে XML স্ট্রিম বিবরণ (MPD) ব্যবহার করে এবং CENC-এর মাধ্যমে একীভূত DRM সিস্টেম প্রদান করে। HLS-এর iOS-এ নেটিভ সমর্থন রয়েছে, যেখানে DASH ক্রস-প্ল্যাটফর্ম সমাধানের জন্য আরও নমনীয়।
Android-এ, DASH-এর জন্য প্রাথমিক প্লেয়ার হল exoplayer-dash মডিউল সহ Google-এর ExoPlayer। iOS-এ, AVFoundation-এর মাধ্যমে একীকরণ সহ libdash বা বাণিজ্যিক প্লেয়ার (THEOplayer, Bitmovin) এর মতো তৃতীয়-পক্ষ সমাধান ব্যবহার করা হয়। ওয়েব ব্রাউজারে, DASH MediaSource Extensions ব্যবহার করে dash.js-এর মাধ্যমে চালানো হয়।
MPD (Media Presentation Description) হল একটি XML ফাইল যা DASH স্ট্রিম কাঠামো বর্ণনা করে: কন্টেন্ট সময়কাল, উপলব্ধ বিটরেট, রেজোলিউশন, কোডেক, সেগমেন্ট ফরম্যাট এবং তাদের অবস্থান। MPD প্লেয়ারের জন্য প্রবেশ বিন্দু হিসাবে কাজ করে, HLS-এ মাস্টার প্লেলিস্টকে প্রতিস্থাপন করে। MPD ফাইল ছাড়া, DASH কন্টেন্ট প্লেব্যাক অসম্ভব।
হ্যাঁ, DASH VOD এবং লাইভ সম্প্রচার উভয়ই সমর্থন করে। লাইভের জন্য, স্বয়ংক্রিয় আপডেট সহ dynamic MPD প্রকার ব্যবহার করা হয়। সার্ভার পর্যায়ক্রমে MPD আপডেট করে, নতুন সেগমেন্ট যোগ করে এবং পুরাতনগুলি সরিয়ে দেয়। চাঙ্কড এনকোডিং সহ Low-Latency DASH (LL-DASH) 3-8 সেকেন্ডের লেটেন্সি অর্জন করে, যা LL-HLS-এর সাথে তুলনীয়।
DASH Common Encryption (CENC, ISO/IEC 23001-7) ব্যবহার করে, যা মিডিয়া কন্টেন্টকে একবার এনক্রিপ্ট করতে এবং যেকোনো DRM সিস্টেম দ্বারা ডিক্রিপ্ট করার অনুমতি দেয়। MPD-তে সমর্থিত DRM (Widevine, PlayReady, FairPlay) নির্দেশকারী ContentProtection XML উপাদান থাকে। প্লেয়ার প্ল্যাটফর্মের উপর ভিত্তি করে উপযুক্ত DRM নির্বাচন করে এবং নির্দিষ্ট URL-এর মাধ্যমে একটি লাইসেন্সের অনুরোধ করে।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন