天天看点

四. 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)

继续阅读