YUV+RGB+H264+RTSP總結


原鏈接:https://blog.csdn.net/weixin_43166958/article/details/89357097

 

YUV
YUV 是傳統的黑白電視,沒有uv數據即是黑白電視。YUV更便於視頻信號的壓縮、傳輸和存儲

從視頻采集的角度來說,一般的視頻采集芯片輸出的碼流一般都是YUV數據流的形式,而從視頻處理(例如H.264、MPEG視頻編解碼)的角度來說,也是在原始YUV碼流進行編碼和解析。

YUV,分為三個分量,Y:表示明亮度(Luminance或Luma),也就是灰度值;而 U 和 V :表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用於指定像素的顏色。

YUV是一種顏色編碼方法,主要用於電視系統以及模擬視頻領域,它將亮度信息(Y)與色彩信息(UV)分離,沒有UV信息一樣可以顯示完整的圖像,只不過是黑白的,這樣的設計很好地解決了彩色電視機與黑白電視的兼容問題。並且,YUV不像RGB那樣要求三個獨立的視頻信號同時傳輸,所以用YUV方式傳送占用極少的頻寬。

采樣方式

YUV碼流的存儲格式其實與其采樣的方式密切相關,主流的采樣方式有三種:

YUV 4:4:4采樣,每一個Y對應一組UV分量。

YUV 4:2:2采樣,每兩個Y共用一組UV分量。

YUV 4:2:0采樣,每四個Y共用一組UV分量。

YUV 格式可以分為打包格式packed format和平面格式planar format。打包格式將YUV分量存放在同一個數組中,通常是幾個相鄰的像素組成一個宏像素(macro-pixel);而平面格使用三個數組分開存放YUV三個分量,就像是一個三維平面一樣。Packed format和planner format的區別在於,packed format中的YUV是混合在一起的,因此就有了UYVY、YUYV等等,他們在碼流中排列的方式有所不同。而對於planner format每一個Y分量,U分量和V分量都是以獨立的平面組織的,也就是說所有的U分量都在Y分量之后出現,而V分量在所有的U分量之后。就像三個大色塊一樣。

存儲方式

(1) YUVY 格式 (屬於YUV422)
YUYV為YUV422采樣的存儲格式中的一種,相鄰的兩個Y共用其相鄰的兩個Cb、Cr, 其中,Cb、Cr的含義等同於U、V。

(2) UYVY 格式 (屬於YUV422)

UYVY格式也是YUV422采樣的存儲格式中的一種,只不過與YUYV不同的是UV的排列順序不一樣而已

(3) YUV422P格式 (屬於YUV422)

YUV422P也屬於YUV422的一種,它是一種Plane模式,即打包模式,並不是將YUV數據交錯存儲,而是先存放所有的Y分 量,然后存儲所有的U(Cb)分量,最后存儲所有的V(Cr)分量

(4)YV12,YU12格式(屬於YUV420)

YU12和YV12屬於YUV420格式,也是一種Plane模式,將Y、U、V分量分別打包,依次存儲。其每一個像素點的YUV數據提取遵循YUV420格式的提取方式,即4個Y分量共用一組UV。
YV12格式與IYUV類似,每個像素都提取Y,在UV提取時,將圖像2x2的矩陣,每個矩陣提取一個U和一個V。

RGB
RGB是最直觀的靜態畫面(彩色的LED燈,液晶屏幕),可以說RGB是用來在LCD、CRT上顯示用的

計算機彩色顯示器顯示色彩的原理與彩色電視機一樣,都是采用R(Red)、G(Green)、B(Blue)相加混色的原理:通過發射出三種不同強度的電子束,使屏幕內側覆蓋的紅、綠、藍磷光材料發光而產生色彩。當記錄及顯示彩色圖像時,RGB是最常見的一種方案。但是,它缺乏與早期黑白顯示系統的良好兼容性。因此,許多電子電器廠商普遍采用的做法是,將RGB轉換成YUV顏色空間,以維持兼容,再根據需要換回RGB格式,以便在電腦顯示器上顯示彩色圖形。

自然界中幾乎所有的顏色都能用三種基本彩色混合配出,在彩色電視技術中選擇紅色、綠色、和藍色作為三基色。其他的顏色都可以用紅色、綠色和藍色按照不同的比例混合而成。所選取的紅色、綠色和藍色三基色空間。簡稱為RGB顏色空間。

RGB565 每個像素用16位表示,RGB分量分別使用5位、6位、5位

RGB555 每個像素用16位表示,RGB分量都使用5位(剩下1位不用)

RGB24 每個像素用24位表示,RGB分量各使用8位(注意在內存中RGB各分量的排列順序為:BGR BGR BGR…)

RGB32 每個像素用32位表示,RGB分量各使用8位(剩下8位不用)

ARGB32 每個像素用32位表示,RGB分量各使用8位(剩下的8位用於表示Alpha通道值)

H264
H.264是國際標准化組織(ISO)和國際電信聯盟(ITU)共同提出的繼MPEG4之后的新一代數字視頻壓縮格式。

H.264是一種壓縮算法,你給它什么數據都能壓縮,但是它是有損壓縮,所以要進行H264編碼要先把數據轉換成YUV圖像格式的才可以 H.264的碼流結構網絡適應性強,增加了差錯恢復能力,能夠很好地適應IP和無線網絡的應用。

H.264采用的核心算法是幀內壓縮和幀間壓縮,幀內壓縮是生成I幀的算法,幀間壓縮是生成B幀和P幀的算法。

幀內(Intraframe)壓縮也稱為空間壓縮(Spatialcompression)。當壓縮一幀圖像時,僅考慮本幀的數據而不考慮相鄰幀之間的冗余信息,這實際上與靜態圖像壓縮類似。幀內一般采用有損壓縮算法,由於幀內壓縮是編碼一個完整的圖像,所以可以獨立的解碼、顯示。幀內壓縮一般達不到很高的壓縮,跟編碼jpeg差不多。

幀間(Interframe)壓縮的原理是:相鄰幾幀的數據有很大的相關性,或者說前后兩幀信息變化很小的特點。也即連續的視頻其相鄰幀之間具有冗余信息,根據這一特性,壓縮相鄰幀之間的冗余量就可以進一步提高壓縮量,減小壓縮比。幀間壓縮也稱為時間壓縮(Temporalcompression),它通過比較時間軸上不同幀之間的數據進行壓縮。幀間壓縮一般是無損的。幀差值(Framedifferencing)算法是一種典型的時間壓縮法,它通過比較本幀與相鄰幀之間的差異,僅記錄本幀與其相鄰幀的差值,這樣可以大大減少數據量。

H264在視頻采集到輸出中屬於編解碼層次的數據,如圖所示,是在采集數據后做編碼壓縮時通過編碼標准編碼后所呈現的數據。

 

 

H264分為兩層:
VCL(Video Coding Layer)視頻編碼層:VCL為被壓縮編碼后的視頻數據序列,負責高效的視頻內容表示
NAL(Network Abstraction Layer)網絡提取層:負責以網絡所要求的恰當的方式對數據進行打包和傳送

碼率一定的情況下,分辨率與清晰度成反比關系:分辨率越高,圖像越不清晰,分辨率越低,圖像越清晰。
分辨率一定的情況下,碼率與清晰度成正比關系,碼率越高,圖像越清晰;碼率越低,圖像越不清晰。
分辨率常用的有:
720x480(標清480p)
1280x720(高清720p)
1920x1080(全高清1080p, 19202 * 10802 = 4k)
3840x2160(八百萬像素的超高清4k,往上再4倍就是8k超高清)
其實含480p以下為標清,480p以上為高清,經典的有720p、1080i、1080p,1080p又稱全高清,1080p以上都為超清。(i隔行掃描多用於電視機信號,p逐行掃描)
幀率:
在1秒鍾時間里傳輸的圖片的幀數,影響畫面流暢度,常說的24幀電影、在游戲上的FPS,都是這個概念,通常手機上20幀左右即可。
ps:Gop是指多少秒一個I幀。
碼率:
右鍵看一個視頻的屬性,詳細里有一個總比特率,計算方式是:
【碼率】(kbps)=【文件大小】(字節 )X8 /【時間】(秒)

我們接收的到的圖像信號一般是H.264格式的,移動設備接收到后,需要先解碼成原始的YUV碼流,然后又轉換成RGB碼流,將一幀一幀的RGB數據放到顯存上才能顯示出圖像。而YUV到RGB的轉換,很多ARM芯片上都有了。

RTSP
RTSP(Real Time Streaming Protocol), 基於文本的多媒體播放控制協議,是一個實時流傳輸協議

----它是TCP/IP協議體系中的一個應用層協議
----它是對流媒體進行控制 的網絡控制協議,可以對流媒體提供諸如播放、暫停、快進、停止等操作,它負責定義具體的控制消息、操作方法、狀態碼等,此外還描述了與RTP間的交互操作。
----但是,實時流的傳輸並不是它負責,而是交給RTP、RTCP協議。
----RTSP發送的指令一般通過TCP進行傳輸,以保證服務端會收到。
----而在RTP/RTCP協議下實時流的傳輸 通過UDP傳輸,以保證數據的實時性。在實際情況下,是允許實時流少量的丟幀。
----RTSP為取流協議,取到碼流后需要解碼顯示

RTSP作為一個應用層協議,提供了一個可供擴展的框架,使得流媒體的受控和點播變得可能,它主要用來控制具有實時特性的數據的發送,但其本身並不用於傳送流媒體數據,而必須依賴下層傳輸協議(如RTP/RTCP)所提供的服務來完成流媒體數據的傳送。RTSP負責定義具體的控制信息、操作方法、狀態碼,以及描述與RTP之間的交互操作。RTSP媒體服務協議框架如下:

 

 

RTSP傳輸的一般是H264、TS、MP4格式的流,其傳輸一般需要2~3個通道,命令和數據通道分離。使用RTSP協議傳輸流媒體數據需要有專門的媒體播放器和媒體服務器,也就是需要支持RTSP協議的客戶端和服務器。

 

 

 

 

 

 

 


個人總結:
用海康威視的攝像實時讀取視頻,讀取視頻的格式是YV12格式,攝像機進行壓縮算法處理后的H264視頻流通過RTSP協議傳向網絡應用層,用戶拿到的數據是H264格式,需要用ffmpeg軟解碼或者arm9等硬解碼,得到原來的YV12格式的圖像視頻,最后經過opencv處理得到RGB格式顯示到屏幕。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM