一、概念
SVC(可适性视频编码或可分级视频编码)是传统H.264/MPEG-4 AVC编码的延伸,可提升更大的编码弹性,并具有时间可适性(Temporal Scalability)、空间可适性(Spatial Scalability)及质量可适性(SNR/Quality/Fidelity scalability)三大特性,使视频传输更能适应在异质的网络带宽。

二、概述
SVC以AVC视频编解码器标准为基础,利用了AVC编解码器的各种高效算法工具,在编码产生的编码视频时间上(帧率)、空间上(分辨率)、视频质量方面的可扩展,产生不同帧速率、分辨率、质量等级的解码视频。

时间可适性(Temporal Scalability):由于一般视频压缩都会利用运动补偿的手段,纪录位移向量(motion vector)。在某些系统的应用上,可以跳过某几帧用其邻近帧的位移向量内插出该被跳过帧的结果。在解码端同样利用运动补偿算回该被跳过帧。


这张图表示在时间维度上的可伸缩性视频编码。观察预测箭头的组织方式。在这个例子中,定义了四个不同的层(T0到T3)。

为了更直观描述算法实现,这张图中的图片是垂直偏移的,视觉上分离三层。每一层都需要依赖较低层才能被解码,但不需要任何较高层。这允许从顶层开始移除图片,而不影响剩余图片的可解码性。例如,我们假设图例中显示的图层以30 fps的帧速率显示。如果我们移除所有L2层的图片,剩下层(L0和L1)仍然可以成功解码,并且产生一个15fps的视频。如果我们进一步删除所有的L1图像,那么剩下的L0层依然可以被解码并产生一个7.5fps的视频。

空间可适性(Spatial Scalability):图形(或视频压缩中的一帧)在压缩编码的时候即存下了多重大小(或分辨率)的结果。让解码端得以视需求解码回所需的图片大小(或分辨率),可能以较小的结果换取解码的效率。通常较小的图片即带有大图片一部分的特性,大图的存储上不需要重复记录这些重复的部分。


与时间可适性原理类似,L0基层为分辨率最小编码数据,级别越高,分辨率越高。当实际应用中需要较低分辨率时,只需丢弃高Level层级数据进行解码。

质量可适性(SNR/Quality/Fidelity scalability):在压缩编码的时候将多重品质(qualities)的结果都存下来。让解码端得以视需求解码回所需的图片品质,可能以较低的品质换取解码的效率。通常品质较差的图片仍有一定的代表性,品质较佳的结果在存储上不需要重复记录重复的信息。


联合可适性(Combined scalability):结合上述三个扩展性。


上图为空间和时间的可伸缩性示例。我们可以通过扩展时间可伸缩性结构同时实现空间可伸缩性编码。每个图片现在有两部分:基础层分辨率图片的B部分和空间增强层的S部分,这两个部分结合则可生成全分辨率图像。空间增强层一般为水平和垂直方向上基底分辨率的1.5倍或者2倍。这为不同分辨率的视频在进行空间可缩放性编码时提供了便利,例如VGA和QVGA(比率为2)以及1080p和720p(比率为1.5),都可以进行空间可伸缩性编码。空间可伸缩性可以与时间可伸缩性(和SNR)以完全独立的方式相结合。假设在图示例子的全速率和分辨率分别为30fps下的HD高清分辨率(720p),那么我们可以在分辨率(HD、1/4HD)和帧速率(30fps、15fps、7.5 fps)之间进行任意组合。

三、应用
1)监控视频应用场景


监控视频不同的终端支持视频的分辨率不同。传统的方式需要一个服务器编码出不同分辨率视频数据给各个终端。但是增加Spatial Scalability后。

视频采集端,仅需要Spatial Scalability一次编码,就可以提供360p、720p、1080p的数据。大大提升编码效率,降低服务器性能消耗。

另外监控视频流存储的时候一般需要2路,1路质量好的用于存储,1路用于预览。用quality scalability编码可以产生2层的分级码流,1个基本层用于预览,1个增强层保证存储的图像质量是较高的。

2)多人会议应用场景


视频会议终端利用SVC编出多分辨率、分层质量。会议的中心点替代传统MCU二次编解码方法改为视频路由分解转发。在云视讯领域SVC有很大的应用空间。

3)抗网络丢包应用场景
正如《Overview_SVC_IEEE07》第二章描述,虽然看上去Spatial Scalability和quality scalability,给视频会议和监控视频提供了很好的解决方案,但是由于这种方案会增加传输码率,降低编解码器性能、提高编解码器的复杂度、在一些场景下还需要服务器支持SVC层级过滤。这使得SVC的Spatial Scalability和quality scalability到目前为止还没有大规模应用。但是Temporal Scalability可以在不稳定网络视频传输上被使用。

以不可缩放的方式进行视频编码传输时。只有第一张图片的I帧,可独立编码,无需参考其他任何图片。其他所有的图片P帧,都需要参考前面的帧画面进行预测然后编码。两个I帧之间的数据也叫一组GOP。可以看出当一个GOP内的一帧丢失,严重时会导致整个GOP无法解码。

但是增加Temporal Scalability后,我们仅需要通过FEC+NACK方式保护T0层的数据完整性,若其余层的视频帧有丢失,就通过逐级降帧率方案(丢弃Tn-T1之间的数据),还能保证视频通话整体的流畅性。并且Temporal Scalability可以做到后向兼容性,不需要解码器做特殊处理。

四、实现
1)编码
目前在OpenH264的开源代码中已经支持SVC视频编码,但是解码尚未支持。编码参数配置如下:

encoder_data_tables.cpp参数配置表

2)解码
目前仅知道Open SVC Decoder的开源代码支持SVC解码。但是没有深入研究,不太了解实现细节及性能情况。

3)VPX对SVC的实现
根据《HANDLING PACKET LOSS IN WEBRTC》这篇文章可以看出,VP8已经实现SVC设计,并将TL(temporal layers)+ NACK + FEC联合作为QOS的一个方法。

五、协议
SVC算法实现原理,在《Overview_SVC_IEEE07》文档有描述。

SVC与H264协议结合,在《T-REC-H.264-201704-I!!PDF-E》H.264标准的附录G有定义。

SVC的RTP打包及SDP协商,在《rfc6190》有定义。

webrtc之SVC实现(十)相关推荐

  1. WebRTC笔记之二十二:基于WebRTC的视频聊天室—QHTalkGenius

    利用空余时间,前后历时5个月,在公司大佬杰哥的指导下,QHTalkJanus终于搞定了.功能很简单,参考Janus的web客户端来做的,主要实现了三部分:1.Janus信令解析-这个用的是开源库Web ...

  2. H264/SVC Temporal Scalability

    H264/SVC Temporal Scalability 在多人远程会议或直播系统中,参与的用户可能处于不同的网络环境(有线.wifi.3G.4G)中,网络质量各不一致,为了所有用户可进行远程会议或 ...

  3. 实时视频通信技术调研

    要做一个实时视频通信的产品,首先想到的同类产品就是skype,调研了下它的实现技术. 它实际使用了GIPS的产品: 一.GIPS Global IP Sound(GIPS)协议,著名的语音聊天工具sk ...

  4. 系统规划与管理备考整理

    @ 一.信息系统综合知识 1.1 信息的定义和属性 1.信息是客观事物状态和运动特征的一种普遍相识,客观世界中大量存在.产生和传递着以这些方式表示出各种各样的信息 (1)信息的定性描述 控制论的创始人 ...

  5. WebRTC十周年、Space X成功对接国际空间站、TikTok复制品Zynn或有快手支持|Decode the Week...

    >>顺便祝大家六一快乐<< Decode the Week≠音视频技术周刊  01 Space X载人飞船首发成功并与国际空间站对接 图片来源:NASA Ins story 北 ...

  6. webRTC(十四):webrtc 端到端文本聊天

    webrtc 端到端文本聊天是在webRTC(十):webrtc 实现web端对端视频基础上实现的,web端到端纯文本聊天,后面有讲到! 文本传输主要使用的是createDataChannel的api ...

  7. Android IOS WebRTC 音视频开发总结(十)-- webrtc入门002

    继续上一篇中未翻译完成的部分,主要包括下面三个部分: 1,扩展:WebRTC多方通话. 2,MCU Multipoint Control Unit. 2, 扩展:VOIP,电话,消息通讯. 注意:翻译 ...

  8. 【WebRTC---入门篇】(二十)WebRTC核心之SDP详解

    SDK规范 会话层 媒体层 SDP规范相关参考 WebRTC中的SDP

  9. 【WebRTC---入门篇】(十八)WebRTC非音视频数据传输

    WebRTC传输非音视频重要API createDataChannel options ordered 在传输非音视频的时候是否是按序到达的. maxPacketLifeTime/maxRetrans ...

最新文章

  1. Linux 内核源代码分析 chap 2 存储管理 (5)
  2. 图片裁切,上传,自动匹配颜色。
  3. Leetcode 125. 验证回文串 解题思路及C++实现
  4. AI(3)--手机上的AI技术
  5. C# 6.0 的那些事
  6. IT软件开发人员必去的10个社区
  7. 这款开源神器,让你能在 iPad 上随心所欲写代码!
  8. 如何把pdf转换成ezd_如何把pdf转换ppt格式
  9. cpu顶盖怎么看步进_CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
  10. 网络编程(三):网络中的端口号
  11. 概率统计学习笔记(9)——连续型:均匀分布、指数分布
  12. Windows10虚拟机安装和使用教程
  13. Xamarin for mac学习笔记(一)
  14. STM32 B3 B5 A13 A14 A15端口复用
  15. 《人月神话》作者去世,我们都曾读过他的书
  16. 从零开始实现一个量化回测系统(一)
  17. 防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00操作说明之软件功能说明
  18. java list按字母排序_如何按字母顺序对列表进行排序?
  19. poj3179 Corral the Cows(二分)(双指针)
  20. H5缓存机制浅析-移动端Web加载性能优化

热门文章

  1. [NOI2014] 动物园
  2. struts2 action 返回类型分析
  3. 数组的属性、foreach遍历、交错数组与矩形数组的区别
  4. 通过JAVA获取优酷视频
  5. 反向传播网络(BP 网络)
  6. pandas的两种数据类型:Series和DataFrame
  7. mybatis 原理_了解Mybatis的工作原理吗
  8. python函数笔记_初学Python函数的笔记整理
  9. python 等差数列list_Python3基础 list range+for 等差数列
  10. html5 datalist 选中option选项后的触发事件