Android開發(fā)工作兩年监憎,真的是感覺Android應(yīng)用層開發(fā)沒什么前景了绞呈,于是打算在網(wǎng)絡(luò)安全贸人,智能硬件,音視頻這幾個(gè)方向發(fā)展佃声,考慮了一段時(shí)間艺智,最終決定選擇音視頻。理由就不說了圾亏,既然選擇了就要好好學(xué)習(xí)了十拣,今天就開始音視頻的第一篇博客,從一些音視頻的基礎(chǔ)知識開始志鹃。
硬解和軟解
視頻解碼分為硬解和軟解夭问,所謂“軟解”就是通過軟件讓 CPU 進(jìn)行視頻解碼處理;而“硬解”是指不依賴于 CPU曹铃,通過專用的設(shè)備(子卡)單獨(dú)完成視頻解碼缰趋,比如曾經(jīng)的 VCD/DVD 解壓卡、視頻壓縮卡都被冠以“硬解”的稱號∩录現(xiàn)在實(shí)現(xiàn)高清硬解不需要額外的子卡秘血,也不需要額外的投入,因?yàn)橛步獯a模塊被整合在了 GPU 內(nèi)部评甜,而目前主流的顯卡(包括整合顯卡)都能支持硬解碼灰粮。
“硬解”其實(shí)更需要軟件的支持,只是基本不需要 CPU 參與運(yùn)算忍坷,從而為系統(tǒng)節(jié)約了很多資源開銷粘舟。
RGB 和 YUV
RGB 指的是紅綠藍(lán)熔脂,應(yīng)用還是很廣泛的,比如顯示器顯示柑肴, bmp 文件格式中的像素值等霞揉;而 yuv 主要指亮度和兩個(gè)色差信號,被稱為 luminance 和 chrominance 他們的轉(zhuǎn)化關(guān)系可以自己去查一下嘉抒,我們視頻里面基本上都是用yuv格式零聚。
YUV文件格式又分很多種,如果算上存儲格式些侍,就更多了,比如 yuv444政模、 yuv422岗宣、 yuv411、 yuv420 等等淋样,視頻壓縮用到的是 420 格式耗式,這是 因?yàn)槿搜蹖α炼雀舾行瑢ι认鄬σ钚?/p>
幀 Frame
簡單的理解幀就是為視頻或者動畫中的每一張畫面趁猴,而視頻和動畫特效就是由無數(shù)張畫面組合而成刊咳,每一張畫面都是一幀。
幀數(shù) Frames
幀數(shù)其實(shí)就是為幀生成數(shù)量的簡稱儡司,可以解釋為靜止畫面的數(shù)量
幀率 Frame Rate
幀率(Frame rate) = 幀數(shù)(Frames)/時(shí)間(Time)娱挨,單位為幀每秒(f/s, frames per second, fps)
幀率是用于測量顯示幀數(shù)的量度,測量單位為“每秒顯示幀數(shù)”( Frame per Second捕犬, FPS)或“赫茲”( Hz)跷坝,一般來說 FPS 用于描述視頻、電子繪圖或游戲每秒播放多少幀碉碉。
FPS( Frame per Second)每秒顯示幀數(shù)
FPS 是圖像領(lǐng)域中的定義柴钻,是指畫面每秒傳輸幀數(shù),通俗來講就是指動畫或視頻的畫面數(shù)垢粮。 FPS 是測量用于保存贴届、顯示動態(tài)視頻的信息數(shù)量。每秒鐘幀數(shù)愈多蜡吧,所顯示的動作就會愈流暢毫蚓。
分辨率
指視頻成像產(chǎn)品所形成的圖像大小或尺寸
刷新率
屏幕每秒畫面被刷新的次數(shù),分為垂直刷新率和水平刷新率斩跌,一般我們提到的都是指垂直刷新率绍些,以赫茲(Hz)為單位,刷新率越高耀鸦,圖像就越穩(wěn)定柬批,圖像顯示就越自然清晰啸澡。
編碼格式
編碼的目的是壓縮數(shù)據(jù)量,采用編碼算法壓縮冗余數(shù)據(jù)氮帐。常用的編碼格式有:
- MPEG(MPEG-2 MPEG-4)
- H.26X(H.263 H.264/AVC H.265/HEVC)
碼率
也就是比特率嗅虏,比特率是單位時(shí)間播放連續(xù)的媒體(如壓縮的音頻和視頻)的比特?cái)?shù)量。比特率越高上沐,帶寬消耗得越多皮服。
視頻幀
常見的視頻幀有I、P参咙、B幀龄广。
- I幀關(guān)鍵幀,采用幀內(nèi)壓縮技術(shù)
- P幀向前參考幀蕴侧,表示這一幀與上一幀的差別择同,屬于幀間壓縮技術(shù)
- B幀表示雙向參考幀,壓縮時(shí)既參考前一幀也參考后一幀净宵,幀間壓縮技術(shù)
一個(gè) I 幀可以不依賴其他幀就解碼出一幅完整的圖像敲才,而 P 幀、B 幀不行择葡。P 幀需要依賴視頻流中排在它前面的幀才能解碼出圖像紧武。B 幀則需要依賴視頻流中排在它前面或后面的幀才能解碼出圖像。
GOP
GOP即Group of picture(圖像組)敏储,指兩個(gè)I幀之間的距離阻星,Reference(參考周期)指兩個(gè)P幀之間的距離。一個(gè)I幀所占用的字節(jié)數(shù)大于一個(gè)P幀虹曙,一個(gè)P幀所占用的字節(jié)數(shù)大于一個(gè)B幀迫横。所以在碼率不變的前提下,GOP值越大酝碳,P矾踱、B幀的數(shù)量會越多,平均每個(gè)I疏哗、P呛讲、B幀所占用的字節(jié)數(shù)就越多,也就更容易獲取較好的圖像質(zhì)量返奉;Reference越大贝搁,B幀的數(shù)量越多,同理也更容易獲得較好的圖像質(zhì)量芽偏。
DTS和PTS
- DTS: Decode Time Stamp,主要用于標(biāo)示讀入內(nèi)存的比特流在什么時(shí)候開始送入解碼器中進(jìn)行解碼雷逆。
- PTS: Presentation Time Stamp,主要用于度量解碼后的視頻幀什么時(shí)候被顯示出來。
由于B幀需要前后的幀才能解出圖像污尉,所以可能一個(gè)視頻中幀的顯示順序是I B B P膀哲,但我們在解碼B幀時(shí)需要P幀的信息往产,所以在傳輸?shù)囊曨l流中的順序是I P B B。這時(shí)候就體現(xiàn)出每幀都有 DTS 和 PTS 的作用了某宪。DTS 告訴我們該按什么順序解碼這幾幀圖像仿村,PTS 告訴我們該按什么順序顯示這幾幀圖像。
例如:
Stream: I P B B
PTS: 1 4 2 3
DTS: 1 2 3 4