DASH 小註解

DASH 這邊是指 MPEG DASH (Dynamic Adaptive Streaming over HTTP), 也就是用 HTTP 傳輸動態碼流的意思. 聽到這個名詞不得不令人想到 Apple 的 HLS (HTTP Live Streaming), 沒錯!這兩個規格是互相競爭的. 類似的規格還有 Microsoft Smooth Streaming 和 Adobe Dynamic Streaming. 據說這類的規格 80% 長得一樣, 但 100% 不相容.

為什麼會有這種規格上的需求呢?因為在網路上傳輸影片是一個不可逆的趨勢 – 例如 VOD (video on demand) 或 streaming, 而網路環境中又很難握實際的頻寬, 所以動態傳輸當然有必要. 接著講到 HTTP, 為啥用 HTTP 呢?因為防火牆一般不會擋它. 公司要是擋了 HTTP 就不能 Google 啦!所以 HTTP 影片可以順勢穿透防火牆, 也可以善用各種 proxy 或是 cache 的設備. 兩個因素加起來, 就導致了 HTTP streaming  的興起.

為了適應不同螢幕解析度和頻寬, 在 server 當然得準被各種規格影片. 此外, 所謂的動態當然需要靠偵測結果作為依據, 每個規範的著眼點也不一樣, 大致上是用 client 的 CPU loading 或是頻寬.

Server 動態偵測 切割方式 Container CODEC
Adobe RTMP Streaming Server 假設靜態 AMF, SWF, FLV and F4V Adobe assigned
Adobe’s HTTP-based Dynamic Streaming (HDS) HTTP CPU utilization time-code MP4 V: H.264 or VP6

A: AAC or MP3

Microsoft’s

Smooth Streaming

HTTP or RTSP CPU utilization time-code MP4 V: H.264 or VC1

A: AAC or WMA

Apple’s

HTTP Live Streaming (HLS)

HTTP buffer status segment M2TS
MPEG DASH HTTP CPU or buffer MPD M2TS or MP4 open
RealNetworks’ RTSP Real Data Transport (RDT) ? ? RM or RMVB RealNetwork assigned
DiVX Plus Streaming (DPS) HTTP delay? HTML5+

segment

MKV V: H.264
A: AAC, AC3, DTS, DTS Express

DASH 看似比大公司推出的規範更有公信力, 但是也受到某些苛責. 例如 DASH 並沒有指定 video CODEC, 所以號稱支援 DASH 的 browser 也就得多才多藝, 什麼格式都得解. 製作 DASH content 的人,  也要考慮接收端是否什麼都能解?而得把各式菜色都煮好才能端出來. 不過往好處想, DASH 開放了 CODEC 和 DRM (digital rights management) 的 support.

上表中 MPEG DASH 的 MPD (Media Presentation Description) 代表一個用 XML 管理的方式. 它把各個時間片段, 各種頻寬需求的影片 URL 一次給足. 因此 client 永遠知道下一個 byte 要去哪個 URL 撈. 抓一個圖解釋如下.