DC娱乐网

一个bit搞定SHVC基层位置:vps_base_layer_internal_

一个bit搞定SHVC基层位置:vps_base_layer_internal_flag
前面一直在逐段解析 HEVC VPS 语法,刚聊到 SHVC 分层编码相关参数, vps_base_layer_internal_flag 是紧跟在 vps_video_parameter_set_id 之后的 1 比特标志,只在 SVC(SHVC)场景有实际业务意义,普通单层 HEVC 码流也必须读取这个比特,只是读完不用做业务判断。
vps_base_layer_internal_flag 详细说明
字段类型:u (1),只能取 0 或者 1。
核心作用:声明 当前这一套 CVS(编码视频序列)对应的基层,是不是存放在当前正在解析的这条码流内部 。
它只描述存放位置, 不代表基层是否真的能正常获取、可用 ,可用性由后面 vps_base_layer_available_flag 控制。
取值含义
1. 取值 = 1
含义:这套 SHVC 的基层 NALU,就在当前这条码流里面。
典型场景:单条打包 SHVC 流,基层、增强层数据混在同一条流传输。
举例:一条同时包含 Layer0 基层、Layer1 增强层的 SHVC 码流,它 VPS 里这个标志设为 1。解码器不用去别的地方找基层,只要解析本条流的数据,就能拿到基层做独立解码。哪怕接收端只保留基层 NALU、丢弃全部增强层,依然可以正常出画面。 2. 取值 = 0
含义:当前这条 CVS 对应的基层,不在本条码流中。
典型场景:分离式 SHVC,当前流只携带增强层,基层放在另外一路独立码流。
举例:我们有两路 SHVC 流,流 A 是基层,流 B 只有增强层。解析流 B 的时候读到这个 flag 等于 0,解码器就知道,不能在流 B 里面找基层,需要等待外部传入流 A 的基层数据,否则无法完成解码。 工程上要留意的点
1. 普通非 SVC 的 HEVC 码流,不存在基层、增强层的概念。编码端写 0 或者 1 都不影响画面解码,但解析代码 不能跳过这 1bit 。一旦漏读,后面所有 VPS 字段的比特偏移全部错乱,解析直接失败。 2. 这个标志只是静态声明, 不会自动控制编码器、网络发送逻辑 。flag=1 不代表发送端一定持续输出基层,flag=0 也不代表外部一定能拿到基层,基层能不能用,要看 vps_base_layer_available_flag 。 3. 一条码流里可以放多套 VPS,但同一套互相依赖的基层 + 增强层,只能共用同一个 VPS,由这个 VPS 的本字段统一说明基层位置,不能用两个 VPS 分别描述同一组分层。