1. 程式人生 > >H.264視頻編解碼器——參考軟件JM的下載與編解碼

H.264視頻編解碼器——參考軟件JM的下載與編解碼

cfg 源文件 ict 兩個 control href eid inpu byte

H.264視頻編解碼器——參考軟件JM的下載與編解碼

一、下載JM工程:

JM是H.264標準制定團隊所認可的官方參考軟件。網址如下

http://iphome.hhi.de/suehring/tml/

從頁面中可找到相應的工程源碼,本次選擇JM 8.6版本,此版本為經典版本:

http://iphome.hhi.de/suehring/tml/download/old_jm/

二、配置編碼環境:

下載後打開工程目錄中tml.sln文件,VS中會有三個工程,其中rtpdump沒用,刪掉。另外兩個ldecod和lencod分別為解碼和編碼工程。

首先將lencod右鍵-設為啟動項目,並將其“屬性->常規->輸出目錄”

修改為$(ProjectDir)bin“屬性->調試->工作目錄”也修改為$(ProjectDir)bin
技術分享圖片
編譯lencod工程 —— 右鍵lencod -> 僅用於項目 -> 僅重新生成lencod
之後在bin目錄下可找到編譯生成的文件。

在工作目錄bin中,可以找到三個config配置文件,表示三個profile的配置,本次使用最簡單的baseline配置文件進行修改。復制一份,並將文件名改為encoder.cfg,文件名必須是這個才能作為工程中默認參數,否則還要修改相關配置。

  • encoder_main.cfg
  • encoder_baseline.cfg
  • encoder_extended.cfg

其中配置文件部分內容如下,修改的地方為INputFile(編碼文件)、FramesToBeEncoded(編碼幀數),IntraPeriod(所有幀都設為I針)

##########################################################################################
# Files
##########################################################################################
InputFile             = "akiyo_qcif.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     = 10      # Number of frames to be coded
FrameRate             = 30     # Frame Rate per second (1-100)
SourceWidth           = 176    # 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  # Period of I-Frames (0=only first)             ### if 1 -> make all the frames are I_frames
IDRIntraEnable        =  0  # Force IDR Intra  (0=disable 1=enable)         ### if 1 -> make all I frames to IDR關鍵幀
.... ...

配置好後,運行工程,運行過程中cmd頁面如下所示:
技術分享圖片

之後去看工作目錄bin中生成的文件:
test.264為生成的H.264碼流文件,trace_enc.txt是生成的日誌,由於是關閉的,所以沒有內容,test_rec.yuv為編碼過程中重建的視頻圖像,可將此文件與原始視頻作比較,即可看出失真所在。

三、配置解碼環境:

首先將ldecod設為啟動項目,編譯ldecod項目(右鍵->僅用於項目->僅重新生成ldecod),同樣修改工程配置文件:
“屬性->常規->輸出目錄”修改為$(ProjectDir)bin“屬性->調試->工作目錄”也修改為$(ProjectDir)bin
技術分享圖片

工作目錄中 decoder.cfg為解碼配置文件,參數如下:

test.264                 ........H.264 coded bitstream    需要解碼的碼流文件
test_dec.yuv             ........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

需要將此配置文件填寫到,ldecod屬性->調試->命令參數中:decoder.cfg。
之後直接運行程序,即可得到解碼的文件,運行過程cmd頁面:
技術分享圖片
工作目錄中test_dec.yuv即為解碼後輸出文件,此文件應與源文件相同。

至此,JM工程下載,以及簡單編解碼配置、運行完成。

H.264視頻編解碼器——參考軟件JM的下載與編解碼