视频平台会侦测用户端的带宽来调整码率及分辨率,但通常只考虑到编码器的比特率率--质量关联,忽略了用户的可用带宽影响。YouTube团队通过让视频流匹配用户带宽,不仅节省了带宽,还有效提升了用户主观体验。LiveVideoStack原文进行了编译。

文 / Balu Adsumilli, Steve Benting, Chao Chen, Anil Kokaram, and Yao-Chung Lin

译 / 金歌

YouTube致力于在消耗最低带宽的前提下,提供最佳的视频体验。实现这一目标的一种做法是在优化视频时同时考虑可用带宽的约束。最近我们的确提升了视频流的传输性能——通过优化视频本身使其与可用带宽更加的匹配,从而提供了更高的视频的(观看)质量。

当您观看视频时,YouTube的播放器会在客户端测量当前的带宽,同时结合用户的终端设备、解码能力、处理能力等,动态选择最佳的视频块,从而能以足够快的速度进行下载。YouTube制作具有不同分辨率的多个视频,分辨率高的视频对应编码比特率也更高。

图1:基于HTTP的自适应视频流

针对特定的分辨率,Youtube会选择使用多少比特来进行编码呢(在编码器允许的范围内)?对于一个给定的分辨率,更高的比特率通常意味着更高的视频质量,但这种视频质量的提升有一个上限。超过这一上限后,进一步提高比特率只会使得视频块更大,并不能提升视频的视觉效果。当我们选择某一分辨率下的编码比特率时,我们会在相应的比特率--质量曲线上选择最优点(参见图2),超过这个最优点后,继续增加比特率并不能使图片视觉效果更好。

图2:在给定视频编解码器的情况下,某一视频块在不同编码分辨率下的比率--质量曲线。

我们找到了图中这些最优点,但在观察过人们观看视频的方式后,我们意识到(其实)我们可以更高效地传输视觉效果更出色的视频。

这些最优点是在假设用户的带宽不受限的前提下获得的,然而,如果我们仅仅依据这些最优点来设定编码比特率,我们会发现实际的视频质量常常受限于用户的带宽限制。相反,在给定用户带宽分布(传输带宽)的前提下,如果选择最佳的操作点(而不是曲线中的最优点),我们通常能获得更好的视频观看体验(传输视频质量)。

可以借助图3来理解这一点,我们将用户可用的带宽想象为图3中所示的管道。鉴于管道的容量适合360p的视频块而不是480p的视频块,我们可以通过估计流式传输的带宽来调整480p视频块的大小,从而使其更适应管道的容量,由此提高用户所观看到的分辨率。我们解决了由此所产生的约束优化问题,以确保视频质量没有受到明显的可感知的影响。简言之,通过分析汇总的播放统计数据并相应地调整不同分辨率下的比特率,我们实现了将更高质量的视频传输给更多的用户。(注1)

图3:高效流媒体方案对比图(使用/不使用本方法)

可以借助图4中给出的例子来理解流式传输的带宽与单个观看者带宽的区别。给定测量出的观看者可用带宽的分布情况,可以使用相邻分辨率的编码比特率之间的区域来估计实际播放分辨率的分布情况。

我们能够通过播放的统计数据对播放器在不同分辨率之间切换时的行为进行建模。这使我们能够有效预测何时比特率的提高易使得播放器切换到较低的分辨率,从而消除某一分辨率下提高比特率所带来的(负面)影响。基于这一模型,我们能够在实际系统中更好的选择视频(码率)的操作点。

图4:例如,给定分辨率720p,我们可以根据带宽的概率密度函数来估计不同分辨率下播放的分布情况。使用不同视频版本的编码比特率来划分横轴带宽,每个视频版本被观看的概率可以用带宽曲线下的对应区域来表示。

另一个容易混淆的地方是每个操作点都对应一个估计的传输质量,而这与视频编码质量是不一样的。当用户的可用带宽降低时,用户更倾向于切换到更低的视频分辨率,此时会得到一个新的操作点。这种切换对每个分辨率的编码质量不会有影响,但是却会影响视频的传输质量。

图5:编码器优化系统

在图5中,码率-质量分析模块以待编码的视频作为输出,同时为每个分辨率产生一条码率-质量曲线。性能估计模块结合码率-质量分析模块产生的码率-质量曲线,以及观看视频率和流式传输带宽的分布,估计出可能的操作点,最后通过非线性优化器选择出可能的最佳操作点。

系统的输出结果是各个分辨率下最佳操作点的集合。优化算法可以被设定为用于在视频传输质量受限的情况下,最大限度地减少平均流媒体带宽,或者用于在流式传输带宽预算受限的情况下,最大限度地提升视频的传输质量。

当我们使用此系统处理高清视频时,我们成功将YouTube播放中的流式传输带宽减少了14%。这一带宽的减少将有助于降低观众在观看YouTube视频时的数据消耗,这对于数据总量受限的用户尤为有帮助。我们还观察到高清分辨率视频的观看时间增长了6%,这是因为更多人能够在固定和移动网络上传输更高分辨率的视频。

这种方法的另一大好处是提升了观看体验。 除了对传输质量的影响极小之外,这些视频的加载速度提高了5%,卡顿的次数却减少了12%。

//反序列化,从流中的二进制转换成IntPair
public void readFields(DataInput in) throws IOException

//序列化,将IntPair转化成使用流传送的二进制
public void write(www.tkcyl1.com/ DataOutput out)

//key的比较
public int www.douniu178.com  compareTo(IntPair o)

//默认的分区类 HashPartitioner,使用此方法
public int www.leyouzaixan.cn www.chushiyl.cn hashCode()

//默认实现
public boolean equals(www.chushiyl.cn Object right)

2、自定义分区

自定义分区函数类 FirstPartitioner,是 key 的第一次比较,完成对所有 key 的排序。

public static class FirstPartitioner extends Partitioner< IntPair,IntWritable>

在 job 中使用 setPartitionerClasss()方法设置 Partitioner。

job.setPartitionerClasss(FirstPartitioner.Class);

我们在提高视频流传输效率方面取得了进展。 但我们想做的还有更多。

目前我们的优化方法基于全球范围内观看者的带宽和播放器的分辨率的分布情况。 但有时视频的观看是有区域性的。例如,某一受欢迎的印度音乐视频可能不会在巴西流行起来,而某一西班牙体育赛事的视频也不太可能在越南多次播放。带宽与播放器分辨率的分布情况因国而异。倘若我们能够准确预测某一视频将在哪些地理区域流行起来,那么我们便可以通过整合当地的带宽统计数据,更好地处理这些视频。我们正在对这一方案进行研究,以便为您带来更好的视频观看体验!

注1:Chao Chen, Yao-Chung Lin, Anil Kokaram and Steve Benting, "Encoding Bitrate Optimization Using Playback Statistics for HTTP-based Adaptive Video Streaming," Arxiv, 2017

WebRTCon 2018  上海,期待与你相遇

继2017年第一届LiveVideoStackCon音视频技术大会之后,LiveVideoStack又一次出发——WebRTCon 2018,将于5月在上海举行,这是一次对过去几年WebRTC技术实践与应用落地的总结。

WebRTCon 2018设立了主题演讲,WebRTC与前端,行业应用专场,测试监控和服务保障,娱乐多媒体开发应用实践,WebRTC深度开发,解决方案专场,WebRTC服务端开发,新技术跨界,WebRTC与Codec等多个专场。邀请30余位全球领先的WebRTC技术专家,为参会者带来全球同步的技术实践与趋势解读。

YouTube高效传输策略:节省14%带宽 用户体验提升的更多相关文章

  1. paip.提升用户体验--提升java的热部署热更新能力

    paip.提升用户体验--提升java的热部署热更新能力 想让java做到php那么好的热部署能力  "fix online"/在线修复吗??直接在服务器上修改源码生效,无需重启应 ...

  2. (转)iOS Wow体验 - 第三章 - 用户体验的差异化策略

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第三章译文精选,其余章节将陆续放出.上一篇:Wow ...

  3. ios用户体验

    如果转载此文,请注明出处:http://blog.csdn.net/paulery2012/article/details/25157347,谢谢! 前言: 本文是在阅读<ios用户体验> ...

  4. 《iOS用户体验》总结与思考-改动版

    假设转载此文.请注明出处:http://blog.csdn.net/paulery2012/article/details/25157347,谢谢. 前言: 本文是在阅读<ios用户体验> ...

  5. s6-7 TCP 传输策略

    TCP 传输策略 防止黏包现象的出现 当窗口数为 0 时,发送者不能正常发送数据段,除非: -Urgent数据.比如,用户想杀掉远端机器上的进程的时候,可以发送数据 -发送者可以发送一个字节的数据段, ...

  6. 改善用户体验 Web前端优化策略总结

    前端是庞大的,包括HTML.CSS.Javascript.Image.Flash等等各种各样的资源.前端优化是复杂的,针对方方面面的资源都有不同的方式.那么,前端优化的目的是什么? 1. 从用户角度而 ...

  7. 提升网站用户体验—WebP 图片的高效使用

    一.WebP 的由来 现代图像压缩技术对我们的生活方式影响很大.数码相机能将上千张高质量图片存储到一张内存卡里.智能手机可以与邻近设备快速分享高分辨率的图片.网站与手机等移动设备能快速展示各种富媒体. ...

  8. 简单实现TCP下的大文件高效传输

    简单实现TCP下的大文件高效传输 在TCP下进行大文件传输不象小文件那样直接打包个BUFFER发送出去,因为文件比较大所以不可能把文件读到一个BUFFER发送出去.主要有些文件的大小可能是1G,2G或 ...

  9. 乐视4.14硬件免费日de用户体验

    此贴用于记录2016年4月14日乐视硬件免费日购买X65超级电视的用户体验.后续将动态更新 我是乐视电视的第一批用户,从乐视上市第一批超级电视,我先后帮助家人.同事.朋友买了6台乐视超级电视,也算是乐 ...

随机推荐

  1. ABAP 调用远程rfc

    ABAP 调用rfc DESTINATION附加项后面接的是远程目标名称,该目标在事务SM59中设定,其中包含连接和登录远程系统所需的全部参数信息.如果调用的就是本机的RFC目标,则DESTINATI ...

  2. SpringMVC系列一

    首先介绍一下SpringMVC的执行流程:如图 1.用户在客户端发送请求,经过前端控制器DispatcherServlet,请求处理器处理,返回ModelAndView返回结果到前端控制器: 2.前端 ...

  3. tomcat7下载地址

    tomcat7下载地址:https://tomcat.apache.org/download-70.cgi

  4. PHP时间日期操作增减(date strtotime) 加一天 加一月

    date_default_timezone_set('PRC'); //默认时区 //当前的时间增加5天 $date1 = "2014-11-11"; echo date('Y-m ...

  5. Linux下MySQL安装及配置

    Linux下MySQL安装及配置 安装MySQL Ubuntu系统中,直接使用apt install的方式去安装MySQL的服务端和客户端,MySQL的客户端必须安装,否则无法通过命令连接并操作MyS ...

  6. python 函数的嵌套 和 作用域链

    # def max(a,b): # return a if a>b else b # # def the_max(x,y,z): #函数的嵌套调用 # c = max(x,y) # return ...

  7. python Re库的介绍

    re库的贪婪匹配和最小匹配 后面跟着?变为最小匹配

  8. python基础之模块part1

    模块: 模块本质上就是一个Python程序. 所有说是对象的,一定可以通过  对象.方法  来实现某些操作. 模块种类: 内置模块 第三方模块 自定义模块 import在查找模块的顺序:内置模块--- ...

  9. scala初体验-02

    上一节,我们讲了scala的安装的即一些初步方法,今天,我们来介绍一下scala里面的一些基本操作 1.对于map的的编写,这个是广泛用于Array里面的 val arr = Array(1,2,3, ...

  10. 分布式爬虫:使用Scrapy抓取数据

    分布式爬虫:使用Scrapy抓取数据 Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘. ...