DASH — giao thức và nguyên lý hoạt động của truyền phát động

Tác giả: IT Sectr Đã đăng: 2026-05-23 Thời gian đọc: 9 phút

Dynamic Adaptive Streaming over HTTP (DASH) là một tiêu chuẩn quốc tế về truyền phát đa phương tiện thích ứng, được phát triển bởi MPEG (Moving Picture Experts Group). DASH cung cấp video và âm thanh qua HTTP bằng cách sử dụng mô tả XML của luồng ở định dạng Media Presentation Description (MPD) và chia nội dung thành các phân đoạn với tốc độ bit khác nhau. Theo Báo cáo Bitmovin Video Developer Report (2025), 58% nhà phát triển video sử dụng DASH, khiến nó trở thành giao thức phổ biến thứ hai sau HLS.

Những điểm chính

  • DASH là một tiêu chuẩn MPEG quốc tế mở cho truyền phát thích ứng qua HTTP.
  • Tệp MPD (Media Presentation Description) quản lý luồng thông qua cấu trúc XML mô tả các khoảng thời gian và tập hợp thích ứng.
  • Bộ giải mã không bị giới hạn bởi đặc tả — DASH hỗ trợ H.264, HEVC, AV1, VP9, AAC và nhiều bộ giải mã khác.
  • DRM được triển khai thông qua Common Encryption (CENC), hỗ trợ Widevine, PlayReady và FairPlay trong một luồng duy nhất.
  • Đa nền tảng DASH được kích hoạt thông qua ExoPlayer (Android), dash.js (trình duyệt) và libdash.

DASH là gì?

MPEG-DASH (Dynamic Adaptive Streaming over HTTP) là một tiêu chuẩn quốc tế ISO/IEC 23009-1, được công bố vào năm 2012 nhằm giải quyết sự phân mảnh của các giải pháp truyền phát thích ứng độc quyền. Không giống như HLS (giao thức độc quyền của Apple) và Smooth Streaming (Microsoft), DASH được phát triển ngay từ đầu như một tiêu chuẩn mở, độc lập với nhà cung cấp, đảm bảo sự hỗ trợ rộng rãi trong ngành.

Cải tiến chính của DASH là sự tách biệt giữa mô tả luồng và nội dung đa phương tiện. Mô tả luồng được lưu trữ trong một tệp XML gọi là MPD (Media Presentation Description), chứa tất cả thông tin về các tùy chọn có sẵn: tốc độ bit, độ phân giải, bộ giải mã, phụ đề, rãnh âm thanh. Nội dung đa phương tiện được lưu trữ trong các phân đoạn riêng biệt (thường là fMP4), có thể được tải độc lập qua HTTP. Kiến trúc này cho phép cơ sở hạ tầng máy chủ đơn giản nhất có thể — bất kỳ máy chủ HTTP nào cũng có thể phân phối nội dung DASH.

Tính thích ứng trong DASH được triển khai thông qua ghép kênh các biến thể nội dung. Máy chủ chuẩn bị nhiều Representation — các bản sao nội dung với các tham số nén khác nhau. Máy khách phân tích băng thông kênh và chuyển đổi động giữa các biểu diễn, chọn sự cân bằng tối ưu giữa chất lượng và độ ổn định phát lại. Theo một nghiên cứu học thuật (IEEE Access, 2024), DASH với thuật toán BOLA cho thấy số lần chuyển đổi tốc độ bit ít hơn 22% so với HLS trong điều kiện kết nối không ổn định.

Lịch sử và tiêu chuẩn hóa DASH

MPEG bắt đầu làm việc trên DASH vào năm 2010 sau khi phân tích các giải pháp hiện có: Apple HLS, Microsoft Smooth Streaming và Adobe HDS. Phiên bản đầu tiên của tiêu chuẩn (ISO/IEC 23009-1:2012) được phát hành vào năm 2012. Phiên bản thứ hai (2014) bổ sung hỗ trợ sự kiện, cải thiện chèn quảng cáo và điều khiển thích ứng từ máy chủ. Phiên bản thứ ba (2019) bổ sung hỗ trợ HDR, 8K, video xúc giác và tích hợp cải thiện với MMT (MPEG Media Transport) cho mạng 5G.

Vào năm 2024, MPEG đã công bố DASH Next Generation, bao gồm hỗ trợ cho bộ giải mã mạng nơ-ron, kết xuất đám mây và tối ưu hóa cho các kịch bản Thực tế Mở rộng (XR). Một cải tiến quan trọng là Mã hóa Video dựa trên Mạng nơ-ron (NNVC), sử dụng các mô hình ML để giải mã phía máy khách, có khả năng giảm tốc độ bit từ 30-50% trong khi vẫn duy trì chất lượng.

DASH hoạt động như thế nào?

Quá trình phát lại luồng DASH bao gồm bốn giai đoạn tuần tự: lấy MPD, phân tích mô tả luồng, chọn biểu diễn ban đầu và chuyển đổi động giữa các biểu diễn. Mỗi giai đoạn có đặc thù riêng ảnh hưởng đến chất lượng trải nghiệm người dùng.

Lấy và phân tích MPD

Trình phát tải tệp MPD từ một URL đã biết. MPD chứa cấu trúc XML mô tả toàn bộ luồng: thời lượng nội dung, dòng thời gian, các khoảng thời gian có sẵn (Period), tập hợp thích ứng (AdaptationSet) và các biểu diễn (Representation) với các tham số mã hóa cụ thể. Trình phát phân tích MPD và tạo mô hình nội bộ về các tài nguyên đa phương tiện có sẵn.

Ví dụ về tệp MPD cơ bản cho nội dung VOD với hai độ phân giải:

xml
<?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>

Tải phân đoạn và thích ứng

Sau khi chọn biểu diễn ban đầu, trình phát bắt đầu tải các phân đoạn. Mỗi phân đoạn chứa vài giây nội dung (thường 2-10 giây). Trình phát duy trì bộ đệm trước vài phân đoạn, đảm bảo khả năng chống chịu với sự sụt giảm tốc độ mạng ngắn hạn. Thuật toán ABR (Tốc độ bit thích ứng) liên tục theo dõi tốc độ tải xuống phân đoạn và quyết định chuyển đổi giữa các tốc độ bit có sẵn.

Các thuật toán ABR hiện đại cho DASH, như BOLA (Buffer Occupancy based Lyapunov Algorithm) và Pensieve (dựa trên Học tăng cường), không chỉ xem xét băng thông hiện tại mà còn xem xét kích thước bộ đệm, loại nội dung (thể thao, tin tức, phim) và thậm chí cả mức tiêu thụ điện năng của thiết bị. BOLA, một phần của dash.js và ExoPlayer, giảm thiểu số lần chuyển đổi tốc độ bit trong khi duy trì bộ đệm ổn định, như đã được xác nhận bởi nghiên cứu của ACM (Spiteri et al., 2020).

Cấu trúc DASH: MPD, Period, Adaptation Set

Cấu trúc phân cấp của luồng DASH được tổ chức ở bốn cấp: MPD → Period → AdaptationSet → Representation. Mỗi cấp thêm một lớp chi tiết, cho phép mô tả các kịch bản phức tạp — từ VOD đơn giản đến phát sóng trực tiếp với chèn quảng cáo và video đa góc.

MPD (Media Presentation Description)

MPD là phần tử gốc mô tả toàn bộ bản trình bày đa phương tiện. Các thuộc tính MPD xác định loại luồng (static cho VOD, dynamic cho trực tiếp), tổng thời lượng, dòng thời gian, hồ sơ và thông tin DRM. MPD có thể chứa một hoặc nhiều Period, mỗi Period đại diện cho một đoạn thời gian độc lập của nội dung.

Period, AdaptationSet và Representation

Period là một đoạn thời gian của bản trình bày. Đối với VOD, một Period duy nhất được sử dụng cho toàn bộ nội dung. Đối với trực tiếp có chèn quảng cáo, Period có thể thay đổi động — trình phát tải MPD đã cập nhật và phát hiện Period mới tương ứng với khối quảng cáo. Mỗi Period chứa một hoặc nhiều AdaptationSet.

AdaptationSet là một nhóm các biểu diễn có thể thay thế cho nhau của một loại phương tiện: video, âm thanh, phụ đề. Trong một AdaptationSet, tất cả các biểu diễn chỉ khác nhau về tốc độ bit và/hoặc độ phân giải nhưng mã hóa cùng một nội dung. Một thuộc tính quan trọng: trình phát có thể chuyển đổi giữa các biểu diễn trong cùng một AdaptationSet tại ranh giới phân đoạn mà không làm gián đoạn phát lại.

Representation là một biến thể mã hóa cụ thể với tốc độ bit, độ phân giải và bộ giải mã xác định. Đối với mỗi Representation, MPD chỉ định một mẫu URL để tải các phân đoạn. DASH sử dụng hệ thống đánh địa chỉ phân đoạn linh hoạt — thông qua các mẫu URL với thay thế số phân đoạn và thời gian ($Number$, $Time$), cho phép máy chủ tạo tên tệp động mà không cần liệt kê từng phân đoạn trong MPD.

Phân đoạn và đóng gói

Phân đoạn trong DASH có thể có hai loại: loại Segment (chỉ chứa dữ liệu phương tiện) và loại Subsegment (một phần của phân đoạn để truy cập chi tiết hơn). Để mã hóa nội dung DASH, các công cụ như FFmpeg hoặc bộ mã hóa hàng loạt được sử dụng. Ví dụ về tạo luồng DASH từ tệp đầu vào:

python
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 vs HLS: so sánh giao thức

Lựa chọn giữa DASH và HLS là một trong những quyết định quan trọng khi thiết kế hệ thống phát video trực tuyến. Cả hai giao thức đều giải quyết cùng một vấn đề (phân phối video thích ứng qua HTTP) nhưng có sự khác biệt cơ bản về kiến trúc, hỗ trợ bộ giải mã và hệ sinh thái. Hãy xem xét chúng theo các tham số chính.

Tham sốDASHHLS
Tiêu chuẩnQuốc tế (ISO/IEC 23009-1)Độc quyền (RFC 8216, Apple)
Mô tả luồngXML (MPD)Danh sách phát M3U8
Bộ giải mãBất kỳ (H.264, HEVC, AV1, VP9)Hạn chế (H.264, HEVC, AV1 từ 2023)
Định dạng phân đoạnfMP4 (chính), MPEG-2 TSMPEG-2 TS, fMP4
DRMCENC (thống nhất cho tất cả DRM)FairPlay, Widevine (riêng biệt)
Hỗ trợ iOSQua trình phát của bên thứ baGốc (AVPlayer, Safari)
Trình duyệtChrome, Firefox, Edge (qua MSE)Safari (gốc), các trình duyệt khác qua MSE

Lợi thế chính của DASH — độc lập với bộ giải mã. Trong khi HLS ban đầu giới hạn các bộ giải mã ở những bộ được Apple hỗ trợ (H.264, HEVC và gần đây là AV1), DASH có thể sử dụng bất kỳ bộ giải mã nào được trình phát hỗ trợ: VP9/VP8 (quan trọng cho YouTube và Chrome), AV1 (cho hiệu quả), H.264/HEVC (cho tương thích). Điều này làm cho DASH trở thành lựa chọn ưu tiên cho các dịch vụ đa nền tảng yêu cầu một luồng thống nhất cho tất cả thiết bị.

Nhược điểm của DASH trên iOS — thiếu hỗ trợ gốc trong Safari và AVPlayer. Các nhà phát triển iOS cần sử dụng trình phát tương thích HLS của bên thứ ba hoặc thư viện như libdash với tích hợp qua VTDecoder. Trong thực tế, điều này có nghĩa là đối với các dự án ưu tiên iOS, HLS vẫn là tiêu chuẩn thực tế, trong khi đối với Android và nền tảng web, DASH là giải pháp linh hoạt và mạnh mẽ hơn.

Ứng dụng DASH trong phát triển di động

Tích hợp DASH vào các ứng dụng di động phụ thuộc vào nền tảng. Trên Android, DASH được hỗ trợ trực tiếp thông qua ExoPlayer với mô-đun mở rộng. Trên iOS, cần có các thư viện của bên thứ ba như libdash với tích hợp qua AVFoundation hoặc MPEGDASHPlayer. Hãy xem xét triển khai thực tế cho cả hai nền tảng.

DASH trên Android qua ExoPlayer

ExoPlayer của Google cung cấp hỗ trợ DASH tích hợp thông qua mô-đun `exoplayer-dash`. Kết nối luồng DASH không khác gì các định dạng khác — chỉ cần chuyển URI của tệp MPD vào MediaItem. ExoPlayer tự động phát hiện định dạng nội dung và khởi chạy trình kết xuất phù hợp, hỗ trợ tất cả các thuật toán ABR tiêu chuẩn.

kotlin
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

DASH với DRM trên cả hai nền tảng

Common Encryption (CENC) là một trong những tính năng chính của DASH, cho phép sử dụng một luồng phương tiện duy nhất với các hệ thống DRM khác nhau. Tệp MPD chứa các phần tử XML ContentProtection với định danh hệ thống DRM (Widevine, PlayReady, FairPlay). Máy khách chọn hệ thống DRM phù hợp dựa trên nền tảng của mình và yêu cầu giấy phép từ máy chủ cấp phép.

kotlin
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()

Tối ưu hóa DASH cho thiết bị di động

Các ứng dụng di động yêu cầu cấu hình DASH đặc biệt do giới hạn về băng thông và mức tiêu thụ điện năng. Các khuyến nghị chính bao gồm: đặt bộ đệm tối thiểu 2-3 phân đoạn để chống chịu với sụt giảm tốc độ ngắn hạn, sử dụng phân đoạn dài 2-4 giây để phản ứng nhanh hơn với thay đổi mạng và tải trước phân đoạn tiếp theo khi chuyển đổi chất lượng.

Để tiết kiệm lưu lượng trên mạng di động, Bitmovin (2024) khuyến nghị sử dụng Content Steering — một cơ chế tương tự chức năng của HLS, cho phép định hướng động máy khách đến nút CDN tối ưu. DASH Content Steering được mô tả trong đặc tả ISO/IEC 23009-1:2022 và được hỗ trợ trong dash.js 4.5+ và ExoPlayer 2.18+.

Câu hỏi thường gặp

DASH khác HLS như thế nào?

DASH là một tiêu chuẩn MPEG quốc tế mở, không bị ràng buộc với bất kỳ nhà cung cấp nào. Không giống như HLS (giao thức độc quyền của Apple), DASH hỗ trợ mọi bộ giải mã, sử dụng mô tả luồng XML (MPD) thay vì M3U8 và cung cấp hệ thống DRM thống nhất thông qua CENC. HLS có hỗ trợ gốc trên iOS, trong khi DASH linh hoạt hơn cho các giải pháp đa nền tảng.

Trình phát nào hỗ trợ DASH trên thiết bị di động?

Trên Android, trình phát chính cho DASH là ExoPlayer của Google với mô-đun exoplayer-dash. Trên iOS, các giải pháp của bên thứ ba như libdash với tích hợp qua AVFoundation hoặc trình phát thương mại (THEOplayer, Bitmovin) được sử dụng. Trong trình duyệt web, DASH được phát qua dash.js sử dụng MediaSource Extensions.

MPD là gì trong bối cảnh DASH?

MPD (Media Presentation Description) là một tệp XML mô tả cấu trúc luồng DASH: thời lượng nội dung, tốc độ bit có sẵn, độ phân giải, bộ giải mã, định dạng phân đoạn và vị trí của chúng. MPD đóng vai trò là điểm vào cho trình phát, thay thế danh sách phát chính trong HLS. Không có tệp MPD, việc phát lại nội dung DASH là không thể.

DASH có hỗ trợ phát sóng trực tiếp không?

Có, DASH hỗ trợ cả VOD và phát sóng trực tiếp. Đối với trực tiếp, loại MPD dynamic với cập nhật tự động được sử dụng. Máy chủ định kỳ cập nhật MPD, thêm các phân đoạn mới và xóa các phân đoạn cũ. Low-Latency DASH (LL-DASH) với mã hóa phân khúc đạt được độ trễ 3-8 giây, tương đương với LL-HLS.

DRM hoạt động như thế nào trong DASH?

DASH sử dụng Common Encryption (CENC, ISO/IEC 23001-7), cho phép mã hóa nội dung phương tiện một lần và giải mã bằng bất kỳ hệ thống DRM nào. MPD chứa các phần tử XML ContentProtection chỉ ra các DRM được hỗ trợ (Widevine, PlayReady, FairPlay). Trình phát chọn DRM phù hợp dựa trên nền tảng và yêu cầu giấy phép qua URL được chỉ định.

Tổng kết

  • MPEG-DASH là một tiêu chuẩn quốc tế mở cho truyền phát thích ứng qua HTTP với mô tả luồng XML ở định dạng MPD.
  • Độc lập với bộ giải mã — DASH hỗ trợ H.264, HEVC, AV1, VP9 và bất kỳ bộ giải mã nào khác có sẵn trên trình phát.
  • CENC cung cấp mã hóa nội dung thống nhất cho tất cả hệ thống DRM, đơn giản hóa việc cấp phép.
  • Thuật toán ABR (BOLA, Pensieve) giảm thiểu chuyển đổi tốc độ bit và đảm bảo phát lại ổn định.
  • Android — DASH được hỗ trợ gốc trong ExoPlayer; iOS yêu cầu thư viện của bên thứ ba.
  • LL-DASH giảm độ trễ phát sóng trực tiếp xuống 3-8 giây.
  • Khuyến nghị sử dụng DASH cho các dự án đa nền tảng nơi tính linh hoạt của bộ giải mã và DRM là quan trọng.

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm