視頻基礎(chǔ)知識
1.什么是視頻?
簡單來說颂跨,視頻可以看作是由一張張圖片快速進行切換敢伸,在人眼中產(chǎn)生一段連貫的動作,早期電影膠片是個很明顯的例子恒削,通過記錄在每一格膠片上的圖像池颈,進行快速切換,從而產(chǎn)生了視頻效果钓丰。
2.幀
幀——就是影像動畫中最小單位的單幅影像畫面躯砰,相當(dāng)于電影膠片上的每一格鏡頭,每一張圖像就是一幀携丁,一個視頻就是由許許多多幀組成的琢歇。
3.幀率
幀率是指幀連續(xù)出現(xiàn)在顯示器上的頻率(速率),玩游戲的童鞋肯定對著個不陌生梦鉴,通常我們都會用FPS為單位矿微,即每秒更新的幀數(shù)(幀/秒)。高的幀率可以得到更流暢尚揣、更逼真的動畫涌矢。一般來說30fps就是可以接受的,但是將性能提升至60fps則可以明顯提升交互感和逼真感快骗,但是一般來說超過75fps人眼一般就不容易察覺到有明顯的流暢度提升了娜庇。
4.色彩空間
RGB:一種顏色標準,是通過對紅(R)方篮、綠(G)名秀、藍(B)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色。屏幕上的所有顏色藕溅,都由紅色綠色藍色三種色光按照不同的比例混合而成的匕得,這三種顏色又被成為三原色光。
YUV:YUV是被歐洲電視系統(tǒng)所采用的一種顏色編碼方法巾表,在現(xiàn)代彩色電視系統(tǒng)中汁掠,通常采用攝影機進行取像,然后把取得的彩色圖像信號經(jīng)分色集币、分別放大校正后得到RGB考阱,再經(jīng)過矩陣變換電路得到亮度信號Y和兩個色差信號B-Y(即U)、R-Y(即V)鞠苟,最后發(fā)送端將亮度和色差三個信號分別進行編碼乞榨,用同一信道發(fā)送出去秽之,這就是電視信號的傳輸過程。這種色彩的表示方法就是所謂的YUV色彩空間表示吃既。采用YUV色彩空間的重要性是它的亮度信號Y和色度信號U考榨、V是分離的。其中”Y”表示明亮度鹦倚,也就是灰階值;而”U”和”V” 表示的則是色度董虱,作用是描述影像色彩及飽和度,用于指定像素的顏色申鱼。
采用YUV的優(yōu)勢:
一.彩色YUV圖像轉(zhuǎn)黑白YUV圖像轉(zhuǎn)換非常簡單愤诱,這一特性用在于電視信號上。
二.YUV的數(shù)據(jù)總尺寸小于RGB格式捐友,這對縮小視頻體積提供了便利淫半。
RGB與YUV之間的轉(zhuǎn)換方法:
Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U
音頻基礎(chǔ)知識
1.什么是音頻?
這里的音頻是指存儲聲音內(nèi)容的介質(zhì)匣砖,任何我們可以聽見的聲音經(jīng)過音頻線或話筒的傳輸都會變成一系列的模擬信號科吭。在CD時代,聲音被物理手段收集刻錄在磁帶介質(zhì)中猴鲫,這一過程全是模擬的对人,存在聲音失真的情況;而在數(shù)碼時代拂共,聲音都被處理成數(shù)字信號存儲在存儲介質(zhì)中牺弄,模擬信號是我們可以聽見的,而數(shù)字信號就是用一堆數(shù)字記號(二進制的1和0)來記錄聲音宜狐,數(shù)字信號可以實現(xiàn)對聲音的無損保存势告。
數(shù)碼錄音最關(guān)鍵的步驟就是把模擬信號轉(zhuǎn)成數(shù)字信號,這里不得不提一個名詞:脈沖編碼調(diào)制(PCM)抚恒,是一種數(shù)字數(shù)據(jù)的處理機制咱台,具體請看百科。
PCM的工作過程如下:
模擬信號->采樣->量化->編碼->數(shù)字信號
2.采樣率與采樣位數(shù)
采樣是通過周期性地以某一規(guī)定間隔截取音頻信號俭驮,從而將模擬音頻信號變換為數(shù)字信號的過程回溺。每次采樣時均指定一個表示在采樣瞬間的音頻信號的幅度的數(shù)字。
采樣頻率指錄音設(shè)備在一秒鐘內(nèi)對聲音信號的采樣次數(shù)混萝,根據(jù)奈奎斯特采樣定理:為了不失真地恢復(fù)模擬信號遗遵,采樣頻率應(yīng)該不小于模擬信號頻譜中最高頻率的2倍。也就是說我們對聲音進行收集處理時譬圣,要針對性地對每一段特定頻率的聲音進行選取瓮恭。
人耳能聽到的最高頻率為20kHz雄坪,所以為了滿足人耳的聽覺要求厘熟,采樣率至少為40kHz屯蹦,通常為44.1kHz,更高的通常為48kHz绳姨。
采樣位數(shù)即采樣值或取樣值登澜,用來衡量聲音波動變化的參數(shù),是指聲卡在采集和播放聲音文件時所使用數(shù)字聲音信號的二進制位數(shù)飘庄。采樣的位數(shù)和采樣的頻率決定了聲音采集的質(zhì)量脑蠕。
數(shù)字信號中,信號一般是不連續(xù)的跪削,所以模擬信號量化以后谴仙,只能取一個近似的整數(shù)值,為了記錄這些振幅值碾盐,采樣器會采用一個固定的位數(shù)來記錄這些振幅值晃跺,通常有8位、16位毫玖、32位掀虎。8位代表2的8次方——256,16位則代表2的16次方——64K付枫,32位代表2的32次方——2147483648烹玉,位數(shù)越高,聲音質(zhì)量越好阐滩。
3.聲道
聲道是指聲音在錄制或播放時在不同空間位置采集或回放的相互獨立的音頻信號二打,所以聲道數(shù)也就是聲音錄制時的音源數(shù)量或回放時相應(yīng)的揚聲器數(shù)量。通常我們說的立體聲一般有2個聲道掂榔,有些更高級的有4個聲道址儒。
4.碼率
碼率是指每秒傳送的比特(bit)數(shù),單位bps(bit per second)衅疙,通常使用kbps(每秒鐘1000比特)莲趣。在音頻中指將模擬聲音信號轉(zhuǎn)換成數(shù)字聲音信號后,單位時間內(nèi)的二進制數(shù)據(jù)量饱溢,是間接衡量音頻質(zhì)量的一個指標喧伞。碼率高時文件大小變大,會占據(jù)很多的內(nèi)存容量绩郎,音樂文件最常用的碼率是128kbps潘鲫,MP3文件可以使用的一般是8-320kbps。
碼率(kbps) = 采樣率(kHz)× 采樣位數(shù)(bit/采樣點)× 聲道數(shù)量(一般為2)
視頻編碼
1.什么是視頻編碼肋杖?
就是指通過壓縮技術(shù)溉仑,將原始視頻格式的文件轉(zhuǎn)換成另一種視頻格式文件的方式。從信息論的觀點來看状植,數(shù)據(jù)=信息+數(shù)據(jù)冗余浊竟。視頻信號也存在數(shù)據(jù)冗余怨喘,視頻編碼的實質(zhì)是減少視頻中的冗余數(shù)據(jù)。我們知道振定,視頻是由幀組成的必怜,但是在實際使用中,視頻的數(shù)據(jù)并不是真正按照一幀一幀原始數(shù)據(jù)保存下來的后频,而是通過壓縮編碼后存儲梳庆。視頻編碼能有效減少視頻大小,方便傳輸和存儲卑惜。視頻和音頻通過壓縮編碼合并后就變成了我們常見的格式膏执,如:avi、mp4露久、rmvb胧后、mov等,這些稱為視頻封裝格式抱环。
2.視頻編碼格式
視頻流傳輸中最為重要的編解碼標準有國際電聯(lián)的H.261壳快、H.263、H.264镇草,運動靜止圖像專家組的M-JPEG和國際標準化組織運動圖像專家組的MPEG系列標準等等眶痰。其中最主流的是H.264,當(dāng)然現(xiàn)在已經(jīng)推出H.265梯啤,這是一種更高效的編碼方式竖伯,比上一代的壓縮效率更高。
3.H.264編碼
因為H.264編碼太過龐大復(fù)雜因宇,實際開發(fā)中七婴,編碼部分工作一般由第三方框架完成,開發(fā)者其實并不太需要去涉獵察滑,我這里就不詳細介紹了打厘,具體請看百度百科。
也可參考入門理解H264編碼
音頻編碼
1.什么是音頻編碼贺辰?
參照視頻編碼户盯,音頻編碼自然是對音頻數(shù)據(jù)進行壓縮處理的過程。
2.音頻編碼格式
PCM編碼:前面我們已經(jīng)介紹過了饲化,這種編碼最大的優(yōu)點就是音質(zhì)好莽鸭,最大的缺點就是體積大。
和視頻編碼一樣吃靠,音頻也有許多的編碼格式硫眨,如:WAV、MP3巢块、WMA礁阁、APE巧号、FLAC等等。
我這里著重介紹AAC氮兵,AAC是新一代的音頻有損壓縮技術(shù)裂逐,一種高壓縮比的音頻壓縮算法歹鱼。在MP4視頻中的音頻數(shù)據(jù)泣栈,大多數(shù)時候都是采用AAC壓縮格式。
3.AAC編碼
AAC是一種專為聲音數(shù)據(jù)設(shè)計的文件壓縮格式弥姻。與MP3不同南片,它采用了全新的算法進行編碼,更加高效庭敦,具有更高的“性價比”疼进。利用AAC格式,可使人感覺聲音質(zhì)量沒有明顯降低的前提下秧廉,占用存儲空間更小伞广。
AAC格式主要分為兩種:ADIF、ADTS疼电。
ADIF:Audio Data Interchange Format嚼锄。 音頻數(shù)據(jù)交換格式。這種格式的特征是可以確定的找到這個音頻數(shù)據(jù)的開始蔽豺,不需進行在音頻數(shù)據(jù)流中間開始的解碼区丑,即它的解碼必須在明確定義的開始處進行。這種格式常用在磁盤文件中修陡。
ADTS:Audio Data Transport Stream沧侥。 音頻數(shù)據(jù)傳輸流。這種格式的特征是它是一個有同步字的比特流魄鸦,解碼可以在這個流中任何位置開始宴杀。它的特征類似于mp3數(shù)據(jù)流格式。
參考AAC文件解析及解碼流程
硬件加速
硬件加速(Hardware acceleration)就是利用硬件模塊來替代軟件算法以充分利用硬件所固有的快速特性拾因。硬件加速通常比軟件算法的效率要高婴氮。
將2D、3D圖形計算相關(guān)工作交給GPU處理盾致,從而釋放CPU的壓力主经,也是屬于硬件加速的一種。
硬解碼和軟解碼
1.區(qū)別
硬解碼和上面的硬件加速對應(yīng)庭惜,即使用硬件模塊來解析視頻罩驻、音頻文件等,而軟解碼即是用CPU去計算解析护赊。
硬解碼是將原來全部交由CPU來處理的視頻數(shù)據(jù)的一部分交由GPU來做惠遏,而GPU的并行運算能力要遠遠高于CPU砾跃,這樣可以大大的降低對CPU的負載,CPU的占用率較低了之后就可以同時運行一些其他的程序了节吮。
軟解碼具有更好的適應(yīng)性抽高,軟件解碼主要是會占用CPU的運行,軟解不考慮設(shè)備的硬件解碼支持情況透绩,有CPU就可以使用了翘骂,但是占用了更多的CPU那就意味著很耗費性能,很耗電帚豪,在設(shè)備電量充足的情況下碳竟,或者設(shè)備硬件解碼支持不足的情況下使用軟件解碼更加好。
一般的視頻播放器都會支持軟硬解碼狸臣,兩者相結(jié)合從而發(fā)揮最優(yōu)性能莹桅。
2.Android平臺的解碼
安卓硬解碼可以直接使用MediaCodec(API 16之后引入) ,雖然MediaPlayer也是硬件解碼烛亦,但是被封裝得太死了诈泼,支持的協(xié)議很少。
對于軟解碼煤禽,有許多第三方框架支持铐达,最出名的莫過于ffmpeg,這個在以后的學(xué)習(xí)中再深入了解呜师。