1 I帧,P帧,B帧,IDR帧,NAL单元

I frame:帧内编码帧,又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I帧可以看成是一个图像经过压缩后的产物;

P frame: 前向预测编码帧,又称predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧;

B frame: 双向预测内插编码帧,又称bi-directional interpolated prediction frame,既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧;

IDR frame:I和IDR帧都是使用帧内预测的,在编码和解码中为了方便,要首个I帧和其他I帧区别开,把第一个I帧叫IDR,这样就方便控制编码和解码流程,所以IDR帧一定是I帧,但I帧不一定是IDR帧;IDR帧的作用是立刻刷新,使错误不致传播,从IDR帧开始,重新算一个新的序列开始编码。

NAL单元:全称Network Abstract Layer,即网络抽象层,在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。其中,前者负责有效表示视频数据的内容,而后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。因此我们平时的每帧数据就是一个NAL单元(SPS与PPS除外)。在实际的H264数据帧中,往往帧前面带有00 00 00 01 或 00 00 01分隔符,一般来说编码器编出的首帧数据为PPS与SPS,接着为I帧。

2 GOP(Group of pictures)

所谓GOP,意思是画面组,一个GOP就是一组连续的画面。GOP结构一般涉及两个数字,例如,M=3,N=12。第一个数字M指定I帧和P帧之间的距离,第二个数字N指定两个I帧之间的距离:及画面组的大小。对于上面的例子M=3,N=12,GOP结构表示为:IBBPBBPBBPBBI。在一个GOP内I frame的解码不依赖于任何的其它帧,而p frame的解码则依赖于其前面的I frame或者P frame,B frame的解码则依赖于其前的最近的一个I frame或者P frame 及其后的最近的一个P frame。

3 H264 encoder GOP setting

Intel Media SDK Encoding Sample 用法如下

sample_encode.exe h264 -i video.yuv -w 640 -h 480 -o out.mkv -hw -d3d -mkv -b 1000 -f 30

sample_encode.exe h264 -i video.yuv -w 640 -h 480 -o out.mp4 -hw -d3d -mux -b 1000 -f 30

编码参数包括:输入格式、帧速率、输出比特率、输入视频流宽高、输出视频流宽高等等。这里我们发现,比没有设置I、B、P帧信息的相关参数,也就是说Demo中并没有开发这样的参数设置。通过查看Intel Media SDK的Guide,发现Intel有提供这样的参数让我们可以调整I、B、P的构成,具体就是GopOptFlag:
GopOptFlag
Description
The GopOptFlag enumerator itemizes special properties in the GOP (Group of Pictures) sequence.
Name/Description
MFX_GOP_CLOSED
B-frames of the first B-interval can never reference the previous GOP
MFX_GOP_STRICT
The encoder must strictly follow the given GOP structure as defined by parameter GopPicSize,
GopRefDist etc in the mfxVideoParam structure. Otherwise, the encoder can adapt the GOP structure
for better efficiency, whose range is constrained by parameter GopPicSize and GopRefDist etc

而GopOptFlag所在的位置是:
mfxVideoParam -> mfxInfoMFX -> GopOptFlag
此外还需要利用到的相关参数可以参考mfxInfoMFX的说明,主要包括:

mfxU16 GopPicSize;
mfxU16 GopRefDist;
mfxU16 GopOptFlag;
mfxU16 IdrInterval;

GopPicSize
Number of pictures within the current GOP (Group of Pictures); if GopPicSize=0, then the GOP size is unspecified.
If GopPicSize=1, only I-frames are used.
当前GOP中画面的个数,若GopPicSize=0,则认为GOP尺寸未指定,若GopPicSize=1,则将只使用I帧

GopRefDist
Distance between I- or P- key frames; if it is zero, the GOP structure is unspecified. Note:
If GopRefDist = 1, there are no B-frames used.
I或P关键帧之间的距离;若为零,则认为GOP结构未指定,若GopRefDist=1,则将不使用B帧

GopOptFlag
ORs of the GopOptFlag enumerator indicate the additional flags for the GOP specification;

IdrInterval
the sequence header before every Nth I-frame. If IdrInterval=0(default), SDK inserts the sequence header once at the beginning of the stream
对于H264,IdrInterval指定了IDR帧的间隔,单位为I帧;若IdrInterval=0,则每个I帧均为IDR帧。若IdrInterval=1,则每隔一个I帧为IDR帧,以此类推。对于
MPEG2, IdrInterval定义了序列头间隔,单位为I帧,若IdrInterval=N,SDK将在每第N个I帧之前插入序列头;若IdrInterval=0(默认),SDK将在流开头一次 性插入序列头。

图 1

图 2

图 3

以上图1和图2中红色表示I帧蓝色表示P帧绿色表示B帧,其中图2和图3是同一个H264文件,图3可体现IdrInterval = 1的作用,即两个Idr帧间隔一个I帧,所以也可以把IDR帧看做是SPS和PPS后面第一个I帧!

参考:

http://www.cnblogs.com/cslunatic/p/3565984.html

http://en.wikipedia.org/wiki/Group_of_pictures

http://blog.csdn.net/jtujtujtu/article/details/6565287

Intel Media SDK H264 encoder GOP setting相关推荐

  1. 利用Intel Media SDK产生适合Apple Http live stream的流

    1,使用Intel Media SDK Encoder或者Transcode代码产生H.264数据 2,使用Intel IPP muxer产生mpeg-ts封包的数据包 3,使用简单程序生成.m3u8 ...

  2. ffmpeg4教程12:intel media sdk(qsv)硬解码的使用方法+qt5 openggl显示AV_PIX_FMT_NV12

    https://blog.csdn.net/java_lilin/article/details/86527478 讨论群261074724 1.安装intel media sdk 请对于处理器的版本 ...

  3. Intel Media SDK 介绍

    随着计算机硬件技术和软件技术的发展,数字媒体技术发展迅速,但是数字视频等为代表的关键技术的开发和应用有着较大的难度.如在软件开发方面,数字视频的编解码工作就是一件非常耗时.繁琐的工作.一方面,数字视频 ...

  4. Intel Media SDK(QSV)参数说明(未完成)

    Intel硬件编解码,MSDK一些参数的说明 一.编码部分 mfxVideoParam常用的参数 mfxVideoParam.mfx.CodecId : 编码为H.264格式时,设置为MFX_CODE ...

  5. Intel® Media Server Studio Support

    复制自网址:https://software.intel.com/en-us/intel-media-server-studio-support/code-samples Code Samples M ...

  6. Ubuntu 14.04 Intel 处理器 硬编解码配置(Intel® Media Server Studio)

    #PS:要转载请注明出处,本人版权所有 #PS:这个只是 < 我自己 >理解,如果和你的 #原则相冲突,请谅解,勿喷 system-info : Linux #1 SMP Wed Oct ...

  7. 【agora】 Agora Media SDK : aut transport

    Agora Media SDK AutTransport 就是一种 INetworkTransport ,具有具体的传输能力. aut 关联到session : 这几个aut的具体头文件没有: #in ...

  8. Intel SGX开发者参考书(五)—— Intel SGX SDK示例代码(一)

    @Intel SGX 读书笔记- Intel SGX SDK示例代码 安装Intel SGX SDK后,你可以在[Intel SGX SDK Install Path]src下找到示例代码. 你可以在 ...

  9. Ubuntu 16.04下Intel SGX SDK环境搭建(硬件不支持情况)

    文章目录 1.下载安装包 2.安装必要的工具 2.1 On Ubuntu* 16.04: 2.2 安装alien: 2.3 下载并安装Intel® Capability Licensing Servi ...

最新文章

  1. ECMAScript6入门教程(二)
  2. 浅谈双人游戏的设计与魅力——由《双人成行》引发的思考
  3. Java——网络编程练习
  4. java中是否可以覆盖over_”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?...
  5. 算法高级(22)-BCrypt加密算法,号称目前最安全的算法之一
  6. sqluldr2 配置
  7. html滚动字幕制作教程,dreamweaver教程:怎么制作网页滚动字幕
  8. APUE学习(一)基础知识
  9. mac安装win7之后鼠标失灵_mac安装win7鼠标失灵怎么办
  10. 腾讯应用宝正式开启 比赛进行到第手游渠道
  11. 计算机屏幕截图按什么键,电脑上截图按哪个键_电脑截图快捷键是什么
  12. 几行代码解决百度云视频变成 8秒净网公告问题(滑稽)
  13. PS人物换装--白色换纯色
  14. python获取文件夹大小_S3 API for python–创建bucket文件夹统计文件夹大小
  15. python设置win10壁纸
  16. SuperSet连接mysql设置
  17. Unity3d游戏开发之C#开发(一)
  18. 2021地理高考成绩查询,安徽高考成绩查分时间2021
  19. CoaoaChina开发者小测验常识题
  20. 【English】《控方证人》

热门文章

  1. 移动互联网时代 浏览器不可能干掉App
  2. Laravel db:seed 报错 [ReflectionException] Class XXX does not exist
  3. Spring 2.x AOP 配置方式整理
  4. 用计算机求锐角A,B,计算机操作题
  5. linux iopen i2c dev,i2c-dev - Linux驱动子系统之I2C_Linux编程_Linux公社-Linux系统门户网站...
  6. Linux系统自动备份脚本,供参考的Linux系统中自动执行分段备份脚本
  7. 108. 将有序数组转换为二叉搜索树(二分+搜索)
  8. 【阿里妈妈数据科学系列】第五篇:实验指标设定方法与指标体系构建
  9. 计算机操作系统课后题答案第三章,计算机操作系统教程习题与实验指导(第3版)...
  10. nrf51822-广播模式