Dynamic Adaptive Streaming over HTTP (DASH) เป็นมาตรฐานสากลสำหรับการสตรีมมัลติมีเดียแบบปรับตัวได้ ซึ่งพัฒนาโดย MPEG (Moving Picture Experts Group) DASH ส่งมอบวิดีโอและเสียงผ่าน HTTP โดยใช้คำอธิบายสตรีมแบบ XML ในรูปแบบ Media Presentation Description (MPD) และแบ่งเนื้อหาออกเป็นส่วนๆ ตามบิตเรตที่แตกต่างกัน ตามรายงาน 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 คือการแยกคำอธิบายสตรีมและเนื้อหามัลติมีเดีย คำอธิบายสตรีมถูกเก็บไว้ในไฟล์ XML ที่เรียกว่า MPD (Media Presentation Description) ซึ่งมีข้อมูลทั้งหมดเกี่ยวกับตัวเลือกที่มี: บิตเรต, ความละเอียด, ตัวแปลงสัญญาณ, คำบรรยาย, แทร็กเสียง เนื้อหามัลติมีเดียถูกเก็บไว้ในส่วนที่แยกจากกัน (โดยปกติคือ fMP4) ซึ่งสามารถโหลดได้อย่างอิสระผ่าน HTTP สถาปัตยกรรมนี้ช่วยให้โครงสร้างพื้นฐานเซิร์ฟเวอร์เรียบง่ายที่สุดเท่าที่จะเป็นไปได้ — เซิร์ฟเวอร์ HTTP ใดๆ ก็สามารถให้บริการเนื้อหา DASH ได้
ความสามารถในการปรับตัว ใน DASH ถูกนำไปใช้ผ่านการมัลติเพล็กซ์ของรูปแบบเนื้อหาที่หลากหลาย เซิร์ฟเวอร์เตรียมหลาย Representation — สำเนาของเนื้อหาที่มีพารามิเตอร์การบีบอัดต่างกัน ไคลเอนต์วิเคราะห์แบนด์วิธของช่องสัญญาณและสลับระหว่างรูปแบบต่างๆ อย่างไดนามิก โดยเลือกสมดุลที่เหมาะสมที่สุดระหว่างคุณภาพและความเสถียรในการเล่น ตามการศึกษาทางวิชาการ (IEEE Access, 2024) DASH ที่มีอัลกอริทึม BOLA แสดงการสลับบิตเรตน้อยกว่า HLS ถึง 22% ในการเชื่อมต่อที่ไม่เสถียร
MPEG เริ่มทำงานกับ DASH ในปี 2010 หลังจากวิเคราะห์โซลูชันที่มีอยู่: Apple HLS, Microsoft Smooth Streaming และ Adobe HDS มาตรฐานเวอร์ชันแรก (ISO/IEC 23009-1:2012) เผยแพร่ในปี 2012 เวอร์ชันที่สอง (2014) เพิ่มการรองรับเหตุการณ์ การแทรกโฆษณาที่ดีขึ้น และการปรับตัวที่ควบคุมโดยเซิร์ฟเวอร์ เวอร์ชันที่สาม (2019) เพิ่มการรองรับ HDR, 8K, วิดีโอแบบสัมผัส และการรวมที่ดีขึ้นกับ MMT (MPEG Media Transport) สำหรับเครือข่าย 5G
ในปี 2024 MPEG ประกาศ DASH Next Generation ซึ่งรวมถึงการรองรับตัวแปลงสัญญาณโครงข่ายประสาทเทียม การเรนเดอร์บนคลาวด์ และการเพิ่มประสิทธิภาพสำหรับสถานการณ์ความเป็นจริงเสริม (XR) นวัตกรรมสำคัญคือการเข้ารหัสวิดีโอที่ใช้โครงข่ายประสาทเทียม (NNVC) ซึ่งใช้โมเดล ML สำหรับการถอดรหัสฝั่งไคลเอนต์ ซึ่งสามารถลดบิตเรตได้ 30-50% ในขณะที่คงคุณภาพไว้
กระบวนการเล่นสตรีม DASH ประกอบด้วยสี่ขั้นตอนตามลำดับ: การรับ MPD, การแยกวิเคราะห์คำอธิบายสตรีม, การเลือกรูปแบบเริ่มต้น และการสลับระหว่างรูปแบบอย่างไดนามิก แต่ละขั้นตอนมีลักษณะเฉพาะที่ส่งผลต่อคุณภาพของประสบการณ์ผู้ใช้
เครื่องเล่นโหลดไฟล์ MPD จาก URL ที่รู้จัก MPD มีโครงสร้าง XML ที่อธิบายสตรีมทั้งหมด: ระยะเวลาเนื้อหา, เส้นเวลา, ช่วงเวลาที่มี (Period), ชุดการปรับตัว (AdaptationSet) และรูปแบบ (Representation) ที่มีพารามิเตอร์การเข้ารหัสเฉพาะ เครื่องเล่นแยกวิเคราะห์ MPD และสร้างโมเดลภายในของทรัพยากรมัลติมีเดียที่มีอยู่
ตัวอย่างไฟล์ MPD พื้นฐานสำหรับเนื้อหา VOD ที่มีความละเอียดสองแบบ:
<?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 (Adaptive Bitrate) ติดตามความเร็วในการดาวน์โหลดส่วนต่างๆ อย่างต่อเนื่องและตัดสินใจสลับระหว่างบิตเรตที่มีอยู่
อัลกอริทึม ABR สมัยใหม่สำหรับ DASH เช่น 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 กำหนดประเภทสตรีม (static สำหรับ VOD, dynamic สำหรับสด), ระยะเวลาทั้งหมด, เส้นเวลา, โปรไฟล์ และข้อมูล DRM MPD สามารถมี Period หนึ่งหรือหลาย Period ซึ่งแต่ละช่วงแสดงถึงส่วนเวลาอิสระของเนื้อหา
Period เป็นส่วนเวลาของการนำเสนอ สำหรับ VOD จะใช้ Period เดียวสำหรับเนื้อหาทั้งหมด สำหรับการถ่ายทอดสดที่มีช่วงโฆษณา Period สามารถเปลี่ยนแปลงได้แบบไดนามิก — เครื่องเล่นโหลด MPD ที่อัปเดตและตรวจพบ Period ใหม่ที่สอดคล้องกับบล็อกโฆษณา แต่ละ Period มีหนึ่งหรือหลาย AdaptationSet
AdaptationSet คือกลุ่มของรูปแบบที่สามารถ互换ได้ของสื่อประเภทหนึ่ง: วิดีโอ, เสียง, คำบรรยาย ภายใน AdaptationSet รูปแบบทั้งหมดต่างกันที่บิตเรตและ/หรือความละเอียดเท่านั้น แต่เข้ารหัสเนื้อหาเดียวกัน คุณสมบัติที่สำคัญ: เครื่องเล่นสามารถสลับระหว่างรูปแบบภายใน AdaptationSet เดียวกันที่ขอบเขตของส่วนได้โดยไม่หยุดชะงักการเล่น
Representation คือรูปแบบการเข้ารหัสเฉพาะที่มีบิตเรต ความละเอียด และตัวแปลงสัญญาณที่กำหนด สำหรับแต่ละ Representation MPD จะระบุเทมเพลต URL สำหรับโหลดส่วนต่างๆ DASH ใช้ระบบกำหนดที่อยู่ส่วนที่ยืดหยุ่น — ผ่านเทมเพลต URL ที่มีการแทนที่หมายเลขส่วนและเวลา ($Number$, $Time$) ซึ่งช่วยให้เซิร์ฟเวอร์สร้างชื่อไฟล์แบบไดนามิกโดยไม่ต้องระบุแต่ละส่วนใน 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, AV1 ตั้งแต่ 2023) |
| รูปแบบส่วน | 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 เป็นตัวเลือกที่ต้องการสำหรับบริการข้ามแพลตฟอร์มที่ต้องการสตรีมแบบรวมสำหรับทุกอุปกรณ์
ข้อเสีย ของ DASH บน iOS — ขาดการรองรับดั้งเดิมใน Safari และ AVPlayer นักพัฒนา iOS จำเป็นต้องใช้เครื่องเล่นที่เข้ากันได้กับ HLS ของบุคคลที่สามหรือไลบรารีเช่น libdash ที่มีการรวมผ่าน VTDecoder ในทางปฏิบัติ นั่นหมายความว่าสำหรับโครงการที่เน้น iOS เป็นหลัก HLS ยังคงเป็นมาตรฐานโดยพฤตินัย ในขณะที่สำหรับ Android และแพลตฟอร์มเว็บ DASH เป็นโซลูชันที่ยืดหยุ่นและทรงพลังกว่า
การรวม DASH เข้ากับแอปพลิเคชันมือถือขึ้นอยู่กับแพลตฟอร์ม บน Android DASH รองรับโดยตรงผ่าน ExoPlayer พร้อมโมดูลส่วนขยาย บน iOS จำเป็นต้องใช้ไลบรารีของบุคคลที่สามเช่น libdash ที่มีการรวมผ่าน AVFoundation หรือ MPEGDASHPlayer มาดูการนำไปใช้จริงสำหรับทั้งสองแพลตฟอร์ม
ExoPlayer ของ Google ให้การรองรับ DASH ในตัวผ่านโมดูล `exoplayer-dash` การเชื่อมต่อสตรีม DASH ไม่แตกต่างจากรูปแบบอื่น — เพียงส่ง URI ของไฟล์ MPD ใน MediaItem 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 ประกอบด้วยองค์ประกอบ XML ContentProtection ที่มีตัวระบุระบบ DRM (Widevine, PlayReady, FairPlay) ไคลเอนต์เลือกระบบ 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 รองรับตัวแปลงสัญญาณใดๆ ใช้คำอธิบายสตรีมแบบ XML (MPD) แทน M3U8 และให้ระบบ DRM แบบรวมผ่าน CENC HLS รองรับดั้งเดิมบน iOS ในขณะที่ DASH ยืดหยุ่นกว่าสำหรับโซลูชันข้ามแพลตฟอร์ม
บน Android เครื่องเล่นหลักสำหรับ DASH คือ ExoPlayer ของ Google พร้อมโมดูล exoplayer-dash บน iOS ใช้โซลูชันของบุคคลที่สาม เช่น libdash ที่มีการรวมผ่าน AVFoundation หรือเครื่องเล่นเชิงพาณิชย์ (THEOplayer, Bitmovin) ในเบราว์เซอร์เว็บ DASH จะเล่นผ่าน dash.js โดยใช้ MediaSource Extensions
MPD (Media Presentation Description) คือไฟล์ XML ที่อธิบายโครงสร้างสตรีม DASH: ระยะเวลาเนื้อหา, บิตเรตที่มี, ความละเอียด, ตัวแปลงสัญญาณ, รูปแบบส่วน และตำแหน่งของมัน MPD ทำหน้าที่เป็นจุดเริ่มต้นสำหรับเครื่องเล่น แทนที่เพลย์ลิสต์หลักใน HLS หากไม่มีไฟล์ MPD การเล่นเนื้อหา DASH จะเป็นไปไม่ได้
ใช่ DASH รองรับทั้ง VOD และการถ่ายทอดสด สำหรับการถ่ายทอดสด จะใช้ประเภท MPD แบบ dynamic ที่มีการอัปเดตอัตโนมัติ เซิร์ฟเวอร์จะอัปเดต MPD เป็นระยะ เพิ่มส่วนใหม่และลบส่วนที่ล้าสมัย Low-Latency DASH (LL-DASH) ที่มีการเข้ารหัสแบบแยกส่วนสามารถบรรลุความหน่วง 3-8 วินาที ซึ่งเทียบได้กับ LL-HLS
DASH ใช้ Common Encryption (CENC, ISO/IEC 23001-7) ซึ่งช่วยให้เข้ารหัสเนื้อหาสื่อครั้งเดียวและถอดรหัสด้วยระบบ DRM ใดๆ MPD มีองค์ประกอบ XML ContentProtection ที่ระบุ DRM ที่รองรับ (Widevine, PlayReady, FairPlay) เครื่องเล่นเลือก DRM ที่เหมาะสมตามแพลตฟอร์มและขอใบอนุญาตผ่าน URL ที่ระบุ
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ