日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

H.264 AVC 编解码标准

發(fā)布時間:2023/12/14 c/c++ 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 H.264 AVC 编解码标准 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、H264 概述
H.264,通常也被稱之為H.264/AVC(或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)

  • H.264視頻編解碼的意義
    H.264的出現(xiàn)就是為了創(chuàng)建比以前的視頻壓縮標(biāo)準(zhǔn)更高效的壓縮標(biāo)準(zhǔn),使用更好高效的視頻壓縮算法來壓縮視頻的占用空間,提高存儲和傳輸?shù)男?#xff0c;在獲得有效的壓縮效果的同時,使得壓縮過程引起的失真最小。MPEG-4 AVC和H.264 是目前較為主流的編碼標(biāo)準(zhǔn)。主要定義了兩方面的內(nèi)容:視頻數(shù)據(jù)壓縮形式的編碼表示和用重建視頻信息的語法來描述編碼方法。目的是為了保證兼容的編碼器能夠成功的交互工作,同時也允許制造廠商自由的開發(fā)具有競爭力的創(chuàng)新產(chǎn)品。制造廠商只需要注意的事情就是能夠獲得和標(biāo)準(zhǔn)中采用的方法同樣的結(jié)果。
  • H.264編解碼的理論依據(jù)
    提到H.264編解碼,我們先簡單說一下視頻壓縮算法。視頻壓縮算法是通過去除時間、空間的冗余來實現(xiàn)的。在一段時間內(nèi),相鄰的圖像的像素、亮度與色溫的差別很小,我們沒比要對每一個圖像進行完成的編碼,而是可以選取這段時間的第一張圖(也就是第一幀)作為完整的編碼,而后面一段時間的圖像只需要記錄與第一張圖(第一幀)在像素、亮度、色溫等方面的差別數(shù)據(jù)即可。通過去除不同類型的冗余,可以明顯的壓縮數(shù)據(jù),代價就是一部分信息失真。
    H.264編解碼在整個視頻數(shù)據(jù)處理過程中,屬于視頻數(shù)據(jù)處理的編解碼層,具體的可以查看本人總結(jié)的編解碼流程圖中的解碼部分:Thinking-in-AV/音視頻編解碼/音視頻解碼流程概覽.png。編碼部分將流程反過來進行理解即可。
    二、H.264相關(guān)概念
  • H.264 的基本單位
    在H.264定義的結(jié)構(gòu)中,一個視頻圖像編碼后的數(shù)據(jù)叫做一幀。 一幀是由一個或多個片(slice)組成的,一個片是由一個或多個宏塊(MB)組成的(宏塊是H264編碼的基本單位),一個宏塊是由16x16的yuv數(shù)據(jù)組成的。
  • 幀類型
    在H.264的協(xié)議中,定義了三類幀,分別是I幀、B幀和P幀。其中I幀就是之前我們所說的一個完整的圖像幀,而B幀和P幀對應(yīng)的就是之前說的不對全部圖像做編碼的幀。B幀和P幀的差別在于,P幀是參考之前的I幀生成的,B幀是參考前后的圖像幀生成的。
    在視頻畫面播放過程中,若I幀丟失了,則后面的P幀也就隨著解不出來,就會出現(xiàn)視頻畫面黑屏的現(xiàn)象;若P幀丟失了,則視頻畫面會出現(xiàn)花屏、馬賽克等現(xiàn)象。
  • GOP(畫面組)
    一個GOP(Group Of Picture)就是一組連續(xù)的畫面。GOP結(jié)構(gòu)一般有兩個數(shù)字,其中一個是GOP的長度(即兩個I幀之間的B幀和P幀數(shù)),另一個數(shù)字為I幀和P幀之間的間隔距離(即B幀數(shù))。在一個GOP內(nèi)I幀解碼不依賴任何的其它幀,P幀解碼則依賴前面的I幀或P幀,B幀解碼依賴前面的I幀或P幀及其后最近的一個P幀。
    注意:在碼率不變的前提下,GOP值越大,P、B幀的數(shù)量會越多,平均每個I、P、B幀所占用的字節(jié)數(shù)就越多,也就更容易獲取較好的圖像質(zhì)量;Reference越大,B幀的數(shù)量越多,同理也更容易獲得較好的圖像質(zhì)量。但是通過提高GOP值來提高圖像質(zhì)量是有限度的。H264編碼器在遇到場景切換的情況時,會自動強制插入一個I幀,此時實際的GOP值被縮短了。另一方面,在一個GOP中,P、B幀是由I幀預(yù)測得到的,當(dāng)I幀的圖像質(zhì)量比較差時,會影響到一個GOP中后續(xù)P、B幀的圖像質(zhì)量,直到下一個GOP開始才有可能得以恢復(fù),所以GOP值也不宜設(shè)置過大。同時,由于P、B幀的復(fù)雜度大于I幀,所以過多的P、B幀會影響編碼效率,使編碼效率降低。另外,過長的GOP還會影響Seek操作的響應(yīng)速度,由于P、B幀是由前面的I或P幀預(yù)測得到的,所以Seek操作需要直接定位,解碼某一個P或B幀時,需要先解碼得到本GOP內(nèi)的I幀及之前的N個預(yù)測幀才可以,GOP值越長,需要解碼的預(yù)測幀就越多,seek響應(yīng)的時間也越長。
  • IDR 幀
    GOP中的I幀又分為普通I幀和IDR幀,IDR幀就是GOP的第一個I幀,這樣區(qū)分視為了方便控制編碼和解碼的流程。 IDR幀一定是I幀,但是I幀不一定是IDR幀。
    IDR幀因為附帶SPS、PPS等信息,解碼器在收到 IDR?幀時,需要做的工作就是:把所有的?PPS?和?SPS?參數(shù)進行更新。
    可以看出來IDR幀的作用是讓解碼器立刻刷新相關(guān)數(shù)據(jù)信息,避免出現(xiàn)較大的解碼錯誤問題。
    引入IDR幀機制是為了解碼的重同步,當(dāng)解碼器解碼到 IDR幀時,立即將參考幀隊列清空,將已解碼的數(shù)據(jù)全部輸出或拋棄,重新查找參數(shù)集,開始一個新的序列。這樣,如果前一個序列出現(xiàn)錯誤,在這里可以獲得重新同步的機會。IDR幀之后的幀永遠(yuǎn)不會使用IDR幀之前的數(shù)據(jù)來解碼。
    三、H.264 壓縮方式
  • H.264 壓縮算法
    H264 的核心壓縮算法是幀內(nèi)壓縮和幀間壓縮,幀內(nèi)壓縮是生成I幀的算法,幀間壓縮是生成B幀和P幀的算法。
    幀內(nèi)(Intraframe)壓縮的原理是:當(dāng)壓縮一幀圖像時,僅考慮本幀的數(shù)據(jù)而不考慮相鄰幀之間的冗余信息,一般采用有損壓縮算法,由于幀內(nèi)壓縮是編碼一個完整的圖像,所以可以獨立的解碼、顯示。幀內(nèi)壓縮率一般不高。
    幀間(Interframe)壓縮的原理是:相鄰幾幀的數(shù)據(jù)有很大的相關(guān)性,或者說前后兩幀信息變化很小的特點。連續(xù)的視頻其相鄰幀之間具有冗余信息,根據(jù)這一特性,壓縮相鄰幀之間的冗余量就可以進一步提高壓縮量,減小壓縮比。
    而幀間壓縮也稱為時間壓縮(Temporalcompression),它通過比較時間軸上不同幀之間的數(shù)據(jù)進行壓縮。幀間壓縮是無損的,它通過比較本幀與相鄰幀之間的差異,僅記錄本幀與其相鄰幀的差值,這樣可以大大減少數(shù)據(jù)量。
  • H.264壓縮方式說明
    H.264壓縮視頻數(shù)據(jù)時的具體方式如下:
    a). 分組,也就是將一系列變換不大的圖像歸為一個組,即一個GOP;
    b). 定義幀,將每組的圖像幀歸分為I幀、P幀和B幀三種類型;
    c). 預(yù)測幀, 以I幀做為基礎(chǔ)幀,以I幀預(yù)測P幀,再由I幀和P幀預(yù)測B幀;
    d). 數(shù)據(jù)傳輸, 最后將I幀數(shù)據(jù)與預(yù)測的差值信息進行存儲和傳輸。
    四、H.264 分層結(jié)構(gòu)
    H.264的主要目標(biāo)是為了有高的視頻壓縮比和良好的網(wǎng)絡(luò)親和性,H264將系統(tǒng)框架分為兩個層面,分別是視頻編碼層面(VCL)和網(wǎng)絡(luò)抽象層面(NAL)。
  • VLC層(Video Coding Layer)
    VLC層:包括核心壓縮引擎和塊,宏塊和片的語法級別定義,設(shè)計目標(biāo)是盡可能地獨立于網(wǎng)絡(luò)進行高效的編碼;
  • NAL層(Network Abstraction Layer)
    NAL層:負(fù)責(zé)將VCL產(chǎn)生的比特字符串適配到各種各樣的網(wǎng)絡(luò)和多元環(huán)境中,覆蓋了所有片級以上的語法級別。
  • NALU (NAL Unit)
    H.264原始碼流(裸流)是由一個接一個NALU組成,結(jié)構(gòu)如下圖,一個NALU = 一組對應(yīng)于視頻編碼的NALU頭部信息 + 一個原始字節(jié)序列負(fù)荷(RBSP,Raw Byte Sequence Payload)。
  • 一個原始的H.264 NALU 單元常由 [StartCode] [NALU Header] [NALU Payload] 三部分組成。
    3.1 Start Code
    Start Code 用于標(biāo)示這是一個NALU 單元的開始,必須是”00 00 00 01” 或”00 00 01”。
    3.2. NAL Header
    NAL Header由三部分組成,forbidden_bit(1bit),nal_reference_bit(2bits)(優(yōu)先級),nal_unit_type(5bits)(類型)。
    3.3?RBSP(Raw Byte Sequence Payload))
    下圖是RBSP的序列的樣例及相關(guān)類型參數(shù)的描述表:

    SPS是序列參數(shù)集,包含的是針對一連續(xù)編碼視頻序列的參數(shù),如標(biāo)識符 seq_parameter_set_id、幀數(shù)及 POC 的約束、參考幀數(shù)目、解碼圖像尺寸和幀場編碼模式選擇標(biāo)識等等。?
    PPS是圖像參數(shù)集,對應(yīng)的是一個序列中某一幅圖像或者某幾幅圖像,其參數(shù)如標(biāo)識符 pic_parameter_set_id、可選的 seq_parameter_set_id、熵編碼模式選擇標(biāo)識、片組數(shù)目、初始量化參數(shù)和去方塊濾波系數(shù)調(diào)整標(biāo)識等等。
    參數(shù)集是一個獨立的數(shù)據(jù)單位,不依賴于參數(shù)集之外的其他句法元素。一個參數(shù)集不對應(yīng)某一個特定的圖像或者序列,同一個序列參數(shù)集可以被一個或者多個圖像參數(shù)集引用。同理,一個圖像參數(shù)集也可以被一個或者多個圖像引用。只有在編碼器認(rèn)為需要更新參數(shù)集的內(nèi)容時,才會發(fā)出新的參數(shù)集。?
    五、H.264 局限性
    隨著數(shù)字視頻應(yīng)用產(chǎn)業(yè)鏈的快速發(fā)展,視頻應(yīng)用向以下幾個方向發(fā)展的趨勢愈加明顯:
    (1)?高清晰度(HigherDefinition):數(shù)字視頻的應(yīng)用格式從720P向1080P全面升級,而且現(xiàn)在4K的數(shù)字視頻格式也已經(jīng)成為常見。
    (2)?高幀率(Higherframe rate ):數(shù)字視頻幀率從30fps向60fps、120fps甚至240fps的應(yīng)用場景升級;
    (3)?高壓縮率(HigherCompression rate ):傳輸帶寬和存儲空間一直是視頻應(yīng)用中最為關(guān)鍵的資源,因此,在有限的空間和管道中獲得最佳的視頻體驗一直是用戶的不懈追求。
    但是面對視頻應(yīng)用不斷向高清晰度、高幀率、高壓縮率方向發(fā)展的趨勢,當(dāng)前主流的視頻壓縮標(biāo)準(zhǔn)協(xié)議H.264的局限性不斷凸顯。主要體現(xiàn)在:
    (1)?宏塊個數(shù)的爆發(fā)式增長,會導(dǎo)致用于編碼宏塊的預(yù)測模式、運動矢量、參考幀索引和量化級等宏塊級參數(shù)信息所占用的碼字過多,用于編碼殘差部分的碼字明顯減少。
    (2)?由于分辨率的大大增加,單個宏塊所表示的圖像內(nèi)容的信息大大減少,這將導(dǎo)致相鄰的4 x 4或8 x 8塊變換后的低頻系數(shù)相似程度也大大提高,導(dǎo)致出現(xiàn)大量的冗余。
    (3)?由于分辨率的大大增加,表示同一個運動的運動矢量的幅值將大大增加,H.264中采用一個運動矢量預(yù)測值,對運動矢量差編碼使用的是哥倫布指數(shù)編碼,該編碼方式的特點是數(shù)值越小使用的比特數(shù)越少。因此,隨著運動矢量幅值的大幅增加,H.264中用來對運動矢量進行預(yù)測以及編碼的方法壓縮率將逐漸降低。
    (4) H.264的一些關(guān)鍵算法例如采用CAVLC和CABAC兩種基于上下文的熵編碼方法、deblock濾波等都要求串行編碼,并行度比較低。針對GPU/DSP/FPGA/ASIC等并行化程度非常高的CPU,H.264的這種串行化處理越來越成為制約運算性能的瓶頸。
    于是面向更高清晰度、更高幀率、更高壓縮率視頻應(yīng)用的HEVC(H.265)協(xié)議標(biāo)準(zhǔn)應(yīng)運而生。H.265在H.264標(biāo)準(zhǔn)2~4倍的復(fù)雜度基礎(chǔ)上,將壓縮效率提升一倍以上。
    (注意:實際使用過程中,不能忽視265專利費用這個重要的問題。專利問題參考:H.265成超級提款機 一場圍繞專利授權(quán)的戰(zhàn)爭已經(jīng)爆發(fā))

    總結(jié)

    以上是生活随笔為你收集整理的H.264 AVC 编解码标准的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。