1. 程式人生 > >一對一直播系統流媒體|從入門到出家:直播系統流媒體原理(上)

一對一直播系統流媒體|從入門到出家:直播系統流媒體原理(上)

在這裡插入圖片描述 1.1 流媒體概念

不知道你發現沒有,我們的生活正慢慢的向著“實時”發生轉變。我們獲取、分享資訊,乃至日常中的衣食住行,都在變成像“自來水”那樣源源不斷“流體”服務,我們無需提前儲備,只需實時按需取用。這個轉變依賴於科技的進步,計算機科技在歷經了檔案(File)、頁面(Web)時代後,今天來到了以“流(Flows/Streams)”為單位的時代。我們的生活就在各種資訊流、資料流、媒體流中節奏越來越快,速度為王,質量靠邊站。

向“流”轉變最初最典型的應用就是流媒體(Streaming Midea)技術,它指的是在網路上採用流式傳輸技術來發布音訊、視訊以及其他多媒體檔案。所謂的流式傳輸就是將音訊、視訊多媒體檔案經過一定演算法編碼壓縮成一個個很小的壓縮包,流媒體伺服器通過特定網路協議進行連續、實時的傳送,使用者端接收到壓縮包後由播放軟體實時解壓縮實現播放的過程。而所謂的流媒體則特指一切採用這種流失傳輸的媒體檔案。

流媒體技術的出現改變了我們還未曾忘記的那種需要將整個音視訊檔案下載到本地計算機才能進行觀看,為此要等上漫長時間的傳統媒體播放方式。我們今天通過網際網路看視訊、看直播、聽音樂,通過各種盒子(IPTV/OTT)看電視、聽廣播如此的方便,一鍵觀看即點即用,其背後就是有著流媒體系統的支撐。

1.2 流式傳輸特點

以往傳統看視訊的方式是將整個視訊檔案下載到本地計算機硬碟,再通過本地播放器程式進行觀看。而流式傳輸則是將連續視音訊經壓縮編碼、資料打包後連續、實時的傳送給接收裝置,使用者端在後續源源不斷的資料包到達的同時對接收到的資料進行解壓和播放。這個過程中,只需要等待幾秒或幾十秒的啟動時間就可以正常觀看視訊了,剩餘的部分就像“水流”一樣在一邊觀看的同時一邊下載。下圖描繪了流式傳輸的過程。 在這裡插入圖片描述

流媒體|從入門到出家:流媒體原理(上)

在對於音視訊的傳輸分發上,我們會經常聽到HTTP漸進式、HTTP流、RTMP、RTSP、HLS、HDS、DASH、Websocket等等專業術語。對於傳輸協議後續文章會專門討論,實際上,從傳輸方式上大致可以分發傳統檔案下載、HTTP漸進式下載、HTTP流式傳輸、實時流媒體傳輸四大類。

HTTP漸進式是指通過支援Seek,終端播放器可從沒下載完成部分中任意選取一個時間點開始播放,如此來滿足不用等整個檔案下載完快速播放的需求,一般MP4和FLV格式檔案支援較好,開啟一個視訊拖拽到中部,短暫緩衝即可播放,點選暫停後文件仍將被持續下載就是典型的漸進式下載,目前大型點播網站如YouTube、優酷等均採用這種方式。

HTTP流式傳輸或者HTTP流化技術,不同廠商有不同做法,但主要思路都是在服務端將媒體檔案分割成一個個很小的獨立切片檔案,檔案分片時需要同時產生用於跟蹤切片的索引檔案(描述檔案),播放器再通過HTTP協議向服務端請求一個個小的媒體切片實現點播或直播的播放,我們平常聽到的HLS(Apple)、HDS(Adobe)、MSS(Microsoft) 、DASH(MPEG通用標準)均屬於HTTP流的範疇。下表總結了不同傳輸方式的特點:

流媒體|從入門到出家:流媒體原理(上) 在這裡插入圖片描述 1.3 流媒體系統構成

流媒體檔案從採集到最終播放的路徑就是一套完整的流媒體系統所需的組成部分。

從系統層面來看,編碼層負責對音視訊檔案編碼壓縮(h.264/h.265/VP9/AAC等);封裝層負責對資料包進行容器封裝(flv/ts等);協議層負責網路打包(RTMP/HTTP等);傳輸層負責網路傳輸(socket/st等);播放層負責對影象進行解碼顯示(FLASH/VLS/VIDEO JS等)。

從我們所熟知的產品服務層面,一套完整的流媒體系統所需的元件一般包括:

(1)編碼器:用於流媒體檔案生成的編碼工具;

(2)流媒體資料;直播訊號、點播檔案;

(3)流媒體伺服器:用於控制、傳送流媒體資料的流媒體伺服器;

(4)傳輸網路:能夠支援特定流式資料傳輸協議的傳輸網路;

(5)多終端播放器:各操作平臺用於顯示流式資料的播放器。

以上5大元件是一個流媒體系統所必須要的基本元件,隨著近年來的迅猛發展,能夠承載大規模流媒體應用的內容分發網路(CDN)也有必要納入流媒體系統的範疇了。除了這些基本系統外,大型的運營及流媒體系統還會有流媒體內容製作生產、內容管理控制、資料監控等周邊系統和中介軟體等。

1.4 流媒體涉及技術

流媒體技術誕生的主要目的是要在目前“盡力而為”的Internet上傳輸資料量非常大的音視訊檔案,所以流媒體技術最核心的就是音視訊編解碼技術和流式傳輸技術。

然而,在今天這個“體驗為王”的時代,我們需要面臨的流媒體,不論從使用者量級上還是應用場景上來說都是極為複雜的。靠堆砌幾臺流媒體伺服器,架個開源的OBS和播放器簡單實現功能的時代早已過去。從當下成熟的大型流媒體系統來看,要完成一個支撐高體驗大規模的流媒體系統,必要要考慮的技術層面有:

(1)雲端計算基礎服務相關技術

這幾年視音訊技術、終端硬體平臺、使用者需求極速增長的同時,骨幹網、跨運營商等基礎設施的建設卻明顯沒有跟上趟。這種現狀下,要實現高穩定、高併發、低延時的流媒體應用,基於雲架構的計算、網路、儲存、CDN等底層基礎服務已經變成了必須。硬體虛擬化,網路虛擬化能夠最大程度保障視音訊播放的穩定性;CDN內容分發網路能夠有效應對高併發和突增流量的需求,對流媒體傳輸所有環節進行鍼對性優化能夠大幅降低延時;物件儲存滿足了流媒體資料的大規模儲存要求。

(2)視音訊相關技術

這個層面包括了視音訊的編/解碼、4K、VR等視音訊核心技術能力,尤其是在新形勢下移動端編碼和播放的優化。這裡麵包括了對不同硬體平臺、作業系統的實踐,固網移動網等不同網路環境下的理解,以及在弱網情況下的解決方案等。另外,4K、VR、AR等新技術的發展能提升提升使用者觀看體驗,甚至引發全新應用場景;新的編碼標準如H.265等能進一步提升視音訊編碼效率,降低對網路頻寬、CDN的消耗。

(3)場景化應用相關技術

雖說流媒體的核心只是音視訊編解碼和流媒體傳輸,但針對當下不同垂直領域對於流媒體的應用,其中一些場景化功能需求,流媒體系統也不得不去考慮。比如秀場娛樂直播的實時錄製,實時水印,實時鑑黃;社交直播的連麥;IPTV/OTT的時移回看;現場直播的雲端導播;視訊網站的版權保護等等。