H265 是在 H264 的基础上,又做了优化改进。如果了解 H264 的数据结构,再去看 H265 的数据结构,就非常简单了。
图像帧序列
- H264 的图像帧序列:00 00 00 01 + SEI + SPS + PPS + IDR帧+P帧+B帧…+ I帧+P帧+B帧…
- H265 的图像帧序列:00 00 00 01 + VPS+SPS+PPS+SEI+IDR帧+P帧+B帧…+ I帧+P帧+B帧…
- 其中在有的视频文件中,SEI并不存在,是可选项。
- H265 新增了 VPS 数据,视频参数集,主要用于传输视频分级信息,有利于兼容标准在可分级视频编码或多视点视频的扩展。
- 和H264相同,每一个VPS、SPS、PPS、SEI、一个I帧、一个P帧都可以称为一个NALU。
NALU 格式
来看一个真正的 H265 的码流数据,具体分析一下:
NALU的格式都是 : 开始码+NALU头+NALU数据。
- 开始码:00 00 00 01
- H265 的 NALU 的头部由两个字节组成:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| A | Nalu Type | B | C |
- A:forbidden_zero_bit,1 bit, value = 0;
- Nalu Type: nal_unit_type,6 bits;
- B:nuh_layer_id,6 bits;
- c:nuh_temporal_id_plus1,3 bits;
所以判断NALU的类型方式如下:
- H264 NALU类型判断方式: int type = (code & 0x1F),这主要取决于 H264 的 NALU 的数据结构;
- H265 NALU类型判断方式:int type = (code & 0x7E) >> 1;
就可以得出一下结论:
在进行编解码时,就可以按照上面的结论进行了。
在应用层面,只要了解了NALU的类型判断和码流序列就好了。
————————————————
版权声明:本文为 优快云 博主「猿诗人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/wujian946110509/article/details/104818247