IOS:學習音視頻的過程

一,音視頻學習中涉及到的概念

1.我們常見的音視頻格式有.mp4,mkv.avi,正如我們常見的.word 需要word 工具打開,不同格式的音視頻也需要不同格式的播放器打開,這種視頻格式相當於存儲視頻信息的容器,裏面包含了音頻信息,視頻信息和相關的配置信息(比如.mp4格式 音視頻是如何關聯的信息,如何解碼等)

2.封裝格式:簡單的來說就是一個容器,裏面存儲已經編碼壓縮好的視頻數據 和 音頻數據,按照一定的格式存放到一個文件中,這個文件可以稱之爲容器;通常除了存儲音頻/視頻數據,還有存放音視頻同步的元數據比如說字幕。

常見的視頻容器格式有:mp4 mov AVI  mkv 等等

通俗的來說:

容器指的是一種音視頻文件格式比如.avi,協議指的是存放在音視頻文件中的數據的編解碼方式,一個容器可以裝有各種不同的編解碼方式的數據,每種編解碼方式都需要不同的編解碼器。MPEG、H.26X等等編碼方式比較常見。 AVI、MPG、MP4等等容器比較常見。

二:視頻編解碼方式

視頻解編碼的過程:對數字視頻進行壓縮或者解壓縮 的一個過程,這期間需要考慮:視頻的質量,視頻的碼率(用來表示視頻所需要的數據量),編碼算法/解碼算法的複雜度,針對數據存儲的錯誤與延遲等等因素

2.1 常見的編碼方式有

  • H.26X系列,其中H.265被稱爲高效視頻編碼,常用的是H.264,優勢在於低碼率,高質量的圖像,容錯能力強,網絡適用性強
  • MPEG系列

視頻編解碼方式與視頻封裝格式之間有啥關係吶?

【視頻封裝格式】可以理解爲 裝着視頻/音頻/【視頻編解碼方式】等信息的容器

一種視頻封裝格式可以支持多種視頻編碼方式,但是無法確切的知道視頻編解碼方式

二:音頻編碼方式

視頻中除了畫面通常還有聲音這就涉及到了音頻編解碼。視頻中經常使用的音頻編碼方式有AAC,MP3等等,中AAC是目前比較熱門的有損壓縮編碼技術。

爲什麼要做音頻編碼:從存儲的角度或者實時傳播的角度來說,數據量較大,所以需要通過壓縮編碼

壓縮編碼的基本指標是壓縮比,壓縮比通常小於1,如果大於1就沒有意義了,壓縮算法分爲2種有損壓縮+無損壓縮

  • 無損壓縮:解壓後的數據可以完全復原,有所壓縮用的較多
  • 有損壓縮:解壓後的數據不能完全復原,會丟失一部分信息,壓縮比越小,丟失的信息就會越多,信號還有的失真就會越大

壓縮編碼的原理實際上就是壓縮冗餘的信號.冗餘信號就是指不能被人耳感知的信號.包括人耳聽覺範圍之外的音頻信號以及被掩蓋掉的音頻信號.

何爲編碼?編碼就是按照一杜傑不到個格式記錄採樣和量化後的數據

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

三:直播項目的流程,如下

  • 音視頻採集

主要使用原生框架AVFoundation.framework

  • 視頻濾鏡

開發中比較傾向於第三方框架GPUImage,框架是基於OpenGL ES

  • 音視頻編碼壓縮

硬編碼:

視頻: VideoToolBox框架                   音頻: AudioToolBox 框架

軟編碼:

視頻: 使用FFmpeg,X264算法把視頻原數據YUV/RGB編碼成H264

音頻: 使用fdk_aac 將音頻數據PCM轉換成AAC

  • 推流

將採集的音頻.視頻數據通過流媒體協議發送到流媒體服務器

推流的技術如下:

.1流媒體協議: RTMP\RTSP\HLS\FLV

.2視頻封裝格式: TS\FLV

.3音頻封裝格式: Mp3\AAC

  • 流媒體服務器處理

.1數據分發  .2 截屏 .3實時轉碼 .4內容檢測

  • 拉流

從流媒體服務器中獲取音頻\視頻數據

  • 音視頻解碼
  • 硬解碼:

    視頻: VideoToolBox框架                   音頻: AudioToolBox 框架​​​​​​​

    軟解碼:

    視頻: 使用FFmpeg,X264算法解碼

    音頻: 使用fdk_aac 解碼

  • 音視頻播放

ijkplayer /kxmovie 播放框架​​​​​​​;全部都是基於FFmpeg框架封裝的

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章