天天看點

四. H.264視訊編解碼器(X264和JM)及參考軟體JM的下載下傳與編解碼JM下載下傳

  實H.264是一種視訊壓縮标準,其隻規定了符合标準的碼流的格式,以及碼流中各個文法元素的解析方法。

  H.264标準并未規定編碼器的實作或流程,産生了一些比較著名的開源H.264編解碼器工程。其中H.264編碼器中最著名的兩個當屬JM和X264,這二者都屬于H.264編碼标準的一種實作形式。

  • JM
    • JM通常被認為是H.264标準制定團隊所認可的官方參考軟體;
    • 實作了H.264标準的全部特征;
    • 運算過程較為複雜,而且沒有采用彙編優化等加速方法,是以運作速度較慢,很難達到實時編解碼。
    • 常用于編解碼技術的科學研究領域
  • X264
    • X264是另一個著名的H.264開源視訊編碼器,由開源組織VideoLan開發制定。
    • X264是目前企業界應用最為廣泛的開源編碼器
    • 相對于JM進行了大量的優化與簡化,使其運作效率大幅提高,主要有對編碼代價計算方法的簡化以及添加了MMX、SSE彙編優化等部分;
    • 實時性高、可用性高

X264源代碼路徑: https://www.videolan.org/developers/x264.html

JM下載下傳

  • JM的源代碼: http://iphome.hhi.de/suehring/tml/download/ -> old_jm/->jm8.6.zip(使用最經典的學習,下載下傳之後解壓通過vs打開)

1、下載下傳方式

四. H.264視訊編解碼器(X264和JM)及參考軟體JM的下載下傳與編解碼JM下載下傳

(2)

四. H.264視訊編解碼器(X264和JM)及參考軟體JM的下載下傳與編解碼JM下載下傳

(3)下載下傳8.6

四. H.264視訊編解碼器(X264和JM)及參考軟體JM的下載下傳與編解碼JM下載下傳

(4)解壓之後使用visual studio打開

(5)删除不使用的工程rtpdump,将lencod設為啟動項

(6)修改生成的路徑到目前目錄下的bin目錄:右鍵->屬性->輸出目錄->編輯

(7)将輸出目錄路徑拷貝到調試的工作目錄

2、編碼YUV

  • 編碼工程設定為啟動項
  • 修改編碼需要的配置檔案:encoder_baseline.cfg->encoder.cfg(使用encoder.cfg,工程運作時會自動找這個檔案)
#<39905>編碼所需要的配置資訊
##########################################################################################
# Files
##########################################################################################
InputFile             = "foreman_part_qcif.yuv"       # <39905>輸入的YUV序列Input sequence, YUV 4:2:0
InputHeaderLength     = 0      # If the inputfile has a header, state it's length in byte here 
StartFrame            = 0      # Start frame for encoding. (0-N)
FramesToBeEncoded     = 3      # <39905>需要編碼的幀數Number of frames to be coded
FrameRate             = 30	   # Frame Rate per second (1-100)
SourceWidth           = 176    # <39905>輸入視訊的寬高Image width in Pels, must be multiple of 16
SourceHeight          = 144    # Image height in Pels, must be multiple of 16
TraceFile             = "trace_enc.txt"
ReconFile             = "test_rec.yuv"
OutputFile            = "test.264"


##########################################################################################
# Encoder Control
##########################################################################################
ProfileIDC            = 66  # Profile IDC (66=baseline, 77=main, 88=extended)
LevelIDC              = 30  # Level IDC   (e.g. 20 = level 2.0)

IntraPeriod           =  1  # <39905>1:輸出僅I幀的碼流Period of I-Frames (0=only first)
IDRIntraEnable	      =  0  # <39905> 1:強制所有I幀都是IDR關鍵幀Force IDR Intra  (0=disable 1=enable)
           
  • 生成lencod項目:右鍵->僅用于項目->僅生成lencod
  • F5生成:
    • test.264:表示生成的264檔案
    • test_rec.yuv:編碼過程中重建的視訊圖像(和最初的比較,可以看出失真所在)

3、解碼

  • 解碼配置檔案:decoder.cfg
test.264                 ........<39905>解碼的碼流檔案H.264 coded bitstream
test_dec.yuv             ........<39905>輸出檔案Output file, YUV 4:2:0 format
test_rec.yuv             ........Ref sequence (for SNR)
10                       ........Decoded Picture Buffer size
0                        ........NAL mode (0=Annex B, 1: RTP packets)
0                        ........SNR computation offset
1                        ........Poc Scale (1 or 2)
500000                   ........Rate_Decoder
104000                   ........B_decoder
73000                    ........F_decoder
leakybucketparam.cfg     ........LeakyBucket Params

           
  • 生成:test_dec.yuv(和編碼時生成的中間YUV一樣,表示無失真test_rec.yuv)

繼續閱讀