做者:CC老師_HelloCoder 原文地址:www.jianshu.com/p/c70c061b8…算法
在iOS4.0,蘋果就已經支持硬編碼.可是硬編碼在當時屬於私有API. 不提供給開發者使用 在2014年的WWDC大會上,iOS 8.0 以後,蘋果開放了硬解碼和硬解碼的API。就是VideoToolbox.framework
的API。VideoToolbox
是一套純C語言API。其中包含了不少C語言函數網絡
VideoToolBox
實際上屬於低級框架,它是能夠直接訪問硬件編碼器和解碼器.它存在於視頻壓縮和解壓縮以及存儲在像素緩存區中的數據轉換提供服務.app
硬編碼的優勢:提升性能、增長效率、延長電量的使用框架
這個框架在音視頻項目開發中,也是會要頻繁使用的.若是你們有想法去從事音視頻的開發.那麼這個框架將會是你學習的一個重點.ide
做爲開發者和產品測試之間的斡旋.是不可避免的.這是我們在作開發過程當中,但仍是 要去思考.究竟是需求不合理仍是咱們對這個需求的沒有把握.函數
在前面我說過,5G時代的到來,勢必會對移動互聯網的衝擊將會是最刺激的.爲什麼?一旦網絡速度+設備的運行速度不受限制時,設想移動設備的暫時不可替代性是否是又更加的明顯了.至少在目前爲止,沒有一款硬件能夠替代手機設備在用戶的地位.性能
那咱們來了解一下視頻的常規知識.只有在瞭解視頻的本質,你纔有可能面對需求應對自如.學習
圖像: 視頻內容自己就是一幀一幀的圖片構成.人眼只要1秒鐘連續播放16張以上的圖片,就會認爲這是一段連貫的視頻.這種物理現象叫視覺暫留.測試
音頻: 視頻必定是由音頻+圖像內容構成的.因此音頻在視頻中是單獨的一個部分.針對這一塊咱們須要單獨編碼的.
**元信息:**元信息其實就是描述信息的信息.用於描述信息的結構\語義\用途\用法等.好比視頻元信息就包含了視頻的具體信息,好比編碼格式,分辨率等等.
視頻編碼格式
音頻編碼格式:
AAC是目前比較熱門的有損壓縮編碼技術,而且衍生了LC-AAC,HE-AAC,HE-AAC v2 三種主要編碼格式.
優點:在小於128Kbit/s的碼率下表現優異,而且多用於視頻中的音頻編碼
適合場景:於128Kbit/s如下的音頻編碼,多用於視頻中的音頻軌的編碼
**封裝格式:**就是將已經編碼壓縮好的視頻數據 和音頻數據按照必定的格式放到一個文件中.這個文件能夠稱爲容器. 固然能夠理解爲這只是一個外殼.
一般咱們不只僅只存放音頻數據和視頻數據,還會存放 一下視頻同步的元數據.例如字幕.這多種數據會不一樣的程序來處理,可是它們在傳輸和存儲的時候,這多種數據都是被綁定在一塊兒的.
AVI
: 是當時爲對抗quicktime格式(mov)而推出的,只能支持固定CBR恆定定比特率編碼的聲音文件MOV
:是Quicktime封裝WMV
:微軟推出的,做爲市場競爭mkv
:萬能封裝器,有良好的兼容和跨平臺性、糾錯性,可帶外掛字幕flv
: 這種封裝方式能夠很好的保護原始地址,不容易被下載到,目前一些視頻分享網站都採用這種封裝方式MP4
:主要應用於mpeg4的封裝,主要在手機上使用。視頻壓縮,該從那幾個方向去進行數據的壓縮了? 實際上壓縮的本質都是從冗餘信息開始出發壓縮的. 而視頻數據之間是有極強的相關性.也就是這樣會產生大量的冗餘信息.這樣的冗餘包括空間上的冗餘信息和時間上的冗餘信息.
IPB幀 視頻壓縮中,每幀表明着一副靜止的圖像.而進行實際壓縮時,會採用各類算法以減小數據的容量.其實IPB幀是最經常使用的一種方式:
讀者角度解讀
若是從編碼的角度,獲取咱們順序思考會存在難度.但若是咱們從解碼的角度來思考就顯得不是那麼不可理解了.
DTS(Decoding Time Stamp)
,主要用於視頻的解碼; PTS(Presentation Time Stamp)
,主要用於解碼節點進行視頻的同步和輸出.
在沒有B幀的狀況下,DTS和PST的輸出順序是同樣的.由於B幀會打亂了解碼和顯示順序.因此一旦存在B幀,PTS和DTS勢必會不一樣.實際上在大多數編解碼標準中,編碼順序和輸入順序並不一致.因而須要PTS和DST這2種不一樣的時間戳.
兩個I幀之間造成的一組圖片,就是GOP(Group of Picture). 一般在編碼器設置參數時,必須會設置gop_size
的值.其實就是表明2個I幀之間的幀數目. 在一個GOP組中容量最大的就是I幀.因此相對而言,gop_size
設置的越大,整個視頻畫面質量就會越好.可是解碼端必須從接收的第一個I幀開始才能夠正確解碼出原始圖像.不然沒法正確解碼.