面临挑战
在直播行业发展如火如荼的今天,用户对视频体验的要求也水涨船高。视频基础体验的关键要素包括清晰度、流畅度、低延迟等,而这些要素的“第一性原理”,就是视频本身的编码效率,也就是压缩率。
视频编码效率的重要性不言而喻,但进一步地提升也并非易事,尤其在直播场景中,对编码速度、延迟、码率控制等方面都有很高的要求。如何在保证画质不变的情况下,显著提高压缩率,同时满足实时性、低延迟的要求,是一个持续的技术挑战。
如何完成挑战
新一代编码器的采用
抖音基于BVC编码器,曾在世界杯中给数亿观众带来了极致的视频体验。而本次亚运会中,火山引擎多媒体实验室自研的新一代BVC编码器首次得到抖音直播全链路支持并在直播中使用。BVC编码器曾经在业界编码器大赛MSU中斩获多项指标的第一,具有行业领先的编码和计算性能,并还在持续不断地优化迭代中。新一代BVC编码器相比上一代,能在画质不变的情况下,显著降低码率,提升用户体验,降低带宽成本。
新一代BVC编码器在直播场景的优化
作为新一代编码器,引入了大量新的编码工具和算法,在显著降低码率的同时,也具有相当高的计算复杂度。而在直播场景中使用最新BVC编码,首先需要对计算复杂度进行大幅度的优化,才能达到实时性和低延迟的要求。
更极致、简洁的工程架构
首先,新一代BVC编码器在直播场景下,对所有编码工具和算法进行了测试,按照性价比筛选出了在直播的编码速度要求下能够投入使用的工具和算法集合。而基于这个集合重新设计轻量级的架构,能最大化减少计算流程损耗。新的编码器架构对整个编码流程进行了重新梳理,去除原先复杂的情况耦合,为特殊工具单独设计流程,实现了编码流程的最简化。同时,对数据结构也进行了更极致的优化,显著减少了数据量,提升了访存效率。此外,还通过大量的计算结果缓存及复用的机制,减少了重复计算,以及设计了高效的数据交换机制,减少了数据拷贝。在计算模块的优化上,挖掘了更多的计算流程整理为SIMD实现,同时对原有的SIMD实现进行了进一步优化,从而减少指令数。基于直播场景的编码器架构优化,在算法基本不变的前提下,为新一代BVC编码器节省了超过30%的复杂度。
灵活、精细化的并行框架
为了在计算复杂度提高的情况下,仍然能实现实时编码,充分利用多核处理器的能力至关重要。新一代BVC编码器针对直播场景进行并行框架的重新设计。首先将前处理、预分析、编码等过程并行起来,并在任务调度上分配合适的优先级,从而最大降低编码前的等待。对于编码过程的线程等待,精确计算等待的条件,并将条件限制降低到最小,从而降低等待时延。此外,基于帧内和帧间并行编码的模型,根据编码时依赖关系准确分配每个编码任务的线程优先级权重,对线程进行灵活而精细化地调度。经过优化,新一代BVC编码器的CPU利用率提升50%以上。
上百个快速算法
除了工程架构之外,新一代BVC编码器还增加了大量的快速算法,从而达到高分辨率、高码率和高帧率下的实时编码。新一代BVC编码器重构了编码块划分的框架,根据周围块和历史划分信息,自适应决策划分深度的范围,大幅减少了无效的划分尝试,从而降低编码复杂度。在模式决策中,为每个模块设计大量精细的初选快速算法,从而大幅减少最终尝试的模式数量。此外,还对前处理和预分析模块也进行了大量的简化处理。新一代BVC编码器为直播场景增加的上百个快速算法,在压缩率的损失较小前提下将整体编码速度提高了2倍以上。
亚运会的针对性优化
除了编码器内核本身的优化之外,新一代BVC编码器还对亚运会进行了专项优化。亚运会除了传统的运动项目之外,还增加了关注度较高的电竞项目。而新一代BVC编码器也对运动、游戏这两种场景进行针对性的优化。研发团队进行了大量的测试,对不同视频分辨率和复杂度下进行了编码档位的适配,调整了数十个编码参数来控制不同编码算法在运动、游戏场景中的性价比,在获得压缩率提高的同时实现了编码加速。此外,还对码率控制进行了调优,减少了高运动复杂场景中画面模糊的情况。
优化成果
新一代BVC编码器在直播场景中实现了1080P 50FPS的实时编码,在画质不变的情况下,相比上一代编码器实现了20%左右的码率节省。实际效果如下:(对比展示,上面是上一代BVC编码视频,下面是新一代BVC编码视频)
图片
图片
和广泛应用的开源编码器x265(v3.5)对比,新一代BVC编码器也具有显著优势,下图展现了性能对比数据。可以看出,在编码设置对齐的情况下(帧结构、码控方式、lookahead长度等),新一代BVC编码器,对于亚运会中的运动和游戏视频内容,平均能实现40%以上的码率节省,同时编码速度更快。
图片