---
# System prepended metadata

title: 串流相關知識學習筆記
tags: [streaming, interview]

---

# 串流相關知識學習筆記
###### tags: `streaming`、`interview`

## 影音串流技術中常見的通訊協議有哪些？
### HLS
HLS（HTTP Live Streaming）是由**Apple**所提出的影音串流通訊協議，以HTTP通訊協定為基礎可支援所有與網路連線的裝置。其運作原理是將影音劃分為較小的HTTP檔案，並以HTTP通訊協議傳輸，可在不影響播放進度的情況下視網路狀況調整影片品質。

HLS的影片不一定要是直播影片，也可以是非直播 (具有明確片長、完整的影片)，其核心是 `.m3u8` 與 `.ts` 這兩個檔案，與其說 m3u8 是個影片檔案，倒不如說， `.m3u8` 只是個文件，這個文件記錄了影片檔的位置與其設定。

而 HLS 的原理，其實是將影片拆成一個一個的`.ts`檔案，每個`.ts` 就是幾秒影片片段，`.ts`封裝了影像與聲音，透過 HTTP 協定扔給前端，藉此連續播放一個個不同的片段，來達成影片的播放 

### RTMP
RTMP（Real-Time Messaging Protocol）中文為「即時訊息傳輸協定」，是由**Adobe**所有的媒體傳輸協議，是早期為了順利在Flash播放器中以串流技術傳輸影音資料所訂定的通訊協議。而現今則因為即時性的特色，使其被廣泛應用於直播、視訊會議等工具中，提供流暢的影音傳輸體驗。

RTMP 的延遲性比 HLS 還低，但它的其他缺點也很明顯：

1. RTMP 無法在手機的瀏覽器上播放。
2. 在 PC 瀏覽器上需要開啟 Flash 才能播放。
3. Adobe 將於2020年停止支援 Flash

### WebRTC
WebRTC（Web Real-Time Communication）中文為網頁即時通訊，是一個採用JavaScript的開源API，專門實現瀏覽器與設備之間的即時語音對話與視訊對話功能，現今大多數的網路瀏覽器都有支援WebRTC。

簡單來說，WebRTC 的概念是由兩項基本核心技術組成：

1. Media Capture and Streams API
2. peer-to-peer connection

#### Media Capture and Streams API
也可以說是 [MediaStreams](https://developer.mozilla.org/en-US/docs/Web/API/Media_Capture_and_Streams_API) API，該介面是基於MediaStreamsObject，
其代表一個多媒體（影像與聲音）的同步串流（synchronized stream），
開發者可以利用這個功能擷取本地端的多媒體串流，並顯示在瀏覽器上或是進行進一步的處理或傳送。

#### Peer-To-Peer Connection
簡稱P2P，點對點連線，意指用戶端(client)電腦之間能夠互相交換資料，無需透過主機端(server)來處理各用戶端的資料傳輸。

以平時最為熟悉的網路溝通方式為例：
當雙方傳輸檔案時，client A 要先將檔案上傳至server後，client B 再透過server拿取對應的檔案，也就是熟知的 [HTTP（超文本傳輸協定）](https://developer.mozilla.org/zh-TW/docs/Web/HTTP)，以一問一答的方式進行溝通
![](https://i.imgur.com/MbBLodE.png)

P2P的溝通方式:
同樣各自須先連線到 server，確認彼此連線後，
client A 跟 client B 就能彼此傳輸資料，而不需要再將資料上傳自 server，另一方再主動詢問 server 來拿取資料！
![](https://i.imgur.com/0lyGkXy.png)



| 通訊協議 | 傳輸協定 |
| -------- | -------- |
| HLS | TCP |
| RTMP | UDP |
| WebRTC | TCP / UDP |


## 傳輸協定
#### UDP
UDP為使用者資料包通訊協定（User Datagram Protocol），其為一種較不可靠的無連接式傳輸協定。無連接式表示傳送者並不知道接收對象，因在傳送資料前並未事前通知，故其送出資料前並不知道接收者為何人。

UDP協定就像在郵局寄出一封貼著標準郵票的信，您並不會在它送達時收到通知，您只能期待信件能順利送達。

#### TCP
TCP代表傳輸控制協定（Transmission Control Protocol），是一個基於可靠連接的傳輸協定。既然TCP是基於連接的協定，傳送者完全知道訊息接收者的狀態。在任何資料傳送前，傳送者及接收者需先建立連線並事前通知。

TCP就像是採用掛號附回執聯寄信，信件送寄達時，您會收到通知；如果沒收到通知，您可以再傳送一次。

![](https://i.imgur.com/xX8KAIH.png)




## 什麼是視頻點播（VOD）?
> 隨選視訊（英文：Video On Demand，VOD或VoD）是一套可以讓使用者透過網路選擇自己想要看的視訊內容的系統。使用者選定內容後，VOD系統可以用串流媒體的方式進行即時播放，也可以將內容完全下載後再進行播放。系統的播放模式取決於系統及營運上的需求規劃設計，包括收費機制、內容著作權、播放品質、機房系統、傳輸系統、收視端的機上盒等。

VOD代表Video on Demand，是一種能夠讓人們隨時隨地，在任何設備上觀看視頻的**視頻流化技術**。
#### VOD如何工作？
![](https://i.imgur.com/ldf7zrt.png)
- **內容庫**：包含未壓縮視頻或夾層文件（mezzanine file）。
- **轉碼器**：獲取未壓縮視頻，然後使用ABR技術將其壓縮為不同碼率-分辨率的組合。
- **封裝**：這一步，被壓縮的視頻使用流行的自適應比特率流媒體協議（如MPEG-DASH和HLS）交付視頻。
- **加密**：通常情況下，使用Widevine、PlayReady和FairPlay Streaming等DRM技術保護視頻流。
- **通過CDN交付**：被封裝的視頻儲存在源站上，並通過CDN發送給用戶。
- **VOD播放器**：指使用自適應比特率流媒體協議、可播放視頻的特殊應用程序。

## VOD如何加密？
從離開電腦到儲存體、處理和傳遞時保護媒體的安全。 使用媒體服務，您就能傳遞利用進階加密標準 (**AES-128**) 或下列三個主要數位版權管理 (DRM) 系統中任一個所動態加密的即時與隨選內容：**Microsoft PlayReady**、**Google Widevine** 和 **Apple FairPlay**。

#### 支援 DRM 用戶端的瀏覽器


| 瀏覽器                               | 加密      |
| ------------------------------------ | --------- |
| Chrome                               | Widevine  |
| Microsoft Edge、Internet Explorer 11 | PlayReady |
| Firefox                              | Widevine  |
| Opera                                | Widevine  |
| Safari                               | FairPlay  |



## 資料來源
[什麼是視頻點播（VOD）?](https://cloud.tencent.com/developer/article/1942302)
[[知識篇]WebRTC - JavaScript APIs](https://ithelp.ithome.com.tw/articles/10238383)
[動態加密和金鑰傳遞的內容保護
](https://learn.microsoft.com/zh-tw/azure/media-services/latest/drm-content-protection-concept)