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

  • 2020 年 3 月 30 日
  • 筆記

很多想進行直播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開發必須了解的一些基礎知識,更多相關知識請關注我