视频压缩编码技术(H.264) 之SP/SI帧

当前视频编码标准主要包括三种的帧类型:I帧、P帧和B帧。随着H.264/AVC为了顺应视频流的带宽自适应性和抗误码性能的要求,又定义了两种新的帧类型:SP帧和SI帧。

SP帧编码的基本原理同P帧类似,仍是基于帧间预测的运动补偿预测编码,两者之间的差异在于SP帧能够参照不同参考帧重构出相同的图像帧。充分利用这一特性,SP帧可取代了I帧,广泛应用于流间切换(bitstreamswitching)、拼接(splicing)、随机接入(randomaccess)、快进快退(fastforward,fastbackward)以及错误恢复(errorrecovery)等应用中,同时大大降低了码率的开销。与SP帧相对应,SI帧则是基于帧内预测编码技术,其重构图像和对SP的重构图像完全相同。

SP帧的编码效率尽管略低于P帧,但却远远高于I帧,大大改善了H.264的网络亲和性,支持灵活的流媒体服务应用,具有很强的抗误码性能,适应在噪声干扰大、丢包率高的无线信道中传输。

01

SP/SI 帧的应用

视频流传输已经成为了“尽力而为”的因特网和无线网络的基本应用,而网络传输条件是时变的。正是为了满足视频流切换的需求,H.264 提出了SP/SI 帧技术,从而解决视频流应用中终端用户可用带宽不断变化、不同内容节目拼接时数据量的激增、快进快退以及错误恢复等问题。

流间切换

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

下面主要以流业务的应用为例,众所周知,实现带宽自适应的最好方法是设置多组不同的信源编码参数对同一视频序列分别进行压缩,从而生成适应不同质量和带宽要求的多组相互独立的码流。

这样,视频服务器只需在不同的码流间切换,以适应网络有效带宽的不断变化。

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

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

02

拼接(Splicing)与随机接入(Random Access)

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

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

03

错误恢复

采用不同的参考帧预测,可以获得同一帧的多个SP 帧,利用这种特性可以增强错误恢复的能力。如图所示,正在进行视频流传输的比特流中的一个帧P1,n-1 无法正确解码,得到用户端反馈的错误报告后,服务器就可以发送其后最邻近主SP 帧的一个辅SP 帧—S12,n,以避免错误影响更多后续帧,S12,n 帧的参考帧是已经正确解码的帧。当然,用户端也可以使用辅SI 帧—SI1,n 来实现相同的功能。

原文发布于微信公众号 - 瓜大三哥(xiguazai_tortoise)

原文发表时间:2018-09-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏钱塘大数据

钱塘干货 | 数据收集和处理工具一览

进入大数据时代,调查报道愈加成为信息战。从哪里收集有效数据?如何抽取、筛选、整合、分类大量琐碎的信息?如何分享、存储数据,并实现随取随用?钱塘君整理了一张数据收...

4347
来自专栏AI研习社

如何在 Kaggle 中高效搜索数据集?快吃下这枚安利

对于关注数据科学的同学来说,Kaggle 上庞大的数据集是一个极好的资源池,但是这么多的数据,如何进行更精准的搜索?近日,Kaggle 官方博客就刊登了 Rac...

2834
来自专栏SDNLAB

P4编程理论与实践——理论篇

由于对SDN充满着兴趣,在学习了一段时间OpenFlow之后,一次偶然的机会接触到了P4。P4可以实现很多新的Idea,但是无奈于国内的实践资料太少了(有些资料...

5529
来自专栏瓜大三哥

FPGA内部资源介绍

2992
来自专栏AI科技评论

开发 | 如何在Kaggle中高效搜索数据集?快吃下这枚安利

AI科技评论按:对于关注数据科学的同学来说,Kaggle上庞大的数据集是一个极好的资源池,但是这么多的数据,如何进行更精准的搜索?近日,Kaggle官方博客就刊...

3899
来自专栏WeTest质量开放平台团队的专栏

UPA性能分析工具使用详解

自从WeTest宣布与Unity官方共同推出Unity性能分析工具UPA(Unity Performance Analysis)以来(Hi,我们和Unity合作...

1242
来自专栏文智的专栏

【 文智背后的奥秘 】系列篇:结构化抽取平台

随着大数据时代的到来,一个大规模生成、分享、处理以及应用数据的时代正在开启。如果能将互联网上异源异构的非结构化或半结构化数据转换为更易处理的结构化数据,可以极大...

2K2
来自专栏用户画像

1.2.1计算机网络分层结构

两个系统中实体间的通信是一个很复杂的过程,为了降低协议设计和调试过程的复杂性,也为了便于对网络进行研究、实现和维护,促进标准化工作,通常对计算机网络的体系结构以...

962
来自专栏CDA数据分析师

Python告诉你:单词软件火了,但真的有那么多人在背单词吗?

0x00 前言 你想知道背单词软件有大概多少人注册第一天都没有背完嘛? 你想知道背单词软件这么火,这么多人在使用,真的有多少人真的在背诵嘛? 别急,Python...

2377
来自专栏祝威廉

让流动的数据结构化

结构化数据加上一个支持schema变更的存储,加上一个高效易用的支持SQL的数据处理和查询的引擎,简直无所不能和极度高效。

621

扫码关注云+社区

领取腾讯云代金券