流媒體是啥,掌握六個步驟,軟件工程師就理解了數據流全棧技術

以前上網,網速很慢,看一部高清的movie需要下載下來,存儲到本地,然後才能觀看。隨著網絡帶寬越來越高,在線電影、網絡短視頻刷起來越來越方便,無需下載,視聽效果非常流暢。這種不用下載到本地,流暢欣賞的音視頻流傳輸技術,就應用了流媒體技術。流媒體是一種技術方案,是一種採集、傳送、接收多媒體的互聯網技術。

流媒體數據技術是咋產生的

流媒體是一個技術體系,它是網絡技術與音視頻多媒體技術有機結合的產物。它是發送方和接收方之間傳送多媒體流數據的技術。

1994年,美國一家叫做progressive networks的公司最先開始推出這種流數據技術。他們首先推出了C/S架構的音頻接收系統real audio,並隨後發佈了流數據播放器realplayer系列。機會出現之後,微軟很快推出了自己的流數據技術方案。流媒體數據技術就這樣開始了快速演進。然而,受限於網絡帶寬,這項技術並沒有迅速普及,隨著網絡帶寬迅速提升,這種流數據技術悄悄地在教育、廣電、政府、安防、電信、電商、娛樂等行業生根發芽。現在,流媒體數據技術已經成為互聯網應用的主流,這已經得到了業內人士的普遍認同。

流媒體數據技術框架


流媒體是啥,掌握六個步驟,軟件工程師就理解了數據流全棧技術

流媒體框架

流媒體數據技術是一種專門用於網絡多媒體信息傳播和處理的新技術,在發送方和接收方之間傳送多媒體信息,一般要經歷以下六個步驟和環節,採集數據,編碼壓縮,格式化容器化,傳輸,流媒體服務器分發,播放器收流。

下面以直播過程為例,說明一下流媒體的傳輸過程,主播端採集音視頻數據,採集編碼並格式化,通過網絡傳輸協議傳輸,經過服務器分發,觀眾端接收數據,解碼收看收聽。

流媒體是啥,掌握六個步驟,軟件工程師就理解了數據流全棧技術

流數據的生命週期

流媒體數據的採集

流媒體數據的採集分為音頻的採集和視頻的採集。數據採集是流媒體技術生命週期的第一個環節,它從系統聲卡和攝像頭等採集設備中獲取原始數據,並將其輸送到下一個環節。

音頻數據採集。音頻的採集主要通過設備將環境中的模擬信號採集成 PCM(Pulse Code Modulation,PCM,脈衝編碼調製) 編碼的原始數據。音頻採集設備好壞主要取決於其處理數據信號的能力,音頻採集和編碼主要解決延時敏感性、卡頓敏感性、噪聲消除(Denoise)、回聲消除(AEC)、靜音檢測(VAD)和各種混音算法等問題。

圖像數據採集技術。圖像的採集是攝像頭等設備抓取YUV編碼格式的原始圖像數據然後處理的過程。圖像採集和編碼需要解決的主要問題是,全面設備兼容性、延時敏感性、卡頓敏感以及各種對圖像的處理操作算法等。

採集原始數據之後,還要添加一些效果數據和增強數據,比如聲音效果的增強、鼓掌、魔音等,以及視頻圖像的增強比如美顏、圖像logo等。

壓縮編碼和格式封裝

原始獲取的數據是非常龐大的,例如一個 1080P 的 7 秒視頻需要 817 MB,10 Mbps 帶寬傳輸上述 7 秒視頻需要 11 分鐘,這樣的視頻效果是不可接受的,所以要進行音頻視頻原始數據的壓縮。

編碼壓縮的核心思想是通過算法去除冗餘的信息。冗餘包括空間冗餘、時間冗餘、編碼冗餘、視覺冗餘、知識冗餘等方面,通過冗餘去除,我們可以得到數據較少而質量較高的數據包。上面的1080P像素7秒的圖像經過 H.264 編碼壓縮之後,視頻大小隻有 708 k ,10 Mbps 帶寬傳輸僅僅需要 500 ms,可以滿足實時傳輸的需求。

經過對比,我們就理解了從視頻採集傳感器採集來的原始數據是不可以直接傳輸的,必須要經過視頻的壓縮編碼。

視頻壓縮技術也在不斷進化,視頻壓縮編碼技術經過發展,已經從只支持幀內壓縮編碼算法演進到新的壓縮編碼算法。現在新的編碼算法標準包括H.26X 和 VPX系列。常用的視頻編碼算法技術有H.264、H.265、VP8、VP9、FFmpeg等,音頻編碼算法有Mp3, AAC等。

經過音頻視頻編碼之後,需要進行封裝,封裝就是數據容器化和格式化。容器是音視頻流數據格式化的形象比喻,就像選用盒子和格子裝東西一樣。我們需要將比特數據用盒子裝起來。

音頻數據經過容器化計算後變為MP3,AAC,HE-AAC,Opus,FLAC,Vorbis (Ogg),Speex,AMR等格式的數據分發出去。

視頻數據經過容器化後變為 MP4、3GP、AVI、MKV、WMV、MPG、VOB、FLV、MOV等格式的數據,然後分發出去。

數據傳輸模式和數據傳輸協議

流媒體數據傳輸方式多種多樣。從傳輸形式上可以分為順序流式傳輸和實時流式傳輸。順序流式傳輸方式是介於本地下載完再播放方式和實時流式播放方式的中間方式,也就是用戶邊下載邊播放,這種方式也被稱之為“偽流媒體數據傳輸”。這種數據傳輸方式常應用於視頻網站的點播。

實時流式傳輸方式是真正意義上的流媒體數據傳輸方式,用戶可以一邊接收數據包一邊播放,數據實時傳送。實時流媒體數據傳輸必須保證數據包的傳輸速度大於文件的播放速度,如果傳輸的速度小於文件的播放速度,視頻就會出現卡頓。

通常情況下流媒體數據需要藉助網絡服務器來實現中轉分發。數據從服務器分發到接收數據方的過程稱為播放,流媒體數據的播放方式有三種主要情形。

  • 第一種情形是數據單播,也就是在客戶端與數據服務器之間建立單獨的數據通道,從一臺服務器分發的每個數據包只能傳送給一個客戶機。這種形式的弊端是極其消耗資源。
  • 第二種情形是數據組播,這種方式允許路由器一次將數據包複製到多個通道上。採用組播方式,數據服務器只需要發送一個信息包,即可連接多個用戶,所有發出請求的客戶端共享同一信息包。這樣可以減少網絡上傳輸的信息包總量。
  • 第三種方式是數據點播與廣播。數據點播連接是客戶端與服務器之間的主動的連接。在數據點播中,用戶通常通過選擇內容來初始化客戶端連接。每個用戶可以開始、停止、後退、快進或暫停播放數據流。點播能夠提供對流的最大控制,但這種方式由於為每個客戶建立了單獨的連接,帶寬很容易被消耗完。廣播是一種用戶不能控制流數據只能被動接收流數據的方式,用戶不能快進、後退、暫停。

相比較數據單播、數據點播和數據廣播,數據組播是最有市場競爭力的數據播放方式。數據組播不會複製多個數據包傳輸到網絡上,也不會將數據包傳送給給沒有請求服務器的客戶,保證了網絡上流數據應用佔用最小帶寬的網絡。


流媒體是啥,掌握六個步驟,軟件工程師就理解了數據流全棧技術

RTMP數據流的傳輸過程

流媒體數據傳輸的實現需要合適的網絡傳輸協議。由於使用TCP需要較多的開銷,因此不適合傳輸實時流數據。在流媒體傳輸的方案中,一般採用HTTP/TCP來傳輸控制信息,採用RTP/UDP/RTMP等協議來傳輸實時數據。現在大部分流數據網站都採用RTMP(Real Time Messaging Protocol)實時消息傳送協議,該協議是Adobe公司為Flash播放器和服務器之間音視頻流數據傳輸開發的開放協議。

服務器數據流的分發和數據流的放送

流媒體是啥,掌握六個步驟,軟件工程師就理解了數據流全棧技術

流數據的分發與放送

流媒體數據服務器的作用是負責流的發佈和數據轉播。流媒體服務器有多種選擇,Nginx服務器是常用的選擇,它是一款優秀的免費Web數據服務器。

播放端的推流,採集器採集流數據,經過編碼壓縮和格式轉化,然後通過傳輸協議傳輸到服務器,服務器經過計算將收到的流進行分發,接收者只要有支持流傳輸協議的播放器即可播放,這是流媒體數據的整個生命週期。


分享到:


相關文章: