在网络视频直播系统中常见编码器有H264/H265/VP8/VP9,其中H264和H265用的比较多,VP8和VP9用的比较少,H265的出现虽然时间短,但很多开发公司都一开始尝试使用H265作为直播编码的一种方式,但H264依然是主流的一种编码方式。下面给大家普及一下关于H264格式的知识。
在网络视频直播系统中H264格式的编码器中其实是有两个层面,一个是VLC视频编码层,NAL层是网络抽象层,VLC主要任务就是编码,NAL层是负责格式化数据,而H264的每帧数据就是一个NAL单元,在H264的实际的数据帧中,帧前面会有分隔符来分隔每一帧,一般来说编码器编出的首帧数据为SPS和PPS,后面就是属于I帧
1、I帧:I帧就是帧内编码帧,也就是说它的编码和其他帧的数据没有关系的,它只是在某一帧内做编码,也就是说他和单张图片是类似的,所以说我们只需要用I帧的数据就可以恢复出一个完整的图像。
2、P帧:而P帧需要依赖前一阵的数据来解码图像,因为它的保存是与前一帧差别的数据,所以它被称为前项预测编码帧。
3、B帧:B帧是前项和后项双向的预测编码帧,所以说要解码B帧的话就需要前一帧和后一帧两份数据才能够解码。
总结来说I帧、P帧、B帧这三种是常见的帧类型,这三种编码方式是明显不同的,一个是完全单独的帧内编码,而另一个是需要前一帧数据来解码自己的,B帧则是需要两边的数据才能够解码自己的。
在网络视频直播系统中这三种解码方式的不同,可以明显看出来压缩比的不同,I帧的压缩比其实和GPG差不多,压缩前和压缩后的比能够达到7:1,P帧较大一些达到20:1,B帧则能达到50:1。
讲完了关于“帧”的概念,还有一个GOP概念,指的是两个I帧之间的图像组,现在有很多SDK都强调秒开,其实就是在服务端或CDN的边缘去缓存这一对GOP,缓存后就避免播放端在播放时找不到I帧时等待或回源,回源的意思就是你需要到中心界面找到这个信息然后再拉流,有了缓存的GOP之后,拉流时先播放这组GOP,在网络视频直播系统中就可以给人一种秒开的感觉。
为什么要缓存GOP呢,因为每个播放器播放时对于H264解码首先需要一个I帧去显示图像,然后后面的P帧之类的依据I帧前面一帧的数据差,然后才能解码P帧出来显示完整图像,有了I帧之后显示出来速度就很快,给人秒开的感觉,提高网络视频直播系统体验性。这也是一种比较常见的直播优化手段。
以上内容为作者“云豹短视频嘉兴” 原创,未经作者本人同意,禁止转载,否则将追究相关法律责任
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。