基础概念
时域可分层视频编码介绍
可分层视频编码,又叫可分级视频编码、可伸缩视频编码,是视频编码的扩展标准,目前常用的包含SVC(H.264编码标准采用的可伸缩扩展)和SHVC(H.265编码标准采用的可扩展标准)。
其特点是能一次编码出时域分层、空域分层、质量域分层的码流结构,满足因网络、终端能力和用户需求不同带来的的差异化需求。
时域可分层视频编码, 是指能编码出时域分层码流的视频编码,下图是通过参考关系构建的4层时域分层码流结构。
从高到低逐层丢弃部分层级的码流(丢弃顺序L3->L2->L1),能实现不同程度的帧率伸缩,以满足传输和解码能力的变化需求。
如下图所示,是上述4层时域分层码流结构丢弃L3后组成的新的码流结构,能在解码正常的情况下实现帧率减半的效果。其他层的丢弃同理。
时域分层码流结构介绍
基础码流是由一个或多个独立图像组(Group Of Pictures,简称GOP)组合而成的。GOP是在编码中一组从I帧开始到I帧结束的连续的可独立解码的图像组。
时域分层码流可以在GOP内继续细分为独立的一个或多个时域图像组(Temporal Group Of Pictures, 简称TGOP),每一个TGOP由一个基本层和后续的一个或多个增强层组合而成,如上述4层时域分层码流结构中的帧0到帧7是一个TGOP。
-
基本层(Base Layer, 简称BL): 是GOP中的最底层(L0)。在时域分层中,该层用最低帧率进行编码。
-
增强层(Enhance Layer简称EL): 是BL之上的层级,由低到高可以分为多层(L1,L2,L3)。在时域分层中,最低层的EL依据BL获得的编码信息,进一步编码帧率更高的层级,更高层的EL会依据BL或低层EL,来编码比低层更高帧率的视频。
如何实现时域分层码流结构
时域分层码流结构的实现是依靠参考关系逐帧指定实现的,参考帧按在解码图像缓存区(Decoded Picture Buffer,简称DPB)驻留的时长分为短期参考帧和长期参考帧。
-
短期参考帧(Short-Term Reference,简称STR): 是不能长期驻留在DPB中的参考帧,更新方式是先进先出,如果DPB满,旧的短期参考帧会被移出DPB。
-
长期参考帧(Long-Term Reference,简称LTR): 是能长期驻留在DPB中的参考帧,通过标记替换的方式更新,不主动标记替换就不会更新。
虽然STR个数大于1时,也能实现一定的跨帧参考结构,但受限于存在时效过短,时域分层结构支持的跨度有限。LTR则不存在上述问题,也能覆盖短期参考帧跨帧场景。优选使用LTR实现时域分层码流结构。
适用场景
基于上述描述的时域分层编码特点,推荐以下场景使用:
-
场景1:播放侧无缓存或低缓存的实时编码传输场景,例如视频会议、视频直播、协同办公等。
-
场景2:有视频预览播放或倍速播放需求的视频编码录制场景。
若开发场景不涉及动态调整时域参考结构,且分层结构简单,则推荐使用全局时域可分层特性,否则使能长期参考帧特性。
约束和限制
-
不可以混用全局时域可分层特性和长期参考帧特性。
由于底层实现归一,全局时域可分层特性和长期参考帧特性不能同时开启。
-
叠加强制IDR配置时,请使用随帧通路配置。
参考帧仅在GOP内有效,刷新I帧后,DPB随之清空,参考帧也会被清空,因此参考关系的指定受I帧刷新位置影响很大。
使能时域分层能力后,若需要通过OH_MD_KEY_REQUEST_I_FRAME临时请求I帧,应使用生效时机确定的随帧通路配置方式准确告知框架I帧刷新位置以避免参考关系错乱,参考随帧通路配置相关指导,避免使用生效时机不确定的OH_VideoEncoder_SetParameter方式。
-
支持OH_AVBuffer回调通路,不支持OH_AVMemory回调通路。
新特性依赖随帧特性,应避免使用OH_AVMemory回调OH_AVCodecAsyncCallback,应使用OH_AVBuffer回调OH_AVCodecCallback。
-
支持时域P分层,不支持时域B分层。
时域可分层编码按分层帧类型分为基于P帧的时域分层和基于B帧的时域编码,当前支持分层P编码,不支持分层B编码。