[AV1] 谈谈AV1中的 S-Frame
前几天在看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相关推荐
- html js脚本限制 正则,简单谈谈JS中的正则表达式
1.正则表达式包括两部分 ①定义正则表达式的规则: ②正则表达式的模式(i/g/m): 2.声明正则表达式 ① 字面量声明: var reg = /表达式规则/表达式模式: eg:var reg = ...
- Linux存储保护,谈谈Linux中的存储保护
谈谈Linux中的存储保护 以下讨论的内容是以i386平台为基础的 Linux将4G的地址划分为用户空间和内核空间两部分.在Linux内核的低版本中(2.0.X),通常0-3G为用户空间,3G-4G为 ...
- 谈谈JAVA中的安全发布
谈谈JAVA中的安全发布 昨天看到一篇文章阐述技术类资料的"等级",看完之后很有共鸣.再加上最近在工作中越发觉得线程安全性的重要性和难以捉摸,又掏出了<Java并发编程实战& ...
- Spark精华问答 | 谈谈spark中的宽窄依赖
总的来说,Spark采用更先进的架构,使得灵活性.易用性.性能等方面都比Hadoop更有优势,有取代Hadoop的趋势,但其稳定性有待进一步提高.我总结,具体表现在如下几个方面. 1 Q:Spark ...
- 谈谈C#中的三个关键词new , virtual , override
谈谈C#中的三个关键词new , virtual , override C#支持单继承,说到继承就不得不说new,virtual和override这三个关键词,灵活正确的使用这三个关键词,可以使程序结 ...
- 谈谈java中成员变量与成员方法继承的问题
谈谈java中成员变量与成员方法继承的问题 关于成员变量和成员方法的的继承问题,我也可以做一个小测试,来看看结果. 首先我们先创建一个父类: 其次再创建一个子类,子类中要比父类中少一个成员方法: 这样 ...
- 也谈谈Javascript中的几个怪异特性(上)
2019独角兽企业重金招聘Python工程师标准>>> Andy Croxall在Ten Oddities And Secrets About JavaScript罗列了他认为的10 ...
- 谈谈网络游戏中的延迟解决方案
谈谈网络游戏中的延迟解决方案 参考文章: (1)谈谈网络游戏中的延迟解决方案 (2)https://www.cnblogs.com/LexMoon/p/wlyx.html 备忘一下.
- linux rstudio 中文乱码,谈谈R中的乱码(一)
原标题:谈谈R中的乱码(一) baidao:个人博客: 数据匠:http://www.baidao.net/ 在R教学中,首先要跨过去的一座大山就是乱码问题.很多学生在装好R和RStudio之后,刚刚 ...
最新文章
- Android app动态加载
- NLP——基于transformer 的翻译系统
- 如何实现搜索列表_图解:如何理解与实现散列表
- asp.net 利用Global.asax 捕获整个解决方案中的异常错误
- 取消win开机chkdsk is verifying files
- 原生js判断css动画结束 css 动画结束的回调函数
- mr利用mapjoin计算出每个部门的总工资以及部门名称
- linux下的系统监控软件,Linux系统监控工具sysstat
- php sublime 插件安装教程,【图片】【Sublime Text 2神器教程】ST安装、插件及操作详解【php吧】_百度贴吧...
- python爬取贴吧_Python爬取贴吧(简洁版)
- ListView 搜索函数
- 使用python往数据库中添加数据
- 1.1	半导体基础知识
- vue 应用中Throttling navigation to prevent the browser from hanging.问题
- Java 如何将线程挂起呢?
- 什么是 95计费方式
- 计算机专业大学生每天睡多久,大学睡眠时间最少的10大专业,没想到第一名竟是......
- 春天正是补气的好时刻,喝枸杞+黄芪就对了
- redis的字典(Hash)
- Minor GC和Full GC有什么区别?
热门文章
- 使用vue解决vs编辑器格式化分号逗号问题
- 蓝桥杯 并查集汇总学习 及其代码
- 手把手教你学AltiumDesigner之新建元件封装库
- progisp编程下载器:芯片识别字不匹配 不能完成芯片擦除
- 基于OpenCV的简单机读卡识别
- Cocos Creator 热更新文件MD5计算和需要注意的问题
- 源支付3.1版本全开源版+店员监控软件+手机监控APP源码
- 人脸解锁手机与电影阿丽塔背后的3D原理:云从科技的技术突破
- java + jfreechart + itextpdf创建折线图饼图并导出为pdf
- 微信iBeaconID-微信官方iBeacon蓝牙基站UUID编码