H.264編碼基本原理
為達到良好的編碼效率及性能,H.264編碼器採用的仍是變換和預測的混合編碼法,其完整的編碼過程如圖所示。
在H.264編碼標準中,輸入的幀或場Fn是以宏塊為單位進行處理的,採樣後的視頻圖像都被分成16*16的宏塊每個宏塊包括1個亮度子塊和2個8*8的色度子塊。在分割宏塊後,宏塊按照相應次序進行編碼器進行壓縮編碼。在H.264編碼過程中,首先按照根據編碼速率、編碼質量等標準指定的演算法,選擇按照幀內編碼或幀間預測編碼的方法進行宏塊壓縮編碼。
若採用幀內預測編碼,其預測值 PRED(圖中用P 表示)是由當前片中前面已編碼的圖像得到的;若採用幀間預測編碼,則預測值PRED是由當前幀前後已編碼的圖像經過運動補償得到的。其中參考圖像用 F』n-1表示。為了提高預測精度,從而提高壓縮比,實際的參考圖像可在過去或未來(指顯示次序上)已編碼解碼重建和濾波的幀中進行選擇。
在通過相應演算法得到當前宏塊(子宏塊)的預測值後,將預測值PRED 和當前宏塊的色度或亮度值相減,產生一個殘差塊Dn,經宏塊DCT變換、量化後將產生一組量化後的亮度或色度變換係數X,再經過熵編碼過程,加上解碼所需的一些信息(如預測模式量化參數、運動矢量等),將其一起組成一個壓縮後的NAL碼流,經NAL(網路自適應層)供傳輸和存儲使用。如上所述,為了提供下一步預測要用的參考圖像,編碼器必須有重建圖像的功能,對當前宏塊進行重建。因此必須使殘差圖像經反量化、反DCT變換後得到的 Dn』與預測值P 相加,得到 uFn』(未經濾波的幀)。為了去除編碼解碼環路中產生的雜訊,為了提高參考幀的圖像質量以及提高壓縮圖像性能,設置了一個環路濾波器對相應圖像進行濾波處理,濾波後的輸出Fn』即重建圖像可用作參考圖像。

H.264/AVC是目前業界應用為廣泛的視頻壓縮編碼標準,包含了先進而且較為成熟的視頻編碼技術。本課程將從原理、標準和實現等多個角度,詳細講述了H.264/AVC視頻編碼標準的整體架構與技術細節,不但講解了H.264/AVC標準協議文檔中的內容,還通過實際的H.264碼流分析/解碼程序的開發來幫助觀眾更深入地理解H.264編碼標準的原理。
H.264數據流格式
H264碼流的兩種打包方式,一種為Annex-b byte stream format的格式,位元組流格式,這個是絕大部分編碼器的默認輸出格式,就是每個幀的開頭的3~4個位元組是H264的start_code,0x00000001或者0x000001,即NALU數據+開始前綴(00000001或000001),針對H.320電話會議。另一種是原始的NAL打包格式,就是開始的若干位元組(1,2,4位元組)是NAL的長度,而不是start_code,此時必須藉助某個全局的數據來獲得編碼器的profile,level,PPS,SPS等信息才可以解碼。
RTP格式:NALU數據+20個位元組的類似的並不符合RTP協議的RTP頭。針對IP網路的RTP打包方式。為原始的NAL打包格式,就是開始的若干位元組(1,2,4位元組)是NAL的長度,而不是start_code,此時必須藉助某個全局的數據來獲得編碼器的profile,level,PPS,SPS等信息才可以解碼。
H.264協議只規定了位元組流格式,沒有規定 RTP 格式。可能也是因為這個原因,JM 的 RTP 格式沒有被用到任何場合場合中,成為了擺設。
一共有兩種起始碼:3位元組的0x000001和4位元組的0x00000001
3位元組的0x000001隻有一種場合下使用,就是一個完整的幀被編為多個slice的時候,包含這些slice的nalu使用3位元組起始碼。其餘場合都是4位元組的。
H.264 的兩種碼流格式:
GetAnnexbNALU 處理位元組流格式的碼流
GetRTPNALU 處理 RTP 格式碼流
位元組流格式的碼流主要用於存儲,例如製作 DVD(當然現在的 DVD 還不是用 H.264)
RTP 格式碼流主要用於網路傳送,例如在線看電影
最簡單RTP包包括RTP包頭、H.264擴展頭和H.264碼流
碼流在JM里會首先打包到NALU里去,之後要把NALU中的相關信息變成H.264擴展頭,然後再加上一個RTP包頭,就變成了一個RTP包。
H.264擴展頭就一個位元組,三個信息。
RTP包頭12和16位元組兩種,JM都先讀四個位元組,再讀四個位元組時間戳,再就是buffer,之後還有四個位元組的信息源標識符,一共12位元組才對。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/224835.html