天天看點

關于直播間源碼和直播app開發的基礎知識

很多想進行直播app開發的朋友,可能并不太了解音視訊軟體開發基礎知識,以下這篇文章來源網絡,都是一些基礎概念,轉載與大家分享。

當然,這隻是一篇基礎知識文檔,如果有需要更深度了解直播app開發知識的朋友歡迎看我的其他部落格文章。

一、 直播app開發之軟編碼和寫死

CPU是指中央處理器(英文全名:Central Processing Unit),包括運算器(算術邏輯運算單元,ALU,Arithmetic Logic Unit)和高速緩沖存儲器(Cache)及實作它們之間聯系的資料(Data)、控制及狀态的總線(Bus)。

GPU是指圖形處理器(英語全名:Graphics Processing Unit),專為執行複雜的數學和幾何計算而設計的,擁有2D或3D圖形加速功能。

硬解和軟解

直播app開發中所謂的硬解是指是利用硬體子產品來替代軟體算法解析視訊、音頻檔案等,而直播app開發中提到的軟解即是用CPU去計算解析。硬解碼的優勢是迅速且不占用CPU。

二、 直播app開發基礎概念

幀率(Frame Rate)

幀率(Frame rate) = 幀數(Frames)/時間(Time),機關為幀每秒(f/s, frames per second, fps)。

重新整理率

螢幕每秒畫面被重新整理的次數,分為垂直重新整理率和水準重新整理率,一般我們提到的都是指垂直重新整理率,以赫茲(Hz)為機關,重新整理率越高,圖像就越穩定,圖像顯示就越自然清晰。

分辨率

視訊、圖檔的畫面大小或尺寸。

碼率/比特率

機關時間播放連續的媒體如壓縮後的音頻或視訊的比特數量。常用機關“比特每秒”,縮寫是“bit/s”。比特率越高,帶寬消耗得越多。

三、 視訊封裝格式(Container format)

直播app開發常用的幾種視訊封裝格式如下:

五. 視訊編碼格式(Codec)

視訊封裝格式 & 視訊編碼格式

直播app開發的封裝格式是提供了一個容器,用于存放視訊、音頻以及其他配置資訊,而編碼格式是指對視訊畫面内容進行壓縮的一種标準。

六. 音頻格式

WAV:因其檔案擴充名為wav,微軟和IBM聯合開發的标準,資料本身的格式為PCM或壓縮型,屬于無損格式。

MP3 : MP3是一種音頻壓縮技術,其全稱是動态影像專家壓縮标準音頻層面3(Moving Picture Experts Group Audio Layer III),簡稱為MP3。壓縮比4:1~10:1之間。

AAC:Advanced Audio Coding, 出現于1997年,由Fraunhofer IIS、杜比實驗室、AT&T、Sony、Nokia等公司共同開發。AAC壓縮比通常為18:1。相比MP3,采用更高效的編碼算法,音質更佳,檔案更小。

Opus:Opus格式是一個開放格式,使用上沒有任何專利或限制,比MP3、AAC、HE-AAC等常見格式,有更低的延遲和更好的聲音壓縮率。2012年7月2日,Opus被IETF準許用于标準化。

七. 直播app開發H.264編碼介紹

IPB幀

I幀:幀内編碼幀(intra picture),采用幀内壓縮去掉空間備援資訊。

P幀:前向預測編碼幀(predictive-frame),通過将圖像序列中前面已經編碼幀的時間備援資訊來壓縮傳輸資料量的編碼圖像。參考前面的I幀或者P幀。

B幀:雙向預測内插編碼幀(bi-directional interpolated prediction frame),既考慮源圖像序列前面的已編碼幀,又顧及源圖像序列後面的已編碼幀之間的備援資訊,來壓縮傳輸資料量的編碼圖像,也稱為雙向編碼幀。參考前面一個的I幀或者P幀及其後面的一個P幀。

PTS和DTS

DTS(Decoding Time Stamp)是辨別讀入記憶體中bit流在什麼時候開始送入解碼器中進行解碼。也就是解碼順序的時間戳。

PTS(Presentation Time Stamp)用于度量解碼後的視訊幀什麼時候被顯示出來。在沒有B幀的情況下,DTS和PTS的輸出順序是一樣的,一旦存在B幀,PTS和DTS則會不同。也就是顯示順序的時間戳。

GOP

即Group of picture(圖像組),指兩個I幀之間的距離,Reference(參考周期)指兩個P幀之間的距離。

一個I幀所占用的位元組數大于一個P幀,一個P幀所占用的位元組數大于一個B幀。是以在碼率不變的前提下,GOP值越大,P、B幀的數量會越多,平均每個I、P、B幀所占用的位元組數就越多,也就更容易擷取較好的圖像品質;Reference越大,B幀的數量越多,同理也更容易獲得較好的圖像品質。

簡而言之:

位元組大小:I > P > B

解碼順序:I -> P -> B

GOP解碼案例

以上便是直播app開發必須了解的一些基礎知識,更多相關知識請關注我

繼續閱讀