1小時(shí)學(xué)會(huì):最簡單的iOS直播推流(六)h264、aac、flv介紹

最簡單的iOS 推流代碼,視頻捕獲,軟編碼(faac,x264),硬編碼(aac,h264),美顏,flv編碼,rtmp協(xié)議,陸續(xù)更新代碼解析,你想學(xué)的知識(shí)這里都有,愿意懂直播技術(shù)的同學(xué)快來看!!

源代碼:https://github.com/hardman/AWLive

前面介紹了如何捕獲音視頻原始數(shù)據(jù),介紹了yuv和pcm。

下面來介紹一下我們的想要轉(zhuǎn)換的目標(biāo)音視頻格式:h264,aac,flv。

什么是h264?

這里就不貼名詞解釋了。

說明一下,為什么需要這種格式。

其實(shí)除了h264格式之外,視頻格式有很多種,出現(xiàn)這些格式原因無非有3種。

1. 壓縮尺寸。

我們來計(jì)算一下:

yuv420格式,寬度為480,高度為320的視頻,每一幀 需要 480*320*3/2 = 230400 字節(jié)。

假設(shè)視頻每秒20幀,那么30秒的視頻 是 230400 * 20 * 30 = 138240000 字節(jié) 大約138M。

你可能覺得不是很大,但是這個(gè)分辨率同樣清晰度的h264視頻可能只需要1-2M左右(當(dāng)然也跟碼率和I幀數(shù)量等因素有關(guān))。

2. 為了與當(dāng)前產(chǎn)品業(yè)務(wù)匹配,或者版權(quán)專利等原因,創(chuàng)造一種獨(dú)特的格式。

比如QuickTime,WMV等。

3. 對(duì)當(dāng)前技術(shù)的改進(jìn)。

h264正是對(duì)h263的改進(jìn)。

h264 怎么壓縮視頻數(shù)據(jù)呢?

最重要的一點(diǎn)是將視頻幀分為關(guān)鍵幀和非關(guān)鍵幀。

關(guān)鍵幀的數(shù)據(jù)是完整的。包含了所有的顏色數(shù)據(jù)。這樣的視頻幀稱為I幀。

非關(guān)鍵幀數(shù)據(jù)不完整,但是它能夠根據(jù)前面或者后面的幀數(shù)據(jù),甚至自己的部分幀數(shù)據(jù),將自身數(shù)據(jù)補(bǔ)充完整。這種視頻幀被稱為 B/P 幀。

總體來說,h264跟yuv相比,最大的不同就是它是壓縮的(通常此過程稱為編碼,不只是簡單的壓縮)。

什么是aac

aac同h264性質(zhì)一樣,它也是pcm的壓縮(編碼)格式。

mp3大家都聽說過,以前聽歌保存到電腦里的歌曲90%都是mp3格式。

aac 相對(duì) mp3來說,是更先進(jìn)的壓縮格式。

什么是flv

h264是視頻編碼格式。

aac是音頻編碼格式。

除了這兩種格式之外,還有一種將視頻和音頻合成(muxer 這個(gè)詞會(huì)在相關(guān)代碼中經(jīng)常出現(xiàn))在一起的格式。

比如:mp4,avi,rmvb,flv。

flv 是一種簡單的視頻合成格式。

它支持指定的音視頻格式,如:h263,h264,VP6 及 AAC,MP3,Nellymoser等。

簡單說來,flv的組成如下:

    flv header + script tag + video tag + audio tag + ... + video tag + audio tag

flv由 flv header 和無數(shù)的tag組成的。

flv header 內(nèi)容是固定的。

一個(gè)tag就像是一個(gè)數(shù)組中的元素。是一個(gè)單獨(dú)的儲(chǔ)存了信息的數(shù)據(jù)塊。

script tag 內(nèi)存儲(chǔ)了視頻相關(guān)信息,如:寬高,碼率,fps,文件大小,音頻信息等等。

video tag 中 存儲(chǔ)的是完整的視頻壓縮格式的一幀數(shù)據(jù),如h264數(shù)據(jù)。

audio tag 中 存儲(chǔ)的是完整的音頻壓縮格式的一幀數(shù)據(jù),如 aac數(shù)據(jù)。

這樣把所有數(shù)據(jù)拼接在一起,寫入文件。這個(gè)文件就是flv格式??梢允褂貌シ牌鞑シ帕?。

而flv剛好支持 h264 和 aac。

為什么介紹flv呢?

因?yàn)閞tmp協(xié)議所傳輸?shù)囊曨l流,就要求是flv格式。

所以,程序從相機(jī)和麥克風(fēng)捕獲到音視頻數(shù)據(jù)后,分別轉(zhuǎn)成 aac和h264格式的音視頻幀。

然后將aac和h264音視頻幀合成flv格式的視頻后發(fā)送到rtmp服務(wù)器??蛻舳司涂梢圆シ盼覀兺频牧髁?。

注:上述內(nèi)容不一定夠精確,以容易理解為上。

文章列表

  1. 1小時(shí)學(xué)會(huì):最簡單的iOS直播推流(一)項(xiàng)目介紹
  2. 1小時(shí)學(xué)會(huì):最簡單的iOS直播推流(二)代碼架構(gòu)概述
  3. 1小時(shí)學(xué)會(huì):最簡單的iOS直播推流(三)使用系統(tǒng)接口捕獲音視頻
  4. 1小時(shí)學(xué)會(huì):最簡單的iOS直播推流(四)如何使用GPUImage,如何美顏
  5. 1小時(shí)學(xué)會(huì):最簡單的iOS直播推流(五)yuv、pcm數(shù)據(jù)的介紹和獲取
  6. 1小時(shí)學(xué)會(huì):最簡單的iOS直播推流(六)h264、aac、flv介紹
  7. 1小時(shí)學(xué)會(huì):最簡單的iOS直播推流(七)h264/aac 硬編碼
  8. 1小時(shí)學(xué)會(huì):最簡單的iOS直播推流(八)h264/aac 軟編碼
  9. 1小時(shí)學(xué)會(huì):最簡單的iOS直播推流(九)flv 編碼與音視頻時(shí)間戳同步
  10. 1小時(shí)學(xué)會(huì):最簡單的iOS直播推流(十)librtmp使用介紹
  11. 1小時(shí)學(xué)會(huì):最簡單的iOS直播推流(十一)sps&pps和AudioSpecificConfig介紹(完結(jié))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容