LinkedIn经过在视频播放过程当中收集的大量数据,对多种视频指标进行实验以提升视频性能,改善用户体验。本文来自LinkedIn工程博客,LiveVideoStack对文章进行了翻译。web
文 / Evan Farina浏览器
翻译 / 元宝微信
原文网络
https://engineering.linkedin.com/blog/2019/01/how-linkedin-uses-data-to-improve-video-performanceide
在LinkedIn,咱们使用数据来改善会员在使用咱们网站时的体验。在视频团队中,咱们看重的是可以洞察咱们的视频须要多长时间加载、为何某些视频比其余视频更受关注、以及咱们的成员如何与网络、iOS和Android上的视频进行交互的指标。简而言之,经过在LinkedIn上播放视频时收集的各类数据点,能够极大地提升视频性能。工具
技术用词性能
这篇文章将提到如下术语,为了方便您,定义以下:学习
iframe:一个能够在内部呈现外部网页内容的元素。这在视频中很是有用,由于它容许咱们直接在咱们的网站内呈现来自第三方(例如Youtube、Vimeo)域的视频。测试
视口:屏幕上可见的网站部分。flex
DOM:将网页表示为由许多内容节点组成的树。
在播放期间捕获数据
咱们的系统捕获反应视频在播放过程当中如何执行的大量数据。咱们发现经过关注如下数据点,咱们已经可以显着提升LinkedIn.com上的视频性能:
媒体初始化开始:当播放器开始初始化时。
对于经过iframe播放的视频(例如第三方视频),此指标会标记iframe首次在页面上呈现的时间。
对于直接在页面上呈现的HTML5或本机视频,此指标会标记视频播放器发出loadstart事件的时间。
媒体初始化结束:播放器初始化完成后。
此度量标准实际上标记了视频发出loadeddata事件的时间。
媒体缓冲开始:媒体在视频播放以前首先开始缓冲。
媒体缓冲结束:在视频开始播放以前,媒体中止缓冲。
开始时间(TTS):播放器初始化和播放器准备播放视频之间的时间。
注意:这是视频在初始化和缓冲上花费的时间总和。
感知的开始时间(PTTS):成员请求播放视频和视频实际开始播放之间的时间。
媒体初始化时间:媒体初始化开始和媒体初始化结束事件之间的时间。
媒体初始化率:一种数据点,用于肯定进入视口并在退出视口以前成功加载视频的百分比。
若是这个比率降低,则会告诉咱们,咱们的视频可能须要很长时间才能加载。
稍后在本文中,咱们将放大一些利用上述许多数据点的实验来改进咱们最重要的指标之一,PTTS。
使用数据来让咱们的会员受益
如今咱们已经积累了大量富有洞察力的视频播放数据,咱们如何使用它来改善咱们会员的体验呢?咱们用两种方法解决这个问题。
详细的实时指标报告
在LinkedIn,咱们利用多种内部工具和服务,使咱们可以实时存储数据并可视化这些数据的变化。其中一个特别有用的工具叫作InGraphs,它容许咱们可视化在产品中收集的许多数据点。
除了InGraphs提供的图表以外,咱们还提供服务,以便在任何核心指标低于预设阈值时通知相关团队。若是咱们发现某个产品中的会员体验出现退化,这些工具可使咱们当即采起行动。
功能的持续A / B测试
咱们不断尝试新功能,并对现有功能进行调整,其首要目标是为咱们的会员提供最佳体验。咱们将指标与InGraphs等报告工具结合使用,能够清晰地描绘出一个给定的实验如何影响整个网站的用户互动。
例如,想象一个虚构的实验,在这个实验中,咱们测试了仅显示每一个成员的Feed中前30个帖子的视频内容的效果。最初看起来彷佛是成功的,由于咱们的会员观看的视频数量增长了。可是,在仔细研究InGraphs以后,咱们注意到咱们的会员共享的帖子数量降低了。经过对这种相关性的理解和对这两种影响的考虑,实验将会由于对会员体验的负面影响而终止
确保咱们的数据准确无误
数据的有用程度取决于它的准确性。若是咱们不能相信咱们存储的数据是准确的,那么就没有基础来测试咱们建立的各类实验。除了上面提到的数据监控服务以外,咱们还大量使用自动(单元,集成和验收)测试来确保给定功能正常工做。正如您所想象的,在开发新功能的过程当中,以LinkedIn的规模手工测试全部现有功能是不可伸缩的。相反,测试用于单独运行的现有功能,并保证经过各类交互,功能可以按预期地执行。例如,咱们能够编写一个测试,它断言单击视频的播放按钮会致使视频开始播放,并捕获有关视频加载性能的数据。所以,自动化测试使咱们的工程师可以保证在建立功能后很长时间内,其功能发出的指标是准确的。除了自动化测试以外,LinkedIn工程师还有一些方便使用的工具(请参阅以前博客文章中提到的跟踪覆盖大规模的工程基础设施 https://engineering.linkedin.com/blog/2016/11/engineering-infrastructure-at-scale--test-tracking),以便于验证给定功能发出的指标。
使用数据获取视频性能
因为视频资源的天然大小,视频性能须要一种独特的方法:咱们须要一种方法来下载足够的视频,以便它当即开始播放,同时还确保咱们不会减慢在页面上呈现元素的速度。
案例研究:感知开始时间(PTTS)
在LinkedIn,咱们测量感知加载时间,以了解咱们的会员等待视频播放的时间。咱们用来深刻了解视频加载时间的主要指标是感知启动时间(PTTS)。PTTS测量浏览器下载视频所需的时间,以及视频在播放前缓冲的时间。
让咱们看一下上面的图表,它提供了一些特定会员等待加载视频的经验。一旦视频进入视口,视频初始化须要2,700ms,而后在视频开始播放以前再进行3,300ms的视频缓冲。在这种状况下,PTTS大约是6,000毫秒。咱们如今可使用此指标以及其余的数百万个数据点,做为加速视频加载实验的基本指南。让咱们看一下咱们运行的几个实验。
急切加载DOM中的全部视频
在LinkedIn,咱们已经尝试了预先加载视频的和延迟加载视频。预先加载视频是在视频进入DOM后当即开始下载视频。这与延迟加载不一样,经过该加载,视频在进入视口以前不会下载。预先加载容许视频在进入视口以前在后台加载。这提供了很好的用户体验,由于视频一进入视口就会开始播放,几乎没有缓冲。乍一看,这个实验是成功的,由于它减小了PTTS,意味着视频开始播放的时间更短了。然而,当咱们仔细研究指标时,咱们发现了一些有趣的结果。虽然带宽较强的会员确实享受PTTS的减小,但带宽较弱的那些媒体初始化速率下降,媒体初始化时间增长。想象一下,例如,一名会员在乘坐地铁时在他或她的手机上滚动LinkedIn Feed。鉴于地铁的互联网链接较弱,会员在加载内容方面已经面临滞后,更不用说视频资产了。在急切加载的状况下,咱们不只在视口中下载内容,咱们还尝试在幕后加载视频。正如您想象的那样,这会对成员相对较弱的链接施加过大的负载,从而可能致使没有任何Feed的帖子加载。这种现象解释了前面提到的媒体初始化率降低和媒体初始化时间增长,这也是咱们下一次实验的动机。
排队视频加载
排队加载是一种加载策略,在这种策略中,视频被添加到加载队列中,并一次加载一个,而不是一次加载DOM中的全部视频(如预先加载的状况)。排队加载旨在结合预先加载(减小的PTTS)和延迟加载(对于网络带宽较少的成员更容易访问)的好处。它经过在视口外部加载视频来完成此操做,但只有在视口中的视频成功加载后才能这样作。对于排队加载,咱们观察到PTTS略有增长,多是由于视口外部加载的视频较少,但媒体初始化率增长,而网络链接较弱的成员的媒体初始化时间减小。
结论
因为视频资源的大尺寸以及对其快速加载而不会对网站其余部分的速度形成负面影响的指望,使得视频性能成为一个固有的难以解决的问题。为了进一步使问题复杂化,咱们还必须在运行与性能相关的实验以前,考虑网络速度和浏览器功能方面的差别,以及成员使用站点的不一样方式。经过正确使用数据,咱们能够快速查明并迭代性能降低,同时确保在此过程当中不会出现性能退化。
致谢
我要感谢Shane Afsar和Kris Teehan在撰写这篇文章时给予的帮助,以及Kevin O'Connell和LinkedIn工程博客团队在编辑这篇文章时提供的帮助。向纽约的视频团队致敬,他们不懈地致力于提升视频性能和总体视频体验。
精品文章推荐
技术干货:
本文分享自微信公众号 - LiveVideoStack(livevideostack)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。