H.264 SVC 简介

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CrystalShaw/article/details/81184531

一、概念

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视频编码,但是解码尚未支持。编码参数配置如下:

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》有定义。

六、参考

http://ip.hhi.de/imagecom_G1/assets/pdfs/Overview_SVC_IEEE07.pdf

https://www.itu.int/rec/T-REC-H.264-201704-I

https://tools.ietf.org/html/rfc6190

https://en.wikipedia.org/wiki/Scalable_Video_Coding

https://zh.wikipedia.org/wiki/%E5%8F%AF%E9%81%A9%E6%80%A7%E8%A6%96%E8%A8%8A%E7%B7%A8%E7%A2%BC

https://www.jianshu.com/p/2f97027c5088

https://ieeexplore.ieee.org/document/6738383/

音视频开发(42)---H.264 SVC 简介相关推荐

  1. 【秒懂音视频开发】23_H.264编码

    本文主要介绍一种非常流行的视频编码:H.264. 计算一下:10秒钟1080p(1920x1080).30fps的YUV420P原始视频,需要占用多大的存储空间? (10 * 30) * (1920 ...

  2. 即时通讯音视频开发(五):认识主流视频编码技术H.264

    前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的. 系列文 ...

  3. iOS音视频开发八:视频编码,H.264 和 H.265 都支持

    我们将通过拆解采集 → 编码 → 封装 → 解封装 → 解码 → 渲染流程并实现 Demo 来向大家介绍如何在 iOS/Android 平台上手音视频开发. 这里是第八篇:iOS 视频编码 Demo. ...

  4. 音视频开发(四十九)H.264 帧内预测

    目录 编码流程和数据格式回顾 4 × 4亮度块的9中预测模式 16 × 16亮度块的4种预测模式 8 × 8 色度块的4种预测模式 JM代码 一.编码流程和数据格式回顾 我们先看下下图来回顾下编码流程 ...

  5. 音视频开发 RTMP协议发送H.264编码及AAC编码的音视频(C++实现)

    RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系F ...

  6. Android音视频开发基础(六):学习MediaCodec API,完成视频H.264的解码

    前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了<Android 音视频从入门到提高 - 任务列表>.本文是Android音视 ...

  7. 音视频开发(24)---H.264视频编码基本知识

    H.264视频编码基本知识 一.视频编码技术的发展历程 视频编码技术基本是由iso/iec制定的mpeg-x和itu-t制定的h.26x两大系列视频编码国际标准的推出.从h.261视频编码建议,到 h ...

  8. 音视频开发总结之一理论基础

    一. 音频技术基础概念 1. 声音的物理性质 众所周知,声音是由物体振动而产生的.声音是一种压力波,当演奏乐器或者说话时,它们的振动都会引起空气有节奏的振动, 使周围的空气产生疏密变化,由此就产生了声 ...

  9. FFmpeg音视频开发实战5 iOS/Android/windows/Linux -陈超-专题视频课程

    FFmpeg音视频开发实战5 iOS/Android/windows/Linux -159618人已学习 课程介绍          咨询QQ: 347181469. 本课程适合中,从事音视频,网络通 ...

最新文章

  1. 限制会话id服务端不共享_会话控制 - able-woman - 博客园
  2. spring mvc学习(26):处理数据模型--从表单到controller传输数据
  3. 里能嵌jquery吗_白芸豆里的淀粉阻断成分,能帮助减肥是真的吗?
  4. 18春学期《计算机应用基础》,18春学期(1709、1803)《计算机应用基础》在线作业及答案.pdf...
  5. Python中的_main_与_init_详解
  6. 12306小卡片-鸿蒙智慧出行
  7. wkhtmltopdf网页转PDF程序安装教程
  8. bat 下 字符串拆分 类似 split 可以使用 for /f delims
  9. 剑指Offer:面试题31——连续子数组的最大和(java实现)
  10. multisim中pwl_Multisim 14电路设计与仿真
  11. MMD原神动画制作(学习教程二)
  12. stl文件的解析和在线3d打印
  13. IP地址和mac地址的区别
  14. 关于JavaScript继承与原型链的一些理解
  15. 在HTML中怎么表示空格
  16. 服务器减少一半,TDengine在华自科技的落地实践
  17. 2022安全员-B证考试题及在线模拟考试
  18. springCloud五大神兽(思维导图)
  19. python二级第三方库汇总
  20. 指挥计算机工作的程序集,主互操作程序集(PIA)是否要求在计算机中安装Microsoft Office才能工作...

热门文章

  1. MDK5中代码补全功能
  2. STM32 RCC时钟配置
  3. 数字图像处理(四)——图像编码技术(一)
  4. RT-Thread的线程(任务)处理【RT-Thread学习笔记 2】
  5. Linux输入子系统:事件的编码 -- event-codes.txt
  6. 文本删除空行_Word的空行、空格、页眉线删不了?8秒一次性处理,教你删掉它们...
  7. 微信小程序|开发实战篇之四
  8. spring-security过程分析
  9. Linux创建SSH信任关系
  10. Django基础之中间件