一、下载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工程下载,以及简单编解码配置、运行完成。

【视频编解码·学习笔记】3. H.264视频编解码工程JM的下载与编解码的更多相关文章

  1. 【视频编解码·学习笔记】11. 提取SPS信息程序

    一.准备工作: 回到之前SimpleH264Analyzer程序,找到SPS信息,并对其做解析 调整项目目录结构: 修改Global.h文件中代码,添加新数据类型UINT16,之前编写的工程中,UIN ...

  2. 【视频编解码·学习笔记】2. H.264简介

    一.H.264视频编码标准 H.264视频编码标准是ITU-T与MPEG合作产生的又一巨大成果,自颁布之日起就在业界产生了巨大影响.严格地讲,H.264标准是属于MPEG-4家族的一部分,即MPEG- ...

  3. 我的Android进阶之旅------>Android中编解码学习笔记

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  4. H.264视频在android手机端的解码与播放(转)

    随着无线网络和智能手机的发展,智能手机与人们日常生活联系越来越紧密,娱乐.商务应用.金融应用.交通出行各种功能的软件大批涌现,使得人们的生活丰富多彩.快捷便利,也让它成为人们生活中不可取代的一部分.其 ...

  5. H.264视频的RTP荷载格式

    Status of This Memo This document specifies an Internet standards track protocol for the   Internet ...

  6. 【转】实现RTP协议的H.264视频传输系统

    1.  引言       随着信息产业的发展,人们对信息资源的要求已经逐渐由文字和图片过渡到音频和视频,并越来越强调获取资源的实时性和互动性.但人们又面临着另外一种不可避免的尴尬,就是在网络上看到生动 ...

  7. H.264 RTPpayload 格式------ H.264 视频 RTP 负载格式(包含AAC部分解析)

    H.264 RTPpayload 格式------ H.264 视频 RTP 负载格式 1. 网络抽象层单元类型 (NALU) NALU 头由一个字节组成, 它的语法如下: +------------ ...

  8. H.264 RTPpayload 格式------ H.264 视频 RTP 负载格式

    H.264 RTPpayload 格式------ H.264 视频 RTP 负载格式 1. 网络抽象层单元类型 (NALU) NALU 头由一个字节组成, 它的语法如下: +------------ ...

  9. 视音频数据处理入门:H.264视频码流解析

    ===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB.YUV像素数据处理 视音频数据处理 ...

随机推荐

  1. Django--admin源码流程

    admin.py   from django.contrib import admin from . import models """ 通过原生的django admi ...

  2. lbp特征提取(等价模式)

    LBP等价模式 考察LBP算子的定义可知,一个LBP算子可以产生多种二进制模式(p个采样点)如:3x3邻域有p=8个采样点,则可得到2^8=256种二进制模式:5x5邻域有p=24个采样点,则可得到2 ...

  3. python爬虫入门-开发环境与小例子

    python爬虫入门 开发环境 ubuntu 16.04 sublime pycharm requests库 requests库安装: sudo pip install requests 第一个例子 ...

  4. 【高精度乘法】NOIP2003麦森数

    题目描述 形如2^{P}-12P−1的素数称为麦森数,这时PP一定也是个素数.但反过来不一定,即如果PP是个素数,2^{P}-12P−1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的 ...

  5. Python 抽象篇:面向对象之高阶用法

    1.检查继承 如果想要查看一个类是否是另一个类的子类,可以使用内建的issubclass函数 如果想知道已知类的基类,可以直接使用特殊特性__bases__ 同时,使用isinstance方法检查一个 ...

  6. unisound_asr 云知声 语音识别 python版接口

    抽空,实现了一份云知声 语音转写的python版本. 使用python通过调用动态库实现. 云知声官网: http://dev.hivoice.cn/sdk_download/schema_sdk.j ...

  7. 如何处理导出的csv无法查看身份证后三位的情况?

    如何处理导出的csv无法查看身份证后三位的情况? 原因:excel中如果是常规格式无法显示那么多位数,改成文本格式就可以. 简单步骤,导入数据------>选择数据来源------>选择编 ...

  8. JAVA基础-集合(二)

    一.Map整体结构体系 Map是集合的另一大派系,与Collection派系不同的是Map集合是以键值对儿的形式存储在集合的.两个键为映射关系,其中第一个键为主键(主键是唯一的不可重复),第二个键为v ...

  9. Go并发模式:管道与取消

    关键字:Go语言,管道,取消机制,并发,sync.WaitGroup,包引用,通道,defer,select GO并发模式:管道与取消 简介 Go的并发能力可以使构建一个流数据管道变得非常容易,并且可 ...

  10. 详解zkw算法解决最小费用流问题

    网络流的一些基本概念 很多同学建立过网络流模型做题目, 也学过了各种算法, 但是对于基本的概念反而说不清楚. 虽然不同的模型在具体叫法上可能不相同, 但是不同叫法对应的思想是一致的. 下面的讨论力求规 ...