網際網路上的流媒體視訊是如何工作? - Quastor

banq發表於2022-01-20

Leandro Moreira是 Globo 的首席軟體工程師,負責他們的實時視訊流媒體平臺和基礎設施。

他寫了一篇很棒的部落格文章,介紹了視訊如何在您的計算機上播放(自適應位元率流、HLS 等)、視訊如何傳送到您的計算機(CDN、多 CDN 等)以及如何處理電影背後的所有工程成數字視訊(編解碼器、容器、FFMPEG 等)。

下面是部分的摘要:

 

播放

當您遇到一個嵌入了視訊播放器的網站時,幕後會發生很多事情。

您擁有播放器 UI,帶有暫停/播放按鈕、字幕控制元件、視訊速度和其他選項。

玩家將支援圍繞 DRM、廣告注入、縮圖預覽等的不同選項。

在幕後,現代視訊平臺將使用自適應位元率流從伺服器流式傳輸視訊。

自適應位元率流意味著伺服器有多個不同版本的視訊(稱為再現),每個版本的顯示大小(解析度)和檔案大小(位元率)都不同。

視訊播放器將根據使用者的螢幕尺寸和頻寬動態選擇最佳再現。它將選擇最小化緩衝並提供最佳使用者體驗的再現。

 

HLS

HTTP Live Streaming (HLS)是 Apple 為基於 HTTP 的自適應位元率流設計的協議。它是網際網路上最流行的流媒體格式。

基本概念是您將視訊檔案分成小段,每個段長 2-12 秒。

如果您有一個 2 小時長的視訊,您可以將其分成 10 秒長的片段並最終得到 720 個片段。

每個段都是一個以.ts副檔名結尾的檔案。這些檔案按順序編號,因此您會得到一個如下所示的目錄:

segments/
    00001.ts
    00002.ts
    00003.ts
    00004.ts
    00005.ts

然後,播放器將在使用者流式傳輸時下載並播放每個片段。如果使用者失去網路連線,它還將保留段緩衝區。

同樣,HLS 是一種自適應位元率流式傳輸協議,因此 Web 伺服器將具有正在播放的視訊的多個不同再現(版本)。

所有的演繹都將被分成相同長度的片段。因此,回到我們的 2 小時長視訊示例,它可能有 720 個 1080p 的片段檔案,720 個 720p 的片段檔案,720 個 480p 的片段檔案。

所有段檔案都是有序的,每個檔案長度為 10 秒。

然後,播放器將檢視可用的頻寬量,並做出最好的猜測,以確定它接下來應該下載哪個需要渲染的片段檔案。

如果您在觀看視訊時網路連線變慢,播放器可以將您降級為下一個片段檔案的較低質量渲染。

當您的連線變得更快時,播放器可以升級您的渲染級別。

 

MP4 和 WebM

另一種方法是採用 HTML<video>元素並新增直接指向 MP4 或 WebM 檔案的“src”屬性。

這稱為偽流式下載或漸進式下載,其中視訊檔案被下載到使用者裝置上的物理驅動器。

通常,視訊儲存在網路瀏覽器的臨時目錄中,使用者可以在後臺下載檔案時開始觀看。

使用者還可以跳轉到視訊中的特定點,播放器將使用位元組範圍請求來估計檔案的哪個部分對應於使用者試圖尋找的視訊中的位置。

MP4 和 WebM 播放效率低下的原因是它們不支援自適應位元率。

每個想要無緩衝觀看檔案的使用者都必須擁有足夠快的 Internet 連線,以比播放速度更快地下載檔案。

因此,當您使用這些格式時,您必須在提供更高質量的視訊檔案與降低 Internet 連線速度要求之間做出權衡。

 

傳送

向使用者提供視訊時,有兩個主要元件

  • 源伺服器
  • 內容交付網路

源伺服器是事實的來源。這是開發人員上傳原始視訊檔案的地方。

然後,CDN 將從源伺服器中提取檔案,並將該檔案快取在世界各地的一組互連伺服器上(在靠近使用者的位置)。

這樣,當使用者想要請求檔案時,他們可以從 CDN 中的伺服器進行請求。這比您的原始伺服器將整個檔案傳送給您的所有使用者要快得多(並且可擴充套件性更高)。

很多企業會選擇 Multi-CDN 環境,負載分佈在多個 CDN 之間。這通過為使用者提供更多可供選擇的伺服器並提高您網站的可用性來改善使用者體驗。

你可以在這裡閱讀全文。

相關文章