視頻基礎知識
1.什么是視頻?
簡單來說,視頻可以看作是由一張張圖片快速進行切換,在人眼中產生一段連貫的動作,早期電影膠片是個很明顯的例子,通過記錄在每一格膠片上的圖像,進行快速切換,從而產生了視頻效果。
2.幀
幀——就是影像動畫中最小單位的單幅影像畫面,相當于電影膠片上的每一格鏡頭,每一張圖像就是一幀,一個視頻就是由許許多多幀組成的。
3.幀率
幀率是指幀連續出現在顯示器上的頻率(速率),玩游戲的童鞋肯定對著個不陌生,通常我們都會用FPS為單位,即每秒更新的幀數(幀/秒)。高的幀率可以得到更流暢、更逼真的動畫。一般來說30fps就是可以接受的,但是將性能提升至60fps則可以明顯提升交互感和逼真感,但是一般來說超過75fps人眼一般就不容易察覺到有明顯的流暢度提升了。
4.色彩空間
RGB:一種顏色標準,是通過對紅(R)、綠(G)、藍(B)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色。屏幕上的所有顏色,都由紅色綠色藍色三種色光按照不同的比例混合而成的,這三種顏色又被成為三原色光。
YUV:YUV是被歐洲電視系統所采用的一種顏色編碼方法,在現代彩色電視系統中,通常采用攝影機進行取像,然后把取得的彩色圖像信號經分色、分別放大校正后得到RGB,再經過矩陣變換電路得到亮度信號Y和兩個色差信號B-Y(即U)、R-Y(即V),最后發送端將亮度和色差三個信號分別進行編碼,用同一信道發送出去,這就是電視信號的傳輸過程。這種色彩的表示方法就是所謂的YUV色彩空間表示。采用YUV色彩空間的重要性是它的亮度信號Y和色度信號U、V是分離的。其中”Y”表示明亮度,也就是灰階值;而”U”和”V” 表示的則是色度,作用是描述影像色彩及飽和度,用于指定像素的顏色。
采用YUV的優勢:
一.彩色YUV圖像轉黑白YUV圖像轉換非常簡單,這一特性用在于電視信號上。
二.YUV的數據總尺寸小于RGB格式,這對縮小視頻體積提供了便利。
RGB與YUV之間的轉換方法:
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
音頻基礎知識
1.什么是音頻?
這里的音頻是指存儲聲音內容的介質,任何我們可以聽見的聲音經過音頻線或話筒的傳輸都會變成一系列的模擬信號。在CD時代,聲音被物理手段收集刻錄在磁帶介質中,這一過程全是模擬的,存在聲音失真的情況;而在數碼時代,聲音都被處理成數字信號存儲在存儲介質中,模擬信號是我們可以聽見的,而數字信號就是用一堆數字記號(二進制的1和0)來記錄聲音,數字信號可以實現對聲音的無損保存。
數碼錄音最關鍵的步驟就是把模擬信號轉成數字信號,這里不得不提一個名詞:脈沖編碼調制(PCM),是一種數字數據的處理機制,具體請看百科。
PCM的工作過程如下:
模擬信號->采樣->量化->編碼->數字信號
2.采樣率與采樣位數
采樣是通過周期性地以某一規定間隔截取音頻信號,從而將模擬音頻信號變換為數字信號的過程。每次采樣時均指定一個表示在采樣瞬間的音頻信號的幅度的數字。
采樣頻率指錄音設備在一秒鐘內對聲音信號的采樣次數,根據奈奎斯特采樣定理:為了不失真地恢復模擬信號,采樣頻率應該不小于模擬信號頻譜中最高頻率的2倍。也就是說我們對聲音進行收集處理時,要針對性地對每一段特定頻率的聲音進行選取。
人耳能聽到的最高頻率為20kHz,所以為了滿足人耳的聽覺要求,采樣率至少為40kHz,通常為44.1kHz,更高的通常為48kHz。
采樣位數即采樣值或取樣值,用來衡量聲音波動變化的參數,是指聲卡在采集和播放聲音文件時所使用數字聲音信號的二進制位數。采樣的位數和采樣的頻率決定了聲音采集的質量。
數字信號中,信號一般是不連續的,所以模擬信號量化以后,只能取一個近似的整數值,為了記錄這些振幅值,采樣器會采用一個固定的位數來記錄這些振幅值,通常有8位、16位、32位。8位代表2的8次方——256,16位則代表2的16次方——64K,32位代表2的32次方——2147483648,位數越高,聲音質量越好。
3.聲道
聲道是指聲音在錄制或播放時在不同空間位置采集或回放的相互獨立的音頻信號,所以聲道數也就是聲音錄制時的音源數量或回放時相應的揚聲器數量。通常我們說的立體聲一般有2個聲道,有些更高級的有4個聲道。
4.碼率
碼率是指每秒傳送的比特(bit)數,單位bps(bit per second),通常使用kbps(每秒鐘1000比特)。在音頻中指將模擬聲音信號轉換成數字聲音信號后,單位時間內的二進制數據量,是間接衡量音頻質量的一個指標。碼率高時文件大小變大,會占據很多的內存容量,音樂文件最常用的碼率是128kbps,MP3文件可以使用的一般是8-320kbps。
碼率(kbps) = 采樣率(kHz)× 采樣位數(bit/采樣點)× 聲道數量(一般為2)
視頻編碼
1.什么是視頻編碼?
就是指通過壓縮技術,將原始視頻格式的文件轉換成另一種視頻格式文件的方式。從信息論的觀點來看,數據=信息+數據冗余。視頻信號也存在數據冗余,視頻編碼的實質是減少視頻中的冗余數據。我們知道,視頻是由幀組成的,但是在實際使用中,視頻的數據并不是真正按照一幀一幀原始數據保存下來的,而是通過壓縮編碼后存儲。視頻編碼能有效減少視頻大小,方便傳輸和存儲。視頻和音頻通過壓縮編碼合并后就變成了我們常見的格式,如:avi、mp4、rmvb、mov等,這些稱為視頻封裝格式。
2.視頻編碼格式
視頻流傳輸中最為重要的編解碼標準有國際電聯的H.261、H.263、H.264,運動靜止圖像專家組的M-JPEG和國際標準化組織運動圖像專家組的MPEG系列標準等等。其中最主流的是H.264,當然現在已經推出H.265,這是一種更高效的編碼方式,比上一代的壓縮效率更高。
3.H.264編碼
因為H.264編碼太過龐大復雜,實際開發中,編碼部分工作一般由第三方框架完成,開發者其實并不太需要去涉獵,我這里就不詳細介紹了,具體請看百度百科。
也可參考入門理解H264編碼
音頻編碼
1.什么是音頻編碼?
參照視頻編碼,音頻編碼自然是對音頻數據進行壓縮處理的過程。
2.音頻編碼格式
PCM編碼:前面我們已經介紹過了,這種編碼最大的優點就是音質好,最大的缺點就是體積大。
和視頻編碼一樣,音頻也有許多的編碼格式,如:WAV、MP3、WMA、APE、FLAC等等。
我這里著重介紹AAC,AAC是新一代的音頻有損壓縮技術,一種高壓縮比的音頻壓縮算法。在MP4視頻中的音頻數據,大多數時候都是采用AAC壓縮格式。
3.AAC編碼
AAC是一種專為聲音數據設計的文件壓縮格式。與MP3不同,它采用了全新的算法進行編碼,更加高效,具有更高的“性價比”。利用AAC格式,可使人感覺聲音質量沒有明顯降低的前提下,占用存儲空間更小。
AAC格式主要分為兩種:ADIF、ADTS。
ADIF:Audio Data Interchange Format。 音頻數據交換格式。這種格式的特征是可以確定的找到這個音頻數據的開始,不需進行在音頻數據流中間開始的解碼,即它的解碼必須在明確定義的開始處進行。這種格式常用在磁盤文件中。
ADTS:Audio Data Transport Stream。 音頻數據傳輸流。這種格式的特征是它是一個有同步字的比特流,解碼可以在這個流中任何位置開始。它的特征類似于mp3數據流格式。
參考AAC文件解析及解碼流程
硬件加速
硬件加速(Hardware acceleration)就是利用硬件模塊來替代軟件算法以充分利用硬件所固有的快速特性。硬件加速通常比軟件算法的效率要高。
將2D、3D圖形計算相關工作交給GPU處理,從而釋放CPU的壓力,也是屬于硬件加速的一種。
硬解碼和軟解碼
1.區別
硬解碼和上面的硬件加速對應,即使用硬件模塊來解析視頻、音頻文件等,而軟解碼即是用CPU去計算解析。
硬解碼是將原來全部交由CPU來處理的視頻數據的一部分交由GPU來做,而GPU的并行運算能力要遠遠高于CPU,這樣可以大大的降低對CPU的負載,CPU的占用率較低了之后就可以同時運行一些其他的程序了。
軟解碼具有更好的適應性,軟件解碼主要是會占用CPU的運行,軟解不考慮設備的硬件解碼支持情況,有CPU就可以使用了,但是占用了更多的CPU那就意味著很耗費性能,很耗電,在設備電量充足的情況下,或者設備硬件解碼支持不足的情況下使用軟件解碼更加好。
一般的視頻播放器都會支持軟硬解碼,兩者相結合從而發揮最優性能。
2.Android平臺的解碼
安卓硬解碼可以直接使用MediaCodec(API 16之后引入) ,雖然MediaPlayer也是硬件解碼,但是被封裝得太死了,支持的協議很少。
對于軟解碼,有許多第三方框架支持,最出名的莫過于ffmpeg,這個在以后的學習中再深入了解。