視頻直播的 推流是啥意思


昨晚和死黨聊天的時候聽他聽到推流這個東西,然后就找了下資料了解了一下,這兒做個簡單的隨筆記錄

         

推流

          推流:指的是把采集階段封包好的內容傳輸到服務器的過程。其實就是將現場的視頻信號傳到網絡的過程。所謂“采集階段封包好”,我覺得應該是未解碼的H264的NALU。

          我再直白點,推流就是把本地音視頻數據(編碼過的)通過網絡上傳到雲端/后台服務器的過程

          流程大概是這樣:原視頻—>對音視頻進行編碼—>某種封裝格式封裝—>通過某種協議傳輸—>服務器

         

問題1

          這兒呢就有一個問題:“所有的視頻都一定要編碼嗎?” 答案是肯定的。相信查看其他人的博客的理由是一樣的:不經過壓縮的視頻太大!在網絡傳輸時對帶寬的要求和壓力太大!

          視頻編碼的主要作用是將視頻像素數據(RGB,YUV等)壓縮成視頻碼流,從而降低視頻的數據量。舉個例子:比如當前手機的屏幕分辨率是1280 * 720(即我們平時在視頻軟件中可選的720P),假設一秒鍾30幀(即1秒鍾傳輸30張圖片),那么一秒鍾的數據為 1280 * 720(位像素)*30(張) / 8(1字節8位),也就是一秒鍾的數據量為3.456M數據量,一分鍾就是207.36M,那么我們平常看一部電影就是大約18G的流量,這樣是很恐怖的一件事

         

問題2

          H264的NALU是個啥,這就需要涉及一點H264編碼格式的知識

首先 H264 是一種編碼格式,或者說編碼算法,包含兩個東西 VCL(視頻編碼層)和NAL(網絡提取層),大概步驟可以這么理解

  • 壓縮:預測(幀內預測和幀間預測)-> DCT變化和量化 -> 比特流編碼;
  • 切分數據,主要為了第三步。這里一點,網上看到的“切片(slice)”、“宏塊(macroblock)”是在VCL中的概念,一方面提高編碼效率和降低誤碼率、另一方面提高網絡傳輸的靈活性。
  • 打包封裝成NAL。

NALU是NAL的組成單元, NALU由頭和身體兩個部分組成:

  • 頭:一般存儲標志信息,譬如NALU的類型。
  • 身體:存儲了真正的數據。

更多H264的信息見 https://zhuanlan.zhihu.com/p/71928833

         

問題三

          所謂的封裝格式究竟是啥?

         在日常我們一定見過很多后綴為avi, mp4, rmvb, flv等格式的視頻文件。其實avi, mp4, rmvb, flv就是是所謂的封裝視頻的封裝格式。

         

問題四

          從視頻播放器播放一個互聯網上的視頻文件的過程

需要經過以下幾個步驟:解協議,解封裝,解碼視音頻,視音頻同步。如果播放下載好了的本地文件則不需要解協議,其他步驟相同。

在這里插入圖片描述

  • 解協議:流媒體協議的數據,解析為標准的相應的封裝格式數據
  • 解封裝:將輸入的封裝格式的數據,分離成為音頻流壓縮編碼數據和視頻流壓縮編碼數據。
  • 解碼:就是將視頻/音頻壓縮編碼數據,解碼成為非壓縮的視頻/音頻原始數據。
  • 視音頻同步:就是根據解封裝模塊處理過程中獲取到的參數信息,同步解碼出來的視頻和音頻數據,並將視頻音頻數據送至系統的顯卡和聲卡播放出來。

更多信息見 https://juejin.im/post/6844903566209990669


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM