前几天在看AV1代码的时候,偶然在代码中看到了一个Switch Frame的概念,也称为S-Frame,因为之前我只看过HEVC,从来没有见过此概念,所以特地查了下,感觉跟H.264的extended profile中的SI/SP技术比较类似,下面简单记录下AV1中的S-Frame的相关信息。

首先,一类新技术,肯定是伴随着一类待解决的问题的出现而出现,当今虽然已经4G技术已经普及,5G技术也在如火如荼地进展中,但是由于地域的不同,由于设备的不同,并不是每个人的网络都可以无压力地传输高分辨率的视频,也并不是每一台设备需要高分辨率的视频。所以如果按照下图所示,针对于所有的设备和网络都传输同样的分辨率文件的话,那不免会对网络资源造成浪费。

同样,当我们回想起大学宿舍时代,当我们看视频的时候,一旦有人打开迅雷开始下载,那正在看的视频就会出现卡顿,buffering的小花一直没完没了地转,这种情况下,如果视频依然按照原先的分辨率进行传送的话,亦会对用户体验造成不好的影像。

ABS: Adaptive Bitrate Streaming

在实际的流媒体传送中,ABS技术使得我们在观看视频的同时,可以实时地根据我们的网络状况和CPU的能力(capability)相应地调整流的质量。

所以这样的话,我们在源端就得编码出多个bitrate的流,然后客户端根据自己的资源来适时切换到不同的流上面去。这里不同resolution的流称为不同的rendition。

所以在此,问题就被引出来了,当我们网络情况发生变换时,我们应该在流的什么地方进行切换呢?

我们知道,在其他的编码标准中,我们都是从随机接入点(RAP)切入开始解码,RAP是I帧,在VPx中,帧内帧包含KEY帧或者Intra帧,相比起Inter帧,其数据量的大小不是同样一个数量级的,所以正确且恰当地在流中插入Key/Intra帧在ABR中非常重要。

S frame 的出现

首先我们看这么一个例子,我们在解码的时候,先找到RAP帧,此时,如果该帧为IDR帧,则该帧前面的帧均无法作为参考,那么可想而知该帧所包含的数据量巨大,所以说我们如果想把码率降下来,那么就要缩减IDR帧的数量,然后如果缩减了IDR帧的数量的后果就是随机接入的等待实际要变长,这样会降低实时流的用户体验。

为了解决上面的问题,提出了S frame的概念,S frame是用来取代传统I帧或IDR帧的存在(不是完全替代),它作为一个新的随机接入点,解码器可以从它开始解码,它具备IDR帧的优点,但是它会大大减少该随机接入点所需要的数据量。下面引用一句维基百科中的解释:

Switch frames (S-frame) are a new inter-frame type that can be predicted using already decoded reference frames from a higher-resolution version of the same video to allow switching to a lower resolution without the need for a full keyframe at the beginning of a video segment in the adaptive bitrate streaming use case.

从这段说明可以看出来,S frame 它是由高码率的流获取predictor,然后作为新的一路rendition的起点。如下图,当没有S帧的情况下,当想切换到其他码率的码流的时候,我们需要解新一路码流的IDR帧。

但是,当插入了S帧以后,我们就将流分为了更小的一个个segment,这样就方便根据网络情况随时在流中进行切换。


S帧带来的优点

  • 切换到另外的码流更快,质量更好
  • 低延时
  • 有更好的容错

但是随着满足更低的延时带来的的更多插入的S帧,会使得压缩率减少。

过段时间整理下S Frame在AV1中的实现。

[AV1] 谈谈AV1中的 S-Frame相关推荐

  1. html js脚本限制 正则,简单谈谈JS中的正则表达式

    1.正则表达式包括两部分 ①定义正则表达式的规则: ②正则表达式的模式(i/g/m): 2.声明正则表达式 ① 字面量声明: var reg = /表达式规则/表达式模式: eg:var reg = ...

  2. Linux存储保护,谈谈Linux中的存储保护

    谈谈Linux中的存储保护 以下讨论的内容是以i386平台为基础的 Linux将4G的地址划分为用户空间和内核空间两部分.在Linux内核的低版本中(2.0.X),通常0-3G为用户空间,3G-4G为 ...

  3. 谈谈JAVA中的安全发布

    谈谈JAVA中的安全发布 昨天看到一篇文章阐述技术类资料的"等级",看完之后很有共鸣.再加上最近在工作中越发觉得线程安全性的重要性和难以捉摸,又掏出了<Java并发编程实战& ...

  4. Spark精华问答 | 谈谈spark中的宽窄依赖

    总的来说,Spark采用更先进的架构,使得灵活性.易用性.性能等方面都比Hadoop更有优势,有取代Hadoop的趋势,但其稳定性有待进一步提高.我总结,具体表现在如下几个方面. 1 Q:Spark ...

  5. 谈谈C#中的三个关键词new , virtual , override

    谈谈C#中的三个关键词new , virtual , override C#支持单继承,说到继承就不得不说new,virtual和override这三个关键词,灵活正确的使用这三个关键词,可以使程序结 ...

  6. 谈谈java中成员变量与成员方法继承的问题

    谈谈java中成员变量与成员方法继承的问题 关于成员变量和成员方法的的继承问题,我也可以做一个小测试,来看看结果. 首先我们先创建一个父类: 其次再创建一个子类,子类中要比父类中少一个成员方法: 这样 ...

  7. 也谈谈Javascript中的几个怪异特性(上)

    2019独角兽企业重金招聘Python工程师标准>>> Andy Croxall在Ten Oddities And Secrets About JavaScript罗列了他认为的10 ...

  8. 谈谈网络游戏中的延迟解决方案

    谈谈网络游戏中的延迟解决方案 参考文章: (1)谈谈网络游戏中的延迟解决方案 (2)https://www.cnblogs.com/LexMoon/p/wlyx.html 备忘一下.

  9. linux rstudio 中文乱码,谈谈R中的乱码(一)

    原标题:谈谈R中的乱码(一) baidao:个人博客: 数据匠:http://www.baidao.net/ 在R教学中,首先要跨过去的一座大山就是乱码问题.很多学生在装好R和RStudio之后,刚刚 ...

最新文章

  1. Android app动态加载
  2. NLP——基于transformer 的翻译系统
  3. 如何实现搜索列表_图解:如何理解与实现散列表
  4. asp.net 利用Global.asax 捕获整个解决方案中的异常错误
  5. 取消win开机chkdsk is verifying files
  6. 原生js判断css动画结束 css 动画结束的回调函数
  7. mr利用mapjoin计算出每个部门的总工资以及部门名称
  8. linux下的系统监控软件,Linux系统监控工具sysstat
  9. php sublime 插件安装教程,【图片】【Sublime Text 2神器教程】ST安装、插件及操作详解【php吧】_百度贴吧...
  10. python爬取贴吧_Python爬取贴吧(简洁版)
  11. ListView 搜索函数
  12. 使用python往数据库中添加数据
  13. 1.1 半导体基础知识
  14. vue 应用中Throttling navigation to prevent the browser from hanging.问题
  15. Java 如何将线程挂起呢?
  16. 什么是 95计费方式
  17. 计算机专业大学生每天睡多久,大学睡眠时间最少的10大专业,没想到第一名竟是......
  18. 春天正是补气的好时刻,喝枸杞+黄芪就对了
  19. redis的字典(Hash)
  20. Minor GC和Full GC有什么区别?

热门文章

  1. 使用vue解决vs编辑器格式化分号逗号问题
  2. 蓝桥杯 并查集汇总学习 及其代码
  3. 手把手教你学AltiumDesigner之新建元件封装库
  4. progisp编程下载器:芯片识别字不匹配 不能完成芯片擦除
  5. 基于OpenCV的简单机读卡识别
  6. Cocos Creator 热更新文件MD5计算和需要注意的问题
  7. 源支付3.1版本全开源版+店员监控软件+手机监控APP源码
  8. 人脸解锁手机与电影阿丽塔背后的3D原理:云从科技的技术突破
  9. java + jfreechart + itextpdf创建折线图饼图并导出为pdf
  10. 微信iBeaconID-微信官方iBeacon蓝牙基站UUID编码