來自:http://ios.jobbole.com/83077/和http://www.jianshu.com/p/485e946f80b4ios
音頻採樣 奈奎斯特頻率 音頻的位元深度算法
一個音頻文件的體積,有以下算法:體積=採樣率*位元深度*音道數*時間。ide
音頻壓縮:直接脈衝編碼調製Linear PCM數據太龐大了,產生了一系列的壓縮算法,分爲有損和無損。其具體的壓縮算法對應到AVFoundation的CoreAudioTypes.h中有AudioFormatID:如:kAudioFormatLinearPCM性能
色彩二次抽樣: 減少圖片體積 YUV編碼
視頻數據使用的是YCbCr的顏色模型,YCbCr也稱爲YUV。其中Y表示亮度份量,Cb表示藍色份量,Cr表示紅色份量。code
經常使用的YCbCr有4:4:四、4:2:二、4:2:0、4:1:1。orm
4:4:4 亮度和色彩信息的比值爲1:1,全部色彩信息都會被抽樣,也就是全綵。視頻
4:2:2 亮度和色彩信息的比值爲2:1,只有1/2的色彩信息被抽樣遊戲
4:2:0和4:1:1 亮度和色彩信息比值爲4:1,只有1/4的色彩信息被抽樣圖片
對應到AVFoundation的CVImageBuffer.h中kCVImageBufferChromaSubsamplingKey kCVImageBufferChromaSubsampling_420
一些特別專業的相機可能會用到4:4:4參數捕捉圖片,大部分狀況下會用4:2:2參數,普通的攝像頭(如:iPhone攝像頭)通常都是4:2:0、4:1:1
大部分音視頻都使用編解碼器(codec)來進行壓縮和解壓,iOS中使用的主要編解碼器標準爲H.264,H.264對應AVFoundation的AVVideoSettings.h中:AVVideoCodecH264
H.264經過空間和時間2個維度來壓縮體積:
空間:空間上的壓縮獨立於視頻幀,也稱爲幀內壓縮。主要經過壓縮圖片的方式(如色彩二次抽樣等)來減少體積,幀內壓縮通常爲有損壓縮
時間:時間上的壓縮也稱爲幀間壓縮。視頻是由連續的幀(圖片)組成。一段視頻中(不少張圖片)有不少不變的冗餘元素,經過減少這些冗餘元素來達到壓縮的目的,這就是幀間壓縮,幀間壓縮通常爲無損壓縮
H.264有3種profile,用於肯定編碼過程當中幀間壓縮使用的算法:
BaseLine:這個標準提供了最低效的壓縮,通過這個標準壓縮後的文件體積任然比較大,可是這種算法計算強度最小
Main:這個標準的計算強度比BaseLine大,可是能達到更高的壓縮效果
High:這個標準能達到最高質量的壓縮效果,但他的壓縮算法最複雜
H.264除了profile還有一個等級(Level)標準,Level是對自身特性的一些描述(碼率,分辨率,fps等),Level越高,視頻的碼率、分辨率、fps越高。
對應AVFoundation的AVVideoSettings.h中:AVVideoProfileLevelKey
一些移動設備(手機、遊戲機、PMP)因爲性能有限,不支持所有高級視頻壓縮特性和高分辨率圖像,只支持基礎壓縮特性和分辨率低一些的圖像。
視頻碼率(bitRate)
碼率是指單位時間內傳輸的數據位數。視頻體積=視頻碼率*時間,因而可知固定長度的視頻,碼率是決定大小的惟一因素。視頻碼率決定着視頻的壓縮效果,也決定了視頻是質量。碼率越高,質量越好,體積越大。碼率越低,體積越小,視頻質量也越差。
編碼時,根據碼率能夠分爲固定碼率(CBR)編碼和可變碼率(VBR)編碼。
固定碼率:指編碼器輸出的碼率一直爲一個固定值,這種編碼方式計算量小,編碼速度快,可是編碼效果不怎麼好。對於畫面變化大的視頻片斷,因爲碼率限制,致使視頻很是模糊,然而對於畫面變化小的片斷,卻會形成碼率浪費。
可變碼率:指編碼器的輸出碼率能夠根據編碼器的輸入源信號的複雜度自適應的調整,這種方式編碼效果比較好
碼率對應於AVFoundation中AVVideoSettings.h:
AVVideoAverageBitRateKey