YouTube高效传输策略:节省14%带宽 用户体验提升
视频平台会侦测用户端的带宽来调整码率及分辨率,但通常只考虑到编码器的比特率率--质量关联,忽略了用户的可用带宽影响。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%带宽 用户体验提升的更多相关文章
- paip.提升用户体验--提升java的热部署热更新能力
paip.提升用户体验--提升java的热部署热更新能力 想让java做到php那么好的热部署能力 "fix online"/在线修复吗??直接在服务器上修改源码生效,无需重启应 ...
- (转)iOS Wow体验 - 第三章 - 用户体验的差异化策略
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第三章译文精选,其余章节将陆续放出.上一篇:Wow ...
- ios用户体验
如果转载此文,请注明出处:http://blog.csdn.net/paulery2012/article/details/25157347,谢谢! 前言: 本文是在阅读<ios用户体验> ...
- 《iOS用户体验》总结与思考-改动版
假设转载此文.请注明出处:http://blog.csdn.net/paulery2012/article/details/25157347,谢谢. 前言: 本文是在阅读<ios用户体验> ...
- s6-7 TCP 传输策略
TCP 传输策略 防止黏包现象的出现 当窗口数为 0 时,发送者不能正常发送数据段,除非: -Urgent数据.比如,用户想杀掉远端机器上的进程的时候,可以发送数据 -发送者可以发送一个字节的数据段, ...
- 改善用户体验 Web前端优化策略总结
前端是庞大的,包括HTML.CSS.Javascript.Image.Flash等等各种各样的资源.前端优化是复杂的,针对方方面面的资源都有不同的方式.那么,前端优化的目的是什么? 1. 从用户角度而 ...
- 提升网站用户体验—WebP 图片的高效使用
一.WebP 的由来 现代图像压缩技术对我们的生活方式影响很大.数码相机能将上千张高质量图片存储到一张内存卡里.智能手机可以与邻近设备快速分享高分辨率的图片.网站与手机等移动设备能快速展示各种富媒体. ...
- 简单实现TCP下的大文件高效传输
简单实现TCP下的大文件高效传输 在TCP下进行大文件传输不象小文件那样直接打包个BUFFER发送出去,因为文件比较大所以不可能把文件读到一个BUFFER发送出去.主要有些文件的大小可能是1G,2G或 ...
- 乐视4.14硬件免费日de用户体验
此贴用于记录2016年4月14日乐视硬件免费日购买X65超级电视的用户体验.后续将动态更新 我是乐视电视的第一批用户,从乐视上市第一批超级电视,我先后帮助家人.同事.朋友买了6台乐视超级电视,也算是乐 ...
随机推荐
- IOS开发中缓存策略
为了节约流量,同时也是为了更好的用户体验,目前很多应用都使用本地缓存机制,其中以网易新闻的缓存功能最为出色.我自己的应用也想加入本地缓存的功能,于是我从网上查阅了相关的资料,发现总体上说有两种方法.一 ...
- HDU.3177Crixalis's Equipment(贪心)
题目来源:3177 题目分析:一只蝎子要搬动一堆装备到一个容量为V的洞里面,每个装备有两个属性,一个是固有体积A,放置之后洞的剩余空间就会减少A,一个是移动体积B,只有当体积B小于等于当前洞的剩余体积 ...
- What is EJB
What is EJB 0.什么是EJB? 答:EJB是用于构建企业应用程序模块托管的.服务器端组件架构.EJB技术加速并简化了开发基于Java技术的分布式.事务性.安全和便携的应用程序. 先看一下E ...
- $.each() 循环遍历完后阻止再执行的办法
jquery each循环遍历完再执行的方法 因为each是异步的 所以要加计数器. query each循环遍历完再执行的方法 因为each是异步的 所以要加计数器.var eachcount=0; ...
- zeppelin ERROR总结
ERROR [2017-03-23 20:01:50,799] ({qtp331657670-221} NotebookServer.java[onMessage]:221) - Can't hand ...
- linux文件共享之samba,nfs的搭建
Samba server简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局 ...
- 微信网页授权access_token与基础支持的access_token
问题1:网页授权access_token与分享的jssdk中的access_token一样吗? 答:不一样.网页授权access_token 是一次性的,而基础支持的access_token的是有时间 ...
- LInux操作随手笔记
一.find 的用法 实例 find / -name test.txt 就可以找到这个文件的路径(如果存在). 二.学用vi编辑器,学用rz往linux服务器上面上传文件 linux中rz 和 sz ...
- Cache、Buffer的区别
什么是Cache?什么是Buffer?二者的区别是什么? Buffer和Cache的区别 buffer与cache操作的对象就不一样. 1.buffer(缓冲)是为了提高内存和硬盘(或其他I/O设备) ...
- python-11多线程
1-多任务可以由多进程完成,也可以由一个进程内的多线程完成. 1.1多线程代码示例 import time, threading def loop(): print("thread %s i ...