音視頻學習從零到整-視頻H264編碼

一.學習背景

5G網絡做爲第5代的移動通訊網絡,它的網絡峯值傳播速度可1以達到10Gbps/s.這比4G的的傳輸速度快數百倍.舉個例子,整部超高畫質電影下載可在1秒鐘以內下載完成.git

固然,隨着5G技術的誕生,用在智能終端分享3D電影,遊戲或者超高畫質節目的時代已經毫無懸念的向咱們走來.github

想必你們也逐步瞭解,國內外的互聯網公司也已經佈局音視頻,3D技術方面的開發者招聘和相關產品研發.目前落地推廣最廣泛的就是直播類項目和小視頻類的項目.固然將來的方向確定不止如此.web

做爲一個開發者,有一個學習的氛圍跟一個交流圈子特別重要這是一個個人iOS交流羣:656315826,無論你是小白仍是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 你們一塊兒交流學習成長!面試

那麼咱們如今帶着問題來學習?算法

  • 爲什麼編碼?
  • 何爲編碼?

1.1 爲什麼編碼?

從存儲角度和網絡傳輸以及通用性 3個角度,壓縮已經成了不可或缺的動做.壓縮編碼最基本的指標,就是壓縮比. 壓縮比一般都是小於1(若是等於或者大於1,是否是就失去了編碼的意義了.編碼的目的就是爲了壓縮數據體量).服務器

1.2 何爲編碼?

編碼就是按照必定的格式記錄採樣和量化後的數據.網絡

1.2.1編碼中軟編碼和硬編碼的區別?

  • 硬編碼: 使用非CPU進行編碼,例如使用GPU芯片處理
  • 軟編碼: 使用CPU來進行編碼計算.

1.2.2 軟編碼與硬編碼的區分?

  • 軟編碼: 實現直接、簡單,參數調整方便,升級易,但CPU負載重,性能較硬編碼低,低碼率下質量一般比硬編碼要好一點。
  • 硬編碼:性能高,低碼率下一般質量低於硬編碼器,但部分產品在GPU硬件平臺移植了優秀的軟編碼算法(如X264)的,質量基本等同於軟編碼。

讀者理解: 硬編碼,就是使用GPU計算,獲取數據結果,優勢速度快,效率高. 軟編碼,就是經過CPU來計算,獲取數據結果.框架

1.2.3 壓縮算法

壓縮算法分爲2種,有損壓縮與無損壓縮.ide

  • 無損壓縮:解壓後的數據能夠徹底復原,在經常使用的壓縮格式中,無損壓縮使用頻次較低
  • 有損壓縮:解壓後數據不能徹底復原,會丟失一部分信息.壓縮比越小,丟失的信息就會越多.信號還原的失真就會越大.

須要根據不一樣的場景(考慮因素包括存儲設備,傳輸網絡環境,播放設備等)選用不一樣的壓縮編碼算法.佈局

二. 直播APP需求剖析

2.1 直播項目流程

在直播項目中,通常常見有8個步驟.

  • 音視頻採集
  • 視頻濾鏡
  • 音視頻編碼
  • 推流
  • 流媒體服務器處理
  • 拉流
  • 音視頻解碼
  • 音視頻播放

這個在開發者面試一些有意向或者目前業務中包含直播需求的公司,最爲常見的面試題.無論在咱們過往的工做經驗是否有直播或音視頻相關經驗.這個一塊都是你必須能瞭解.但願你們能夠簡單的瞭解.

2.2 相關框架的學習與使用場景

Enter your image description here:

  • 採集視頻,音頻
    • 使用iOS原生框架 AVFoundation.framework
  • 視頻濾鏡處理
    • 使用iOS原生框架 CoreImage.framework
    • 使用第三方框架 GPUImage.framework

CoreImageGPUImage 框架比較: 在實際項目開發中,開發者更加傾向使用於GPUImage框架. 首先它在使用性能上與iOS提供的原生框架,並無差異;其次它的使用便利性高於iOS原生框架,最後也是最重要的GPUImage框架是開源的.而你們若是想要學習GPUImage框架,建議學習OpenGL ES,其實GPUImage的封裝和思惟都是基於OpenGL ES. GPUImage OC版本下載地址 GPUImage Swift版本下載地址

  • 視頻\音頻編碼壓縮

    • 硬編碼
      • 視頻: VideoToolBox框架
      • 音頻: AudioToolBox 框架
    • 軟編碼
      • 視頻: 使用FFmpeg,X264算法把視頻原數據YUV/RGB編碼成H264
      • 音頻: 使用fdk_aac 將音頻數據PCM轉換成AAC
  • 推流

    • 推流: 將採集的音頻.視頻數據經過流媒體協議發送到流媒體服務器
    • 推流技術
      • 流媒體協議: RTMP\RTSP\HLS\FLV
      • 視頻封裝格式: TS\FLV
      • 音頻封裝格式: Mp3\AAC
  • 流媒體服務器

    • 數據分發
    • 截屏
    • 實時轉碼
    • 內容檢測
  • 拉流

    • 拉流: 從流媒體服務器中獲取音頻\視頻數據
    • 流媒體協議: RTMP\RTSP\HLS\FLV
  • 音視頻解碼

    • 硬解碼
      • 視頻: VideoToolBox框架
      • 音頻: AudioToolBox 框架
    • 軟解碼
      • 視頻: 使用FFmpeg,X264算法解碼
      • 音頻: 使用fdk_aac 解碼
  • 播放

    • ijkplayer 播放框架
    • kxmovie 播放框架

    ijkplayer,kxmovie 都是基於FFmpeg框架封裝的

做爲一個開發者,有一個學習的氛圍跟一個交流圈子特別重要這是一個個人iOS交流羣:656315826,無論你是小白仍是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 你們一塊兒交流學習成長!

相關文章
相關標籤/搜索