目录
前言
01 什么是码流结构
02 H264帧类型的区别
03 片slice
从本章开始我们将要学习嵌入式音视频的学习了 ,使用的瑞芯微的开发板
个人主页:@ChenPi
推荐专栏1: 《C++_@ChenPi的博客-CSDN博客》✨✨✨
推荐专栏2: 《Linux C应用编程(概念类)_@ChenPi的博客-CSDN博客》✨✨✨
推荐专栏3:《嵌入式音视频_@ChenPi的博客-CSDN博客》
本篇简介 :这章记录编解码的基础理论知识——H264的码流结构
所谓的码流本质就是一串长长的二进制数据,就像一条很长的河流,缓缓的流淌,那么接收端收到这些码流之后,需要解析它才能读取里面的信息,所以码流一定是需要一定规律组织起来的,让接收端知道哪里是视频的开始,哪里是一帧图像的开始,甚至哪里是一个宏块的开始。这样的组织方式就是码流结构
在H264的编码中,通常有三种不同类型的帧来表示传输的画面,分别是I帧,P帧和B帧。
每一帧相当于每一幅静止的画面
而实际的传输过程中我们会利用各种视频压缩算法大幅减少传输视频的体积
其中I,P,B是我们最常见的
在视频编码序列中,主要有三种编码帧:I帧、P帧、B帧
- I帧即Intra-coded picture(帧内编码图像帧),不参考其他图像帧,只利用本帧的信息进行编码
- P帧即Predictive-codedPicture(预测编码图像帧),利用之前的I帧或P帧,采用运动预测的方式进行帧间预测编码
- B帧即Bidirectionallypredicted picture(双向预测编码图像帧),提供最高的压缩比,它既需要之前的图 像帧(I帧或P帧),也需要后来的图像帧(P帧),采用运动预测的方式进行帧间双向预测编码
首先我们看上方的图,有一个比较显眼的GOP
那么这个GOP是什么意思呢?
在视频编码序列中,GOP即Group of picture(图像组),指两个I帧之间的距离
以GOP1为例,可以看见第一个I帧指向三个B帧以及一个P帧,这是因为P帧向前参考解码,但是前面三个B帧无法参考,所以要参考I帧,拿到公共部分数据,进行解码。
B帧前后参考解码,所以既要参考I帧,也要参考后面的P帧所以在传输时,虽然是按照IBBBP的顺序进行传输,但是实际解码顺序确是IPBBB
第一帧无疑解IDR帧,第二帧解码P帧,所以实时性不是太好。
B帧前后参考时,向前也可以参考P帧,
B帧与B帧是没有任何参考的。
在视频编解码序列中,GOP指的是两个I帧之间的距离,在一个GOP包含了一组连续的图片。
如上图所示,在一个GOP中包含了I帧、P帧、B帧,直到下一个I帧的出现,一个GOP才算结束。
通常来说,I帧所占用的字节和体积大于P帧、而P帧所占用的字节大于B帧。
所以在码率不变的情况下,可以调整GOP的长度去改善画质,GOP
的长度越长,所得到的P帧和B帧更多,画面的质量和细节就会更好。
slice中文的意思是叫做片,为什么需要这个片,主要是为了并行编码设计
所谓的并行编码指的是,把一帧图像分成几个片,并片之间是相互独立进行编码的!
h264的中编码的基本单元是宏块,一个slice包含多个宏块,所以一帧图像的层次结构如下: