Android 音視頻開發(fā) 一、音視頻基礎(chǔ)知識(shí)

視頻基礎(chǔ)知識(shí)

1.什么是視頻?

簡(jiǎn)單來說,視頻可以看作是由一張張圖片快速進(jìn)行切換,在人眼中產(chǎn)生一段連貫的動(dòng)作,早期電影膠片是個(gè)很明顯的例子,通過記錄在每一格膠片上的圖像,進(jìn)行快速切換,從而產(chǎn)生了視頻效果。

2.幀

幀——就是影像動(dòng)畫中最小單位的單幅影像畫面,相當(dāng)于電影膠片上的每一格鏡頭,每一張圖像就是一幀,一個(gè)視頻就是由許許多多幀組成的。

3.幀率

幀率是指幀連續(xù)出現(xiàn)在顯示器上的頻率(速率),玩游戲的童鞋肯定對(duì)著個(gè)不陌生,通常我們都會(huì)用FPS為單位,即每秒更新的幀數(shù)(幀/秒)。高的幀率可以得到更流暢、更逼真的動(dòng)畫。一般來說30fps就是可以接受的,但是將性能提升至60fps則可以明顯提升交互感和逼真感,但是一般來說超過75fps人眼一般就不容易察覺到有明顯的流暢度提升了。

4.色彩空間

RGB:一種顏色標(biāo)準(zhǔn),是通過對(duì)紅(R)、綠(G)、藍(lán)(B)三個(gè)顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色。屏幕上的所有顏色,都由紅色綠色藍(lán)色三種色光按照不同的比例混合而成的,這三種顏色又被成為三原色光。

YUV:YUV是被歐洲電視系統(tǒng)所采用的一種顏色編碼方法,在現(xiàn)代彩色電視系統(tǒng)中,通常采用攝影機(jī)進(jìn)行取像,然后把取得的彩色圖像信號(hào)經(jīng)分色、分別放大校正后得到RGB,再經(jīng)過矩陣變換電路得到亮度信號(hào)Y和兩個(gè)色差信號(hào)B-Y(即U)、R-Y(即V),最后發(fā)送端將亮度和色差三個(gè)信號(hào)分別進(jìn)行編碼,用同一信道發(fā)送出去,這就是電視信號(hào)的傳輸過程。這種色彩的表示方法就是所謂的YUV色彩空間表示。采用YUV色彩空間的重要性是它的亮度信號(hào)Y和色度信號(hào)U、V是分離的。其中”Y”表示明亮度,也就是灰階值;而”U”和”V” 表示的則是色度,作用是描述影像色彩及飽和度,用于指定像素的顏色。

采用YUV的優(yōu)勢(shì):

一.彩色YUV圖像轉(zhuǎn)黑白YUV圖像轉(zhuǎn)換非常簡(jiǎn)單,這一特性用在于電視信號(hào)上。

二.YUV的數(shù)據(jù)總尺寸小于RGB格式,這對(duì)縮小視頻體積提供了便利。

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ǔ)知識(shí)

1.什么是音頻?

這里的音頻是指存儲(chǔ)聲音內(nèi)容的介質(zhì),任何我們可以聽見的聲音經(jīng)過音頻線或話筒的傳輸都會(huì)變成一系列的模擬信號(hào)。在CD時(shí)代,聲音被物理手段收集刻錄在磁帶介質(zhì)中,這一過程全是模擬的,存在聲音失真的情況;而在數(shù)碼時(shí)代,聲音都被處理成數(shù)字信號(hào)存儲(chǔ)在存儲(chǔ)介質(zhì)中,模擬信號(hào)是我們可以聽見的,而數(shù)字信號(hào)就是用一堆數(shù)字記號(hào)(二進(jìn)制的1和0)來記錄聲音,數(shù)字信號(hào)可以實(shí)現(xiàn)對(duì)聲音的無損保存。

數(shù)碼錄音最關(guān)鍵的步驟就是把模擬信號(hào)轉(zhuǎn)成數(shù)字信號(hào),這里不得不提一個(gè)名詞:脈沖編碼調(diào)制(PCM),是一種數(shù)字?jǐn)?shù)據(jù)的處理機(jī)制,具體請(qǐng)看百科。

PCM的工作過程如下:

模擬信號(hào)->采樣->量化->編碼->數(shù)字信號(hào)

2.采樣率與采樣位數(shù)

采樣是通過周期性地以某一規(guī)定間隔截取音頻信號(hào),從而將模擬音頻信號(hào)變換為數(shù)字信號(hào)的過程。每次采樣時(shí)均指定一個(gè)表示在采樣瞬間的音頻信號(hào)的幅度的數(shù)字。

采樣頻率指錄音設(shè)備在一秒鐘內(nèi)對(duì)聲音信號(hào)的采樣次數(shù),根據(jù)奈奎斯特采樣定理:為了不失真地恢復(fù)模擬信號(hào),采樣頻率應(yīng)該不小于模擬信號(hào)頻譜中最高頻率的2倍。也就是說我們對(duì)聲音進(jìn)行收集處理時(shí),要針對(duì)性地對(duì)每一段特定頻率的聲音進(jìn)行選取。

人耳能聽到的最高頻率為20kHz,所以為了滿足人耳的聽覺要求,采樣率至少為40kHz,通常為44.1kHz,更高的通常為48kHz。

采樣位數(shù)即采樣值或取樣值,用來衡量聲音波動(dòng)變化的參數(shù),是指聲卡在采集和播放聲音文件時(shí)所使用數(shù)字聲音信號(hào)的二進(jìn)制位數(shù)。采樣的位數(shù)和采樣的頻率決定了聲音采集的質(zhì)量。

數(shù)字信號(hào)中,信號(hào)一般是不連續(xù)的,所以模擬信號(hào)量化以后,只能取一個(gè)近似的整數(shù)值,為了記錄這些振幅值,采樣器會(huì)采用一個(gè)固定的位數(shù)來記錄這些振幅值,通常有8位、16位、32位。8位代表2的8次方——256,16位則代表2的16次方——64K,32位代表2的32次方——2147483648,位數(shù)越高,聲音質(zhì)量越好。

3.聲道

聲道是指聲音在錄制或播放時(shí)在不同空間位置采集或回放的相互獨(dú)立的音頻信號(hào),所以聲道數(shù)也就是聲音錄制時(shí)的音源數(shù)量或回放時(shí)相應(yīng)的揚(yáng)聲器數(shù)量。通常我們說的立體聲一般有2個(gè)聲道,有些更高級(jí)的有4個(gè)聲道。

4.碼率

碼率是指每秒傳送的比特(bit)數(shù),單位bps(bit per second),通常使用kbps(每秒鐘1000比特)。在音頻中指將模擬聲音信號(hào)轉(zhuǎn)換成數(shù)字聲音信號(hào)后,單位時(shí)間內(nèi)的二進(jìn)制數(shù)據(jù)量,是間接衡量音頻質(zhì)量的一個(gè)指標(biāo)。碼率高時(shí)文件大小變大,會(huì)占據(jù)很多的內(nèi)存容量,音樂文件最常用的碼率是128kbps,MP3文件可以使用的一般是8-320kbps。

碼率(kbps) = 采樣率(kHz)× 采樣位數(shù)(bit/采樣點(diǎn))× 聲道數(shù)量(一般為2)

視頻編碼

1.什么是視頻編碼?

就是指通過壓縮技術(shù),將原始視頻格式的文件轉(zhuǎn)換成另一種視頻格式文件的方式。從信息論的觀點(diǎn)來看,數(shù)據(jù)=信息+數(shù)據(jù)冗余。視頻信號(hào)也存在數(shù)據(jù)冗余,視頻編碼的實(shí)質(zhì)是減少視頻中的冗余數(shù)據(jù)。我們知道,視頻是由幀組成的,但是在實(shí)際使用中,視頻的數(shù)據(jù)并不是真正按照一幀一幀原始數(shù)據(jù)保存下來的,而是通過壓縮編碼后存儲(chǔ)。視頻編碼能有效減少視頻大小,方便傳輸和存儲(chǔ)。視頻和音頻通過壓縮編碼合并后就變成了我們常見的格式,如:avi、mp4、rmvb、mov等,這些稱為視頻封裝格式。

2.視頻編碼格式

視頻流傳輸中最為重要的編解碼標(biāo)準(zhǔn)有國際電聯(lián)的H.261、H.263、H.264,運(yùn)動(dòng)靜止圖像專家組的M-JPEG和國際標(biāo)準(zhǔn)化組織運(yùn)動(dòng)圖像專家組的MPEG系列標(biāo)準(zhǔn)等等。其中最主流的是H.264,當(dāng)然現(xiàn)在已經(jīng)推出H.265,這是一種更高效的編碼方式,比上一代的壓縮效率更高。

3.H.264編碼

因?yàn)镠.264編碼太過龐大復(fù)雜,實(shí)際開發(fā)中,編碼部分工作一般由第三方框架完成,開發(fā)者其實(shí)并不太需要去涉獵,我這里就不詳細(xì)介紹了,具體請(qǐng)看百度百科。

也可參考入門理解H264編碼

音頻編碼

1.什么是音頻編碼?

參照視頻編碼,音頻編碼自然是對(duì)音頻數(shù)據(jù)進(jìn)行壓縮處理的過程。

2.音頻編碼格式

PCM編碼:前面我們已經(jīng)介紹過了,這種編碼最大的優(yōu)點(diǎn)就是音質(zhì)好,最大的缺點(diǎn)就是體積大。

和視頻編碼一樣,音頻也有許多的編碼格式,如:WAV、MP3、WMA、APE、FLAC等等。

我這里著重介紹AAC,AAC是新一代的音頻有損壓縮技術(shù),一種高壓縮比的音頻壓縮算法。在MP4視頻中的音頻數(shù)據(jù),大多數(shù)時(shí)候都是采用AAC壓縮格式。

3.AAC編碼

AAC是一種專為聲音數(shù)據(jù)設(shè)計(jì)的文件壓縮格式。與MP3不同,它采用了全新的算法進(jìn)行編碼,更加高效,具有更高的“性價(jià)比”。利用AAC格式,可使人感覺聲音質(zhì)量沒有明顯降低的前提下,占用存儲(chǔ)空間更小。

AAC格式主要分為兩種:ADIF、ADTS。

ADIF:Audio Data Interchange Format。 音頻數(shù)據(jù)交換格式。這種格式的特征是可以確定的找到這個(gè)音頻數(shù)據(jù)的開始,不需進(jìn)行在音頻數(shù)據(jù)流中間開始的解碼,即它的解碼必須在明確定義的開始處進(jìn)行。這種格式常用在磁盤文件中。

ADTS:Audio Data Transport Stream。 音頻數(shù)據(jù)傳輸流。這種格式的特征是它是一個(gè)有同步字的比特流,解碼可以在這個(gè)流中任何位置開始。它的特征類似于mp3數(shù)據(jù)流格式。

參考AAC文件解析及解碼流程

硬件加速

硬件加速(Hardware acceleration)就是利用硬件模塊來替代軟件算法以充分利用硬件所固有的快速特性。硬件加速通常比軟件算法的效率要高。

將2D、3D圖形計(jì)算相關(guān)工作交給GPU處理,從而釋放CPU的壓力,也是屬于硬件加速的一種。

硬解碼和軟解碼

1.區(qū)別

硬解碼和上面的硬件加速對(duì)應(yīng),即使用硬件模塊來解析視頻、音頻文件等,而軟解碼即是用CPU去計(jì)算解析。

硬解碼是將原來全部交由CPU來處理的視頻數(shù)據(jù)的一部分交由GPU來做,而GPU的并行運(yùn)算能力要遠(yuǎn)遠(yuǎn)高于CPU,這樣可以大大的降低對(duì)CPU的負(fù)載,CPU的占用率較低了之后就可以同時(shí)運(yùn)行一些其他的程序了。

軟解碼具有更好的適應(yīng)性,軟件解碼主要是會(huì)占用CPU的運(yùn)行,軟解不考慮設(shè)備的硬件解碼支持情況,有CPU就可以使用了,但是占用了更多的CPU那就意味著很耗費(fèi)性能,很耗電,在設(shè)備電量充足的情況下,或者設(shè)備硬件解碼支持不足的情況下使用軟件解碼更加好。

一般的視頻播放器都會(huì)支持軟硬解碼,兩者相結(jié)合從而發(fā)揮最優(yōu)性能。

2.Android平臺(tái)的解碼

安卓硬解碼可以直接使用MediaCodec(API 16之后引入) ,雖然MediaPlayer也是硬件解碼,但是被封裝得太死了,支持的協(xié)議很少。

對(duì)于軟解碼,有許多第三方框架支持,最出名的莫過于ffmpeg,這個(gè)在以后的學(xué)習(xí)中再深入了解。

最后編輯于
?著作權(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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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