5分钟带你了解音视频开发
前言
想賺錢,第一點(diǎn)就得選對(duì)自己的方向,有的行業(yè)和領(lǐng)域,無(wú)論你如何努力,天花板也不過(guò)如此。選對(duì)時(shí)代的風(fēng)口,就算是頭豬都能被吹上天,今天我們就來(lái)聊聊音視頻開(kāi)發(fā)。
蓬勃發(fā)展的音視頻開(kāi)發(fā)
時(shí)至今日,短視頻App可謂是如日中天,一片興興向榮。隨著短視頻的興起,音視頻開(kāi)發(fā)也越來(lái)越受到重視,但是由于音視頻開(kāi)發(fā)涉及知識(shí)面比較廣,入門門檻相對(duì)較高,讓許許多多開(kāi)發(fā)者望而生畏。接下來(lái)我介紹一下音視頻開(kāi)發(fā)的基礎(chǔ)部分,幫助大家學(xué)習(xí)。
一. 顏色模式
RGB
RGB顏色模型的主要目的是在電子系統(tǒng)中檢測(cè),表示和顯示圖像,比如電視和計(jì)算機(jī),但是在傳統(tǒng)攝影中也有應(yīng)用。
RGB
基礎(chǔ)的部分不過(guò)多描述,更多內(nèi)容點(diǎn)擊標(biāo)題見(jiàn)維基百科。
YUV
Y’UV的發(fā)明是由于彩色電視與黑白電視的過(guò)渡時(shí)期。黑白視頻只有Y(Luma,Luminance)視頻,也就是灰階值。到了彩色電視規(guī)格的制定,是以YUV/YIQ的格式來(lái)處理彩色電視圖像,把UV視作表示彩度的C(Chrominance或Chroma),如果忽略C信號(hào),那么剩下的Y(Luma)信號(hào)就跟之前的黑白電視頻號(hào)相同,這樣一來(lái)便解決彩色電視機(jī)與黑白電視機(jī)的兼容問(wèn)題。Y’UV最大的優(yōu)點(diǎn)在于只需占用極少的帶寬,因?yàn)槿搜蹖?duì)亮度敏感,對(duì)色度不敏感,因此減少部分UV的數(shù)據(jù)量,但人眼感知不到。
YUV也稱為YCbCr,對(duì)于每個(gè)分量如下:
- Y:Luminance, 亮度,也就是灰度值。除了表示亮度信號(hào)外,還含有較多的綠色通道量。
- U:Cb,藍(lán)色通道與亮度的差值。
- V:Cr,紅色通道與亮度的差值。
如下圖,可以看到3個(gè)分量的效果差值。
YUV示例圖
RGB與YUV轉(zhuǎn)換公式 (RGB取值范圍均為0~255)
- Y=0.299R+0.587G+0.114B ? R=Y+1.14V
- U=-0.147R-0.289G+0.436B ? G=Y-0.39U-0.58V
- V=0.615R-0.515G-0.100B ? B=Y+2.03U
HSV
-
色調(diào)H: 用角度度量,取值范圍為0°~360°,從紅色開(kāi)始按逆時(shí)針?lè)较蛴?jì)算,紅色為0°,綠色為120°,藍(lán)色為240°。它們的補(bǔ)色是:黃色為60°,青色為180°,品紅為300°;
-
飽和度S: 飽和度S表示顏色接近光譜色的程度。一種顏色,可以看成是某種光譜色與白色混合的結(jié)果。其中光譜色所占的比例愈大,顏色接近光譜色的程度就愈高,顏色的飽和度也就愈高。飽和度高,顏色則深而艷。光譜色的白光成分為0,飽和度達(dá)到最高。通常取值范圍為0%~100%,值越大,顏色越飽和。
-
明度V: 明度表示顏色明亮的程度,對(duì)于光源色,明度值與發(fā)光體的光亮度有關(guān);對(duì)于物體色,此值和物體的透射比或反射比有關(guān)。通常取值范圍為0%(黑)到100%(白)。
hsv_1.png
hsv_2.png
RGB和CMY顏色模型都是面向硬件的,而HSV(Hue Saturation Value)顏色模型是面向用戶的。
HSV模型的三維表示從RGB立方體演化而來(lái)。設(shè)想從RGB沿立方體對(duì)角線的白色頂點(diǎn)向黑色頂點(diǎn)觀察,就可以看到立方體的六邊形外形。六邊形邊界表示色彩,水平軸表示純度,明度沿垂直軸測(cè)量。
HSV在做顏色檢測(cè)方面比較常用,可以參考文章HSV顏色檢測(cè)。
二. 視頻基礎(chǔ)概念
幀(Frame)
簡(jiǎn)單的理解幀就是為視頻或者動(dòng)畫中的每一張畫面,而視頻和動(dòng)畫特效就是由無(wú)數(shù)張畫面組合而成,每一張畫面都是一幀。
幀數(shù)(Frames)
幀數(shù)其實(shí)就是為幀生成數(shù)量的簡(jiǎn)稱,可以解釋為靜止畫面的數(shù)量
幀率(Frame Rate)
幀率(Frame rate) = 幀數(shù)(Frames)/時(shí)間(Time),單位為幀每秒(f/s, frames per second, fps)。
刷新率
屏幕每秒畫面被刷新的次數(shù),分為垂直刷新率和水平刷新率,一般我們提到的都是指垂直刷新率,以赫茲(Hz)為單位,刷新率越高,圖像就越穩(wěn)定,圖像顯示就越自然清晰。
目前, 大多數(shù)顯示器根據(jù)其設(shè)定按 30Hz、 60Hz、 120Hz 或者 144Hz 的頻率進(jìn)行刷新。 而其中最常見(jiàn)的刷新頻率是 60 Hz。 這樣做是為了繼承以前電視機(jī)刷新頻率為 60Hz 的設(shè)定。
幀率關(guān)鍵值
- 10~12 FPS:由于人類眼睛的特殊生理結(jié)構(gòu),如果所看畫面之幀率高于每秒約10至12幀的時(shí)候,就會(huì)認(rèn)為是連貫的,此現(xiàn)象稱之為視覺(jué)暫留。
- 24 FPS:一般電影的拍攝及播放幀數(shù)是每秒24幀。
- 60 FPS:這個(gè)幀率對(duì)人眼識(shí)別來(lái)說(shuō)已經(jīng)具備較高的平滑度。
- 85 FPS:人類大腦處理視頻的極限,人眼無(wú)法分辨更高頻率的差異。
60FPS
在做頁(yè)面性能優(yōu)化時(shí),常用60FPS作為一個(gè)基準(zhǔn),所以需要盡量讓每一幀的渲染控制在16ms內(nèi),這樣才能達(dá)到一秒60幀的流暢度。
分辨率
視頻、圖片的畫面大小或尺寸。
碼率/比特率
單位時(shí)間播放連續(xù)的媒體如壓縮后的音頻或視頻的比特?cái)?shù)量。常用單位“比特每秒”,縮寫是“bit/s”。比特率越高,帶寬消耗得越多。
三. CPU & GPU
CPU:中央處理器(英文全名:Central Processing Unit),包括運(yùn)算器(算術(shù)邏輯運(yùn)算單元,ALU,Arithmetic Logic Unit)和高速緩沖存儲(chǔ)器(Cache)及實(shí)現(xiàn)它們之間聯(lián)系的數(shù)據(jù)(Data)、控制及狀態(tài)的總線(Bus)。
GPU:圖形處理器(英語(yǔ)全名:Graphics Processing Unit),專為執(zhí)行復(fù)雜的數(shù)學(xué)和幾何計(jì)算而設(shè)計(jì)的,擁有2D或3D圖形加速功能。
GPU相比于CPU,更強(qiáng)大的2D、3D圖形計(jì)算能力,可以讓CPU從圖形處理的任務(wù)中解放出來(lái),執(zhí)行其他更多的系統(tǒng)任務(wù),這樣可以大大提高計(jì)算機(jī)的整體性能。
硬件加速
硬件加速(Hardware acceleration)就是利用硬件模塊來(lái)替代軟件算法以充分利用硬件所固有的快速特性。硬件加速通常比軟件算法的效率要高。
將2D、3D圖形計(jì)算相關(guān)工作交給GPU處理,從而釋放CPU的壓力,也是屬于硬件加速的一種。
硬解和軟解
硬解和上面的硬件加速對(duì)應(yīng),即使用硬件模塊來(lái)解析視頻、音頻文件等,而軟解即是用CPU去計(jì)算解析。
四. 視頻封裝格式(Container format)
| MP4 | MP4 | Moving Picture Experts Group,即 MPEG(動(dòng)態(tài)圖像專家組) | 1998 | 常用有損壓縮格式,通用性強(qiáng) |
| AVI | Audio Video Interleaved(音頻視頻交錯(cuò)格式) | 微軟 | 1992 | 體積大算法簡(jiǎn)單 |
| MOV | QuickTime 影片格式 | Apple | 1991 | 蘋果專屬格式對(duì)很多其他的播放器支持不是很友好 |
| WMV | Windows Media Video | 微軟 | 2003 | 微軟的專業(yè)視頻格式,兼容性并不是很好 |
| FLV | Adobe Flash 網(wǎng)絡(luò)流媒體格式 | Adobe | 2002 | 被淘汰的早期網(wǎng)絡(luò)視頻格式 |
| MKV | Matroska 多媒體容器 | Matroska.org | 2002 | 最有包容性的視頻格式,能容納無(wú)限量、多種不同類型編碼的視頻、音頻及字幕流 |
| WebM | WebM | 2010 | 谷歌推出的 HTML5 標(biāo)準(zhǔn)的網(wǎng)絡(luò)視頻標(biāo)準(zhǔn),以MKV容器格式為基礎(chǔ)開(kāi)發(fā) | |
| RMVB | RMVB | Real Networks | 1997 | 根據(jù)不同的網(wǎng)絡(luò)傳輸速率,而制定出不同的壓縮比率,從而實(shí)現(xiàn)在低速率的網(wǎng)絡(luò)上進(jìn)行影像數(shù)據(jù)實(shí)時(shí)傳送和播放,具有體積小,畫質(zhì)不錯(cuò)的優(yōu)點(diǎn)。已過(guò)時(shí)。 |
更多參考 維基百科視頻文件格式。
五. 視頻編碼格式(Codec)
1. MPEG:(Moving Picture Experts Group, ISO旗下的組織)
MPEG是Moving Picture Experts Group的簡(jiǎn)稱。這個(gè)名字本來(lái)的含義是指一個(gè)研究視頻和音頻編碼標(biāo)準(zhǔn)的“動(dòng)態(tài)圖像專家組”組織,成立于1988年,致力開(kāi)發(fā)視頻、音頻的壓縮編碼技術(shù)。
| MPEG - 1 | VCD |
| MPEG - 2 | DVD、數(shù)字有線電視信號(hào) |
| MPEG - 4(第二部分) | 視頻電話、網(wǎng)絡(luò)傳輸、廣播和媒體存儲(chǔ) |
2. H.26X : ITU-T VCEG(Visual Coding Experts Group,國(guó)際電聯(lián)旗下的標(biāo)準(zhǔn)化組織)制定
| H.261 | 老的視頻會(huì)議和視頻電話產(chǎn)品 |
| H.262 | DVD、數(shù)字有線電視信號(hào)(與MPEG共同制定,與MPEG-2完全一致) |
| H.263 | 視頻會(huì)議、視頻電話和網(wǎng)絡(luò)視頻 |
| H.264 | 高精度視頻的錄制、壓縮和發(fā)布格式(與MPEG-4第十部分完全一致),當(dāng)前主流 |
| H.265 | H.264的兩倍之壓縮率,可支持4K分辨率甚至到超高畫質(zhì)電視,最高分辨率可達(dá)到8192×4320(8K分辨率) |
3. H.264
當(dāng)前主流的編碼格式是H.264,這是由ITU-T VCEG和MPEG共同制定的標(biāo)準(zhǔn),MPEG - 4第十部分內(nèi)容也是H.264。
視頻封裝格式 & 視頻編碼格式
封裝格式是提供了一個(gè)容器,用于存放視頻、音頻以及其他配置信息,而編碼格式是指對(duì)視頻畫面內(nèi)容進(jìn)行壓縮的一種標(biāo)準(zhǔn)。
六. 音頻格式
- WAV:因其文件擴(kuò)展名為wav,微軟和IBM聯(lián)合開(kāi)發(fā)的標(biāo)準(zhǔn),數(shù)據(jù)本身的格式為PCM或壓縮型,屬于無(wú)損格式。
- MP3 : MP3是一種音頻壓縮技術(shù),其全稱是動(dòng)態(tài)影像專家壓縮標(biāo)準(zhǔn)音頻層面3(Moving Picture Experts Group Audio Layer III),簡(jiǎn)稱為MP3。壓縮比4:1~10:1之間。
- AAC:Advanced Audio Coding, 出現(xiàn)于1997年,由Fraunhofer IIS、杜比實(shí)驗(yàn)室、AT&T、Sony、Nokia等公司共同開(kāi)發(fā)。AAC壓縮比通常為18:1。相比MP3,采用更高效的編碼算法,音質(zhì)更佳,文件更小。
- Opus:Opus格式是一個(gè)開(kāi)放格式,使用上沒(méi)有任何專利或限制,比MP3、AAC、HE-AAC等常見(jiàn)格式,有更低的延遲和更好的聲音壓縮率。2012年7月2日,Opus被IETF批準(zhǔn)用于標(biāo)準(zhǔn)化。
七. H.264編碼介紹
IPB幀
- I幀:幀內(nèi)編碼幀(intra picture),采用幀內(nèi)壓縮去掉空間冗余信息。
- P幀:前向預(yù)測(cè)編碼幀(predictive-frame),通過(guò)將圖像序列中前面已經(jīng)編碼幀的時(shí)間冗余信息來(lái)壓縮傳輸數(shù)據(jù)量的編碼圖像。參考前面的I幀或者P幀。
- B幀:雙向預(yù)測(cè)內(nèi)插編碼幀(bi-directional interpolated prediction frame),既考慮源圖像序列前面的已編碼幀,又顧及源圖像序列后面的已編碼幀之間的冗余信息,來(lái)壓縮傳輸數(shù)據(jù)量的編碼圖像,也稱為雙向編碼幀。參考前面一個(gè)的I幀或者P幀及其后面的一個(gè)P幀。
PTS和DTS
- DTS(Decoding Time Stamp)是標(biāo)識(shí)讀入內(nèi)存中bit流在什么時(shí)候開(kāi)始送入解碼器中進(jìn)行解碼。也就是解碼順序的時(shí)間戳。
- PTS(Presentation Time Stamp)用于度量解碼后的視頻幀什么時(shí)候被顯示出來(lái)。在沒(méi)有B幀的情況下,DTS和PTS的輸出順序是一樣的,一旦存在B幀,PTS和DTS則會(huì)不同。也就是顯示順序的時(shí)間戳。
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ù)量會(huì)越多,平均每個(gè)I、P、B幀所占用的字節(jié)數(shù)就越多,也就更容易獲取較好的圖像質(zhì)量;Reference越大,B幀的數(shù)量越多,同理也更容易獲得較好的圖像質(zhì)量。
簡(jiǎn)而言之:
- 字節(jié)大小:I > P > B
- 解碼順序:I -> P -> B
GOP解碼案例
更多Android開(kāi)發(fā)詳細(xì)資料掃碼免費(fèi)獲得
寫在最后
在技術(shù)領(lǐng)域內(nèi),沒(méi)有任何一門課程可以讓你學(xué)完后一勞永逸,再好的課程也只能是“師傅領(lǐng)進(jìn)門,修行靠個(gè)人”。“學(xué)無(wú)止境”這句話,在任何技術(shù)領(lǐng)域,都不只是良好的習(xí)慣,更是程序員和工程師們不被時(shí)代淘汰、獲得更好機(jī)會(huì)和發(fā)展的必要前提。
如果你覺(jué)得自己學(xué)習(xí)效率低,缺乏正確的指導(dǎo),可以掃碼,領(lǐng)取更多詳細(xì)音視頻資料,并加入我們資源豐富,學(xué)習(xí)氛圍濃厚的技術(shù)圈一起學(xué)習(xí)交流吧!
加入我們吧!群內(nèi)有許多來(lái)自一線的技術(shù)大牛,也有在小廠或外包公司奮斗的碼農(nóng),我們致力打造一個(gè)平等,高質(zhì)量的Android交流圈子,不一定能短期就讓每個(gè)人的技術(shù)突飛猛進(jìn),但從長(zhǎng)遠(yuǎn)來(lái)說(shuō),眼光,格局,長(zhǎng)遠(yuǎn)發(fā)展的方向才是最重要的。
35歲中年危機(jī)大多是因?yàn)楸欢唐诘睦鏍恐?#xff0c;過(guò)早壓榨掉了價(jià)值,如果能一開(kāi)始就樹(shù)立一個(gè)正確的長(zhǎng)遠(yuǎn)的職業(yè)規(guī)劃。35歲后的你只會(huì)比周圍的人更值錢。
總結(jié)
以上是生活随笔為你收集整理的5分钟带你了解音视频开发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2055年
- 下一篇: 【opencv-ANNs】简单自动驾驶树