九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
iOS RTMP 視頻直播開發(fā)筆記(3)

本節(jié)內容整理自:H264–1–編碼原理以及I幀B幀P幀,作者:dxpqxb

H264是一種高壓縮率的編碼標準,如何壓縮嘞?一般的視頻采集都是25幀/秒,也就是每秒截圖25次,其實每一張圖片的內容都相差不大,壓縮的辦法就是利用算法,只將每張圖片變動差異化的部分保存下來,這樣視頻文件就小多了。

三種幀

在H264協(xié)議里定義了三種幀,完整編碼的幀叫I幀,參考之前的I幀生成的只包含差異部分編碼的幀叫P幀,還有一種參考前后的幀編碼的幀叫B幀

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

I幀:幀內編碼幀 ,I幀表示關鍵幀,你可以理解為這一幀畫面的完整保留;解碼時只需要本幀數據就可以完成(因為包含完整畫面)

P幀:前向預測編碼幀。P幀表示的是這一幀跟之前的一個關鍵幀(或P幀)的差別,解碼時需要用之前緩存的畫面疊加上本幀定義的差別,生成最終畫面。(也就是差別幀,P幀沒有完整畫面數據,只有與前一幀的畫面差別的數據)

B幀:雙向預測內插編碼幀。B幀是雙向差別幀,也就是B幀記錄的是本幀與前后幀的差別(具體比較復雜,有4種情況,但我這樣說簡單些),換言之,要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之后的畫面,通過前后畫面的與本幀數據的疊加取得最終的畫面。B幀壓縮率高,但是解碼時CPU會比較累。

序列的概念

在H264中圖像以序列為單位進行組織,一個序列是一段圖像編碼后的數據流,以I幀開始,到下一個I幀結束。

一個序列的第一個圖像叫做 IDR 圖像(立即刷新圖像),IDR 圖像都是 I 幀圖像。H.264 引入 IDR 圖像是為了解碼的重同步,當解碼器解碼到 IDR 圖像時,立即將參考幀隊列清空,將已解碼的數據全部輸出或拋棄,重新查找參數集,開始一個新的序列。這樣,如果前一個序列出現重大錯誤,在這里可以獲得重新同步的機會。IDR圖像之后的圖像永遠不會使用IDR之前的圖像的數據來解碼。

一個序列就是一段內容差異不太大的圖像編碼后生成的一串數據流。當運動變化比較少時,一個序列可以很長,因為運動變化少就代表圖像畫面的內容變動很小,所以就可以編一個I幀,然后一直P幀、B幀了。當運動變化多時,可能一個序列就比較短了,比如就包含一個I幀和3、4個P幀。

片、場、幀、片的概念

H264結構中,一個視頻圖像編碼后的數據叫做一幀,一幀由一個片(slice)或多個片組成,一個片由一個或多個宏塊(MB)組成,一個宏塊由16×16的yuv數據組成。宏塊作為H264編碼的基本單位。

1幀 = n個片
1片 = n個宏塊
1宏塊 = 16x16yuv數據

場和幀:視頻的一場或一幀可用來產生一個編碼圖像。在電視中,為減少大面積閃爍現象,把一幀分成兩個隔行的場。

宏塊:一個編碼圖像通常劃分成若干宏塊組成,一個宏塊由一個16×16亮度像素和附加的一個8×8 Cb和一個8×8 Cr彩色像素塊組成。

片:每個圖象中,若干宏塊被排列成片的形式。片分為I片、B片、P片和其他一些片。

  • I片只包含I宏塊,P片可包含P和I宏塊,而B片可包含B和I宏塊。
  • I宏塊利用從當前片中已解碼的像素作為參考進行幀內預測。
  • P宏塊利用前面已編碼圖象作為參考圖象進行幀內預測。
  • B宏塊則利用雙向的參考圖象(前一幀和后一幀)進行幀內預測。

數據結構

H264編碼后的數據分為兩層

  1. VCL(video coding layer)視頻編碼層:它是對核心算法引擎,塊,宏塊及片的語法級別的定義,最終輸出編碼完的數據 SODB。
  2. NAL(network abstraction layer)網絡提取層:定義片級以上的語法級別(如序列參數集和圖像參數集,針對網絡傳輸),同時支持以下功能:獨立片解碼,起始碼唯一保證,SEI以及流格式編碼數據傳送,NAL層將SODB打包成RBSP然后加上NAL頭,組成一個NALU(NAL單元)。

分層的好處顯而易見,對于RTMP傳輸數據,我們只需了解NAL層就足夠了。

H264在網絡傳輸的是NALU,NALU的結構是:NAL頭+RBSP,如圖所示:

從前面的分析我們知道,VCL層出來的是編碼完的視頻幀數據,這些幀可能是I、B、P幀,而且這些幀可能屬于不同的序列,再者同一個序列還有相對應的一套序列參數集和圖片參數集等等,所以要完成視頻的解碼,不僅需要傳輸VCL層編碼出來的視頻幀數據,還需要傳輸序列參數集、圖像參數集等數據。

NALU頭用來標識后面的RBSP是什么類型的數據,他是否會被其他幀參考以及網絡傳輸是否有錯誤。

RBSP用來存放下表中的一種:

RBSP類型所寫描述
參數集PS序列的全局信息,如圖像尺寸,視頻格式等
增強信息SEI視頻序列解碼的增強信息
圖像界定符PD視頻圖像的邊界
編碼片SLICE編碼片的頭信息和數據
數據分割DP片層的數據,用于錯誤恢復解碼
序列結束符表明一個序列的結束,下一個圖像為IDR圖像
流結束符表明該流中已沒有圖像
填充數據亞元數據,用于填充字節(jié)

其中參數集包括:序列參數集 SPS圖像參數集 PPS

  • SPS 包含的是針對一連續(xù)編碼視頻序列的參數,如標識符 seq_parameter_set_id、幀數及 POC 的約束、參考幀數目、解碼圖像尺寸和幀場編碼模式選擇標識等等。
  • PPS 對應的是一個序列中某一幅圖像或者某幾幅圖像,其參數如標識符 pic_parameter_set_id、可選的 seq_parameter_set_id、熵編碼模式選擇標識、片組數目、初始量化參數和去方塊濾波系數調整標識等等。

這里 SPS 和 PPS 的含義可以不用深入追究,需要明白的是,在視頻發(fā)送時,這兩個參數需要作為第一幀發(fā)送出去,這樣后邊的I、B、P 幀才能順利解碼播放。

數據分割:組成片的編碼數據存放在 3 個獨立的 DP(數據分割,A、B、C)中,各自包含一個編碼片的子集。分割A包含片頭和片中每個宏塊頭數據。分割B包含幀內和 SI 片宏塊的編碼殘差數據。分割 C包含幀間宏塊的編碼殘差數據。每個分割可放在獨立的 NAL 單元并獨立傳輸。(這個還沒搞明白,先知道有這么回事)

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
入門理解H264編碼
H.264的句法和語義 - H.264 - zhengwenwei
H264--語法及結構--2
視頻編碼標準匯總及比較
H.264句法和語法總結(二)NAL層句法
(推薦閱讀)H264, H265硬件編解碼基礎及碼流分析
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服