iOS音視頻開(kāi)發(fā)涉及的方面比較廣泛,一般分為采集羡洛、音視頻的封裝挂脑、編碼、推流欲侮、拉流崭闲、解封裝、解碼威蕉、播放等階段刁俭。其中音視頻的編碼和解碼階段是非常重要的步驟。其中編碼分為硬編碼和軟編碼韧涨,對(duì)應(yīng)解碼分為硬解碼和軟解碼牍戚。
硬編碼
硬編碼是指使用非CPU進(jìn)行編碼,如顯卡GPU虑粥、專用的DSP如孝、FPGA、ASIC芯片等娩贷。
硬編碼一般性能高第晰,對(duì)CPU沒(méi)有壓力,但是對(duì)其他硬件要求較高(如GPU等)。
軟編碼
軟編碼是指使用CPU進(jìn)行編碼但荤,軟編碼通常使用:ffmpeg+x264罗岖。
軟編碼實(shí)現(xiàn)直接、簡(jiǎn)單腹躁,參數(shù)調(diào)整方便,升級(jí)易南蓬,但CPU負(fù)載重纺非,性能較硬編碼低。
音視頻的編碼格式
常見(jiàn)的直播服務(wù)普遍采用了RTMP作為流媒體協(xié)議赘方,F(xiàn)LV作為封裝格式烧颖,H.264作為視頻編碼格式,AAC作為音頻編碼格式窄陡。
視頻編碼
視頻編碼的主要作用是將視頻像素?cái)?shù)據(jù)(RGB炕淮,YUV等)壓縮成為視頻碼流,從而降低視頻的數(shù)據(jù)量跳夭。如果視頻不經(jīng)過(guò)壓縮編碼的話涂圆,體積通常是非常大的,一部電影可能就要上百G的空間币叹。視頻編碼是視音頻技術(shù)中最重要的技術(shù)之一润歉。視頻碼流的數(shù)據(jù)量占了視音頻總數(shù)據(jù)量的絕大部分。高效率的視頻編碼在同等的碼率下颈抚,可以獲得更高的視頻質(zhì)量踩衩。
常見(jiàn)的視頻編碼標(biāo)準(zhǔn)為h.264。音頻編碼
音頻編碼的主要作用是將音頻采樣數(shù)據(jù)(PCM等)壓縮成為音頻碼流贩汉,從而降低音頻的數(shù)據(jù)量驱富。音頻編碼也是互聯(lián)網(wǎng)視音頻技術(shù)中一個(gè)重要的技術(shù)。但是一般情況下音頻的數(shù)據(jù)量要遠(yuǎn)小于視頻的數(shù)據(jù)量匹舞,因而即使使用稍微落后的音頻編碼標(biāo)準(zhǔn)褐鸥,而導(dǎo)致音頻數(shù)據(jù)量有所增加,也不會(huì)對(duì)視音頻的總數(shù)據(jù)量產(chǎn)生太大的影響策菜。高效率的音頻編碼在同等的碼率下晶疼,可以獲得更高的音質(zhì)。
常見(jiàn)的音頻編碼為ACC又憨、MP3翠霍、WMA等。
iOS中編碼方式:
在iOS8之前蠢莺,蘋果并沒(méi)有開(kāi)放硬編碼的接口寒匙,所以只能采用ffmpeg+x624進(jìn)行軟編碼
在iOS8之后,蘋果開(kāi)放了接口,并且封裝了VideoToolBox&AudioToolbox兩個(gè)框架锄弱,分別用于對(duì)視頻&音頻進(jìn)行硬編碼