当前位置: 代码迷 >> 综合 >> H264/AVC SP/SI的应用
  详细解决方案

H264/AVC SP/SI的应用

热度:7   发布时间:2023-12-21 07:17:30.0

SP和SI是干什么的

为了顺应视频流的带宽自适应性和抗误码性能的要求,定义了SP帧和SI帧。

SP帧编码的基本原理同P帧类似,两者的差异在于SP帧能够参考不同参考帧重构出相同的图像帧。(要注意这里并不是说的单向多参考帧)充分利用这一特性,SP帧可取代I帧,广泛应用于流间切换(bitstream switching)、拼接(splicing)、随机接入(random access)、快进快速(fast forward,fast backward)和错误恢复(error recovery)等应用中,同时大大降低了码率的开销。与SP帧相对应,SI帧则是基于帧内预测编码技术,其重构图像和对SP的重构图像完全相同。

SP帧的编码效率略低于P,但远高于I,改善了264的网络亲和性,支持流媒体服务应用,具有很强的抗误码性能,适应在噪声干扰大、丢包率高的无线信道中传输。SP和SI的提出,解决了视频流应用中终端用户可用带宽不断变化、不同内容节目拼接时数据量的激增、快进快退以及错误恢复等问题。


SP和SI的应用

1. 流间切换

        视频服务器应该可以根据网络条件,调整编码码率,实现带宽的自适应性。这涉及会话业务和流业务两种应用场合。其中会话业务的特点是实时编解码、点对点传输,一般根据解码端的反馈信息,调整码率或帧率;而流业务的特点是非实时编解码,这往往采用预先编码出不同质量和带宽要求的视频码流

        下面主要以流业务的应用为例,众所周知,实现带宽自适应的最好方法是设置多组不同的信源编码参数对同一视频序列分别进行压缩,从而生成适应不同质量和带宽要求的多组相互独立的码流。 这样,视频服务器只需在不同的码流间切换,以适应网络有效带宽的不断变化。

        设{ P_{1,n-1}P_{1,n}P_{1,n+1}}和{ P_{2,n-1}P_{2,n}P_{2,n+1}} 分别是同一视频序列采用了不同的信源编码参数编码所得到的两个视频流。由于编码参数不同,两个码流中同一时刻的帧,如P_{1,n-1}P_{2,n-1},并不完全 一样。假设服务器首先发送视频流P_1,到时刻n再发送视频流P_{12},则解码端接收到的视频流为{ P_{1,n-2}P_{1,n-1}P_{2,n}P_{2,n+1}P_{2,n-2}}。在这种情况下,由于接收的P_{2,n}应使用的参考帧应该是P_{2,n-1}而不是P_{1,n-1},所以P_{2,n}帧就不能完全正确地解码。在以往的视频压缩标准中,实现码流间的切换功能时, 确保完全正确解码的前提条件是切换帧不得使用当前帧之前的帧信息,即只使用 I 帧。在实际的流 业务码流切换中,往往通过周期性地放置 I 帧确实能实现流间切换等功能,但 I 帧的插入势必造成视 频流数据量增大,增加传输带宽的要求。

        从SP帧的特性可知,使用不同的参考帧作预测,也可以得到完全相同的解码帧。这一特点正好 适用于流间切换。如下图所示中,视频流明确的切换点处放置主SP帧(Primary SP-frames)——S_{1,n}帧和S_{2,n}帧。在不同编码参数的视频流间进行切换时,发送与主SP帧相对应的辅SP帧(Secondary SP-frames)——S_{12,n}。当然信源编码部分根据需要插入SP/SI帧,也适当增加了编码的复杂度。

2. 拼接和随机接入

        上述流间切换的例讨论了同一图像序列、不同编码参数压缩编码的流间切换。然而,实际的流间切换的应用并不单单如此。例如,关注同一事件而处于不同视角的多台摄像机的输出码流间的切换和电视节目中插入广告等,这就涉及到拼接不同图像序列生成码流的问题。如图 6.34 所示,由于各个码流来自于不同的信源,帧间缺乏相关性,切换点处的辅帧如果仍采用帧间预测的辅 SP 帧,编 码效率就不会那么有效,而应采用空间预测的 SI 帧——SI_{2,n}

        综上所述,SP帧与SI帧均可用于流间切换。当视频流的内容相同,编码参数不同采用 SP 帧;而当视频流的内容相差很大时,则采用SI帧将更加有效。

3. 错误恢复

        采用不同的参考帧预测,可以获得同一帧的多个SP帧,利用这种特性可以增强错误恢复的能力。 例如,如下图所示,正在进行视频流传输的比特流中的一个帧P_{1,n-1}无法正确解码,得到用户端反 馈的错误报告后,服务器就可以发送其后最邻近主 SP 帧的一个辅 SP 帧——S_{12,n},以避免错误影响更多后续帧,S_{12,n}帧的参考帧是已经正确解码的帧。当然,用户端也可以使用辅 SI 帧——SI_{1,n}来实现相 同的功能。(这里暂时没看明白,先看看后边SP和SI的基本原理,看卡能不能懂)