前面两个编码技术是降冗余,而自适应长期参考帧编码技术是科学的提升冗余。为了更好的理解,我们先把复杂问题简单化,理解一下什么是固定长期参考帧,我们看到左边上面的图,红色的是I帧,绿色是长期参考帧,蓝色是正常的P帧。通过这样的一个参考帧的方式,打断了原来正常的Ipppp前向参考的依赖关系,这样当它的P2或者P3丢失的时候,后面P5的解码是不会受影响的,还是可以继续解码,这就会改善它的流畅性。但是还是有不足的,比如这种绿色的长期参考帧P5丢失了,因为之后的P帧都依赖它,所以都无法解码。第二个问题就是固定,因为长参考帧的关系,它会带来一定的冗余,就会导致相同带宽下的质量会有所下降,所以我们希望在网络好的时候,能够尽量让冗余变小一点,来改善画质,所以我们就提出了自适应长期参考帧的办法。
自适应长期参考帧的核心思路就是两点,第一个是增加反馈机制,在解码端增加一个反馈机制,告诉编码端这个长期参考帧我收到了,编码端知道这个帧收到之后,后面就参考这帧进行编码。第二个是增加一个动态mark长期参考帧的机制,也就是我会根据网络的QOS情况去动态优化长期参考帧编码的步长,在网络好的时候步长调短一点,网络差的时候调长一点。
但是在增加反馈机制之后会带来一个问题,当在一些网络模型RTT比较长的时候,我的反馈周期会比较长。而且反馈报文还可能会丢失,需要再次反馈,这样就会导致长期参考帧的步长变得非常长,一旦步长变长之后,它的编码质量就会进行下降,甚至会下降到业务无法接受的地步,在我们优化算法的时候也考虑到这一点,当长期参考帧的步长太长,我们会强制P帧去参考离它最近的长期参考帧,而不会完全去依靠反馈机制。这样做会带来两个比较好的优化效果,一个是在突发丢包场景下它的画面流畅性变好了,同时它有一个比较好的网络自适应的能力,能够兼顾流畅性和画质。
3.6 网络传输技术:求互动性与质量的最优解前面是视频编码技术的一些分享,接下来看一下我们在网络传输上的实践。我们对网络传输的定义,核心目标就是要求互动性和质量的最优解。我们知道网络传输技术,主要抵抗丢包,抵抗时延,抵抗抖动。常见的技术比如ARQ、FEC、不对等保护,还有抖动估计、缓存伸缩等等,除了做到抗抖动抗丢包,还需要有拥塞控制,拥塞控制的核心目的就是让 “发送速率”尽可能去逼近“可用速率“,同时尽可能保持低延迟,如果发送速率和网络可用带宽不匹配,会造成丢包、抖动或者带宽利用率低。还有一个非常重要的就是信源信道联动,我们前面看到的动态长期参考帧就是通过信道的信息动态调整编码参数的一种实现方式,基于这个联动,才能够更好的去改善我们的体验。
3.7 基于强化学习,提升带宽预测精度,改进QoE体验质量无论是拥塞控制,还是信源信道联动,在这个过程中带宽预测的算法都是非常重要的。传统的做法是利用人工的经验,通过一些决策树算法,针对不同网络模型下的带宽做一些预测,但是在复杂场景下,这种做法的效果不是特别理想,所以我们希望通过强化学习的方式来改进这一点。
主要思路是基于接收端反馈的网络QoS,主要反馈四个信息:接收速率、发送速率、丢包率和时延抖动,基于这些信息,通过强化学习的方法来提高带宽的预测准确率。算法优化后,我们的高清占比得到了30%的提升,卡顿率下降了20%。
3.8 音频3A技术:改善音频清晰度最后我会分享一下在音频方面的技术实践。好的3A算法对于语音清晰度体验至关重要。我们把AI技术应用到3A算法中来改善语音的体验。
首先,我们把AI应用在回声消除上,回声消除是整个3A里非常重要的一个步骤。传统算法在稳态的环境下做的回声消除,已经比较成熟,一般都处理的比较好,但是当环境出现一些变化,比如我拿着手机免提打电话,在家里,从房间走到阳台,这个时候环境出现了变化,回声消除就会遇到很多挑战,通过AI的方式能够比较好的处理这些问题。特别是针对双讲的场景,我们新的算法很好的解决了漏回声和丢字的问题。