H264及H265 I帧解析 [转]

H264及H265 I帧解析 [转]

h264 I帧的判断

  • F:forbidden_zero_bit.1 位,如果有语法冲突,则为 1。当网络识别此单元存在比特错误时,可将其设为 1,以便接收方丢掉该单元。 
  • NRI:nal_ref_idc.2 位,用来指示该NALU 的重要性等级。值越大,表示当前NALU越重要。具体大于0 时取何值,没有具体规定。
  • Type:5 位,指出NALU 的类型。具体如表1 所示:

  • 需要特别指出的是,NRI 值为 7 和 8 的NALU 分别为序列参数集(sps)和图像参数集(pps)。
  • 参数集是一组很少改变的,为大量VCL NALU 提供解码信息的数据。
  • 其中序列参数集作用于一系列连续的编码图像,而图像参数集作用于编码视频序列中一个或多个独立的图像
  • 如果没能正确接收到这两个参数集,那么其他NALU 也是无法解码的。
  • 因此它们一般在发送其它 NALU 之前发送,并且使用不同的信道或者更加可靠的传输协议(如TCP)进行传输,也可以重复传输
  • H264帧前面四个字节是h264头部(00000001),从第5个字节开始判断:
int judgeFrameType(char *data, int codecid)
{
	int iFrameType = 1;  //0-Iframe 1-Pframe
	if (codecid == STREAM_VIDEO_H264)
	{
		if ((data[4] & 0x1f) == 0x07 || (data[4] & 0x1f) == 0x08 || (data[4] & 0x1f) == 0x05)
			iFrameType = 0;
	}
	else if (codecid == STREAM_VIDEO_H265)
	{
		if ((data[4] & 0x7e) == 0x40 || (data[4] & 0x7e) == 0x42 || (data[4] & 0x7e) == 0x44 ||
			(data[4] & 0x7e) == 0x4e)
			iFrameType = 0;
	}

	return iFrameType;
}

H264中I帧和IDR帧的区别

  • 文章链接:https://blog.csdn.net/Jammg/article/details/52357245
  • IDR(Instantaneous Decoding Refresh)--即时解码刷新。
  • I和IDR帧都是使用帧内预测的。它们都是同一个东西而已,在编码和解码中为了方便,要首个I帧和其他I帧区别开,所以才把第一个首个I帧叫IDR,这样就方便控制编码和解码流程。IDR帧的作用是立刻刷新,使错误不致传播,从IDR帧开始,重新算一个新的序列开始编码。而I帧不具有随机访问的能力,这个功能是由IDR承担。IDR会导致DPB(DecodedPictureBuffer参考帧列表——这是关键所在)清空,而I不会IDR图像一定是I图像,但I图像不一定是IDR图像。一个序列中可以有很多的I图像,I图像之后的图像可以引用I图像之间的图像做运动参考。
  •  对于IDR帧来说,在IDR帧之后的所有帧都不能引用任何IDR帧之前的帧的内容,与此相反,对于普通的I-帧来说,位于其之后的B-和P-帧可以引用位于普通I-帧之前的I-帧。从随机存取的视频流中,播放器永远可以从一个IDR帧播放,因为在它之后没有任何帧引用之前的帧。但是,不能在一个没有IDR帧的视频中从任意点开始播放,因为后面的帧总是会引用前面的帧。

  • IDR: 在H.264中,图像以序列为单位进行组织一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像。H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。这样,如果前一个序列出现重大错误,在这里可以获得重新同步的机会。IDR图像之后的图像永远不会使用IDR之前的图像的数据来解码。      
  • IDR 图像一定是 I 图像,但 I 图像不一定是 IDR 图像。I帧之后的图像有可能会使用I帧之前的图像做运动参考。
  • 另外,一个或者多个图像参数集对应一个序列参数集。

H265参考文章:

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值