什麼是串流與 HLS 串流協議?

串流 demo

一、串流技術的誕生與演進

streaming. image source: ZoeLiao

過去我們觀看影片的時候使用下載(Downloading)技術,用戶需等待 client 透過 HTTP/HTTPS 協議連接到 server、請求完完整的檔案後才能播放影片,所以在下載的過程中只能等待而無法邊下載邊播放。

直到 1995 年成立的 Vxtreme 公司發展了使用串流(Streaming)技術的Vxtreme Theatre ,才有所改進(該公司在 1997 年被 Microsoft 收購)。
所謂 串流(Streaming) 是指 client 透過 串流協議(streaming protocol)(如 RTSP、HLS)向 server 請求已經生成好的檔案,server 將經過壓縮處理的檔案影片或聲音切片回傳給 client,client 在接收到檔案片段後無需等待完整檔案下載完,就能邊讀取、邊播放,大大節省用戶的等待時間。

而現下很夯的串流直播,則是在影片產生的時候就即時編碼壓縮、進行網路輸出發布,而無需等待影片完整產生完後才切片壓縮傳給用戶。亦即直播生產者邊產生影片、用戶邊讀取、邊播放。

二、常見應用

image source: https://clipbucket.com/2019/03/07/understanding-the-terms-svod-avod-tvod-and-the-difference-between-vod-and-ott/

串流技術的應用很廣,如 隨選視訊(VOD,video-on-demand)即是使用串流技術作為傳輸方式,以克服檔案傳輸耗時的問題,達到隨選隨看、不需等候檔案下載完畢,只要開啟檔案,在讀取傳輸的同時,同步進行播放的功能。

VOD 可用盈利模式分成:

1. 以廣告盈利的 AVOD Advertising VOD)(如 YouTube)。

2. 以訂閱費賺錢的 SVODSubscription VOD)(如 Netflix)。

3. 以及以照量來計價的 TVODTransactional VOD)(如 iTunes)。

AWS 提供的 AWS Elemental MediaConvert (以下簡稱 MediaConvert)即是以檔案為基礎的影片轉碼服務,讓開發者可以輕鬆地建立 隨選視訊 (VOD,video-on-demand)內容。關於 MediaConvert 將在下一篇介紹。

三、串流協議 — HLS

要實現串流需要有 串流協議(streaming protocol)的支持。常見的有串流協議有 DASH, RTMP、RTP/RTSP、HLS,MediaConvert 官方範例使用的是 HLS,故本系列主要介紹並實踐基於 HLS 的串流。關於其他協議可參考:一篇文章讀懂流媒體傳輸協議RTP、RTCP、RTSP、SRTP&SRTCP

為 Apple Inc. 於 2009 年時提出的基於 HTTP(S) 的串流媒體協議。
HLS 的原理如下:

  1. 將檔案分割成多個片段(通常為不超過 10 秒、副檔名為 .ts 的小檔 )。
  2. 用一個索引文字檔 (index file)記錄這些小檔案的順序與位址,即.m3u 檔。(常見的 .m3u 檔有 .m3u(Windows-1252)與 .m3u8(UTF-8))。
  3. Client 向 server 請求時,server 會回傳對應的索引文字檔(如 .m3u8 檔)
  4. Client 拿到索引文字檔後,會解析檔案、按照播放列表逐一向 server 請求播放串流片段(如 .ts 檔)。
  5. 當索引文字檔內記載的檔案片段下載完後,client 即再請求下一個索引文字檔,繼續重複步驟 4 實現串流的功能。

我們有一個影片 demo.mp4 (片 19 秒),依照 HLS 切成 2 個 .ts 檔 demo_00001.ts (1~10 秒)以及 demo_00002.ts(11~19 秒),client 在請求影片時,會先獲得上圖左邊的 .m3u8 檔,再依照 .m3u8 檔標示的切片檔案順序(由上至下為 demo_00001.ts、demo_00002.ts )依序加載影片切片並播放。即可實現無需等待全部影片下載完成即可播放的串流功能。

CS MEng @VT | B.A. @NTU | Back-end & DevOps | ex-SDE @ Appier, Trend Micro

CS MEng @VT | B.A. @NTU | Back-end & DevOps | ex-SDE @ Appier, Trend Micro