網頁效能、快取與 CDN

DASH 串流(DASH streaming)

/ dash /

如果自適應位元率串流是「想法」——切換品質以配合你的連線——DASH 就是真正實作它的標準食譜之一。DASH 是 Dynamic Adaptive Streaming over HTTP(動態自適應 HTTP 串流)的縮寫。它是一個開放的國際標準,定義如何描述一段存在於數種品質的影片,以及播放器該如何透過普通 HTTP 取得它的各片段。蘋果的 HLS(HTTP Live Streaming)是另一個廣泛使用的食譜;兩者細節不同,但共享相同的核心設計。

具體而言,內容提供者以多種位元率編碼影片、把每個版本切成短片段、並寫出一份清單。在 DASH 中這份清單是一個稱為 MPD(Media Presentation Description)的 XML 檔;在 HLS 中則是一份文字播放清單(.m3u8 檔)。清單為每個品質等級列出它各片段的 URL。播放器讀取清單、透過普通 HTTP 一個個請求片段、在每個之後量測吞吐量與緩衝水位,並據此挑選下一段的品質。因為一切都只是「對檔案的 HTTP 請求」,DASH 與 HLS 不需要特殊的串流伺服器——一台普通的網頁伺服器,或更常見地,一個 CDN,就能提供這些片段。

為什麼重要:DASH 與 HLS 正是今天幾乎所有隨選影片與大量直播抵達你眼前的方式,從短片到完整電影皆然。把串流建在 HTTP 之上、而非自訂協定,是關鍵洞見:它讓影片重用整個網路基礎建設——快取、CDN、代理與防火牆早已全部會處理 HTTP——於是片段就像圖片一樣被快取在邊緣。DASH 設計上與編碼器無關、且廠商中立,而 HLS 歷來在蘋果裝置上佔主導;實務上大型服務常兩者都發布。誠實的說明:DASH 定義的是遞送與自適應的框架,卻刻意把實際的位元率挑選邏輯留給播放器,所以兩個 DASH 播放器在同一個網路上可能行為相當不同。

一個播放器載入一份 MPD 清單,列出某短片的 480p、720p、1080p 版本,每個切成 4 秒的片段。它以 720p 取得第 1 段、量到下載很快、便以 1080p 請求第 2 段——全都是 CDN 能快取的普通 HTTP GET。

一份清單加上以 HTTP 取得的片段:在普通網路堆疊上的串流。

DASH 與 HLS 標準化的是清單與片段遞送,而非「該挑哪個位元率」的決定——那套自適應邏輯住在播放器裡、不屬於格式的一部分,這正是為什麼播放流暢度在不同 App 間有差異。

又稱
MPEG-DASHDynamic Adaptive Streaming over HTTPHLSDASH 串流動態自適應 HTTP 串流