一般來說,直接采集到的視頻數(shù)據(jù)是RGB24的格式,RGB24一幀的大小size=width×heigth×3 Bit,RGB32的size=width×heigth×4,如果是I420(即YUV標(biāo)準(zhǔn)格式4:2:0)的數(shù)據(jù)量是 size=width×heigth×1.5 Bit。
在采集到RGB24數(shù)據(jù)后,需要對(duì)這個(gè)格式的數(shù)據(jù)進(jìn)行第一次壓縮。即將圖像的顏色空間由RGB2YUV。因?yàn)椋琗264在進(jìn)行編碼的時(shí)候需要標(biāo)準(zhǔn)的YUV(4:2:0)。但是這里需要注意的是,雖然YV12也是(4:2:0),但是YV12和I420的卻是不同的,在存儲(chǔ)空間上面有些區(qū)別。如下:
YV12 : 亮度(行×列) + U(行×列/4) + V(行×列/4)
I420 : 亮度(行×列) + V(行×列/4) + U(行×列/4)
可以看出,YV12和I420基本上是一樣的,就是UV的順序不同。
繼續(xù)我們的話題,經(jīng)過第一次數(shù)據(jù)壓縮后RGB24->YUV(I420)。這樣,數(shù)據(jù)量將減少一半,為什么呢?呵呵,這個(gè)就太基礎(chǔ)了,我就不多寫了。同樣,如果是RGB24->YUV(YV12),也是減少一半。但是,雖然都是一半,如果是YV12的話效果就有很大損失。然后,經(jīng)過X264編碼后,數(shù)據(jù)量將大大減少。將編碼后的數(shù)據(jù)打包,通過RTP實(shí)時(shí)傳送。到達(dá)目的地后,將數(shù)據(jù)取出,進(jìn)行解碼。完成解碼后,數(shù)據(jù)仍然是YUV格式的,所以,還需要一次轉(zhuǎn)換,這樣windows的驅(qū)動(dòng)才可以處理,就是YUV2RGB24。
YUY2 是 4:2:2 [Y0 U0 Y1 V0]