YouTube如何轻松处理每天流过4,000,000,000个视频的视频。

YouTube是视频播放的庞然大物。 它是第二大最受欢迎的搜索引擎,比Yahoo,Bing和Ask.com的总和还大,每天的浏览量超过40亿。 YouTube多年来已经取得了很大的进步,本文旨在展示使YouTube播放成为市场上最流畅和令人愉悦的播放之一的各种组件。 在本文中,我们探讨了可实现的技术和设计理念的子集。
YouTube成长为真正的巨人。

YouTube流媒体

1.转码和流式传输

代码转换是一个笼统的术语,涉及其他过程,例如代码转换,转换和转换大小。

  • 转码将视频和音频格式更改为一种更流行或更易于操作的格式,例如mkv到flv。
  • 转换着重于降低视频和音频的比特率,同时保持原始媒体格式,例如13Mbps的4K到6Mbps的4K都保持相同的格式。
  • 转换大小 涉及将视频帧从4K减少到2K或1080p,720p等。

YouTube利用FFmpeg进行转码。 转码的好处是流媒体。 例如,如果您打算直接将实时Fortnite BR游戏流直接传输给观看者,则录制的视频和声音的属性可能与预期的观看者不匹配。 您的视频录制软件可能会产生1080p H.264视频,该视频可能需要很长时间才能下载到用户的计算机上(因为未正确转换其大小和大小) 。 此外,如果您的音频格式为.aac,则某些用户可能无法解码音频。 Twitch / YouTube等流媒体站点充当中介,它们执行所有转码,以确保观看者可以检索其适当格式的视频。

YouTube通过使用可以高度并行化方式执行任务的基础架构,立即完善了对大型视频和音频文件进行转码的技术。 这可以通过以下方式实现:将您要上传的输入视频分割成几个较小的片段,在每个较小的片段上进行转码,然后将它们拼接在一起。 他们有一系列针对此过程进行了优化的机器,这就是为什么您可以在几乎不中断的情况下观看1080p的SpaceX实时流的原因。

2.分块视频播放和缓冲栏

在YouTube兴起时,整个网站无处不在的视频中,视频会使用ActionScript中的HTTP函数netStream.play()整段发送给用户。 ActionScript 是用于编写Flash程序的编程语言。)这会将整个视频发送到您的计算机,就像从任何网站下载视频文件一样。

如今,YouTube将视频分成较小的部分。 这就是所谓的分块,它将视频分割成可用范围,例如每块2 MB。 这具有将超额发送减少5%的额外好处,并且在每秒处理大量请求的世界中,这是一个巨大的节省。 分块还具有启用浏览器缓存的额外好处-由于将视频分割成更易于管理的较小片段,因此Web浏览器更有能力将这些块用作专用缓存。 这意味着,如果用户决定将播放光标回滚到开头,浏览器可以自动从缓存中检索视频的该部分并为您播放,而无需再次与该部分的YouTube联系。

图1: Youtube播放中的缓冲栏(浅灰色)

有趣的事实:缓冲区栏显示为浅灰色栏,位于红色视频进度栏的前面( 左图 1 ),显示了已在浏览器的缓存中下载了多少视频。

默认情况下,YouTube也会在您登陆首页时开始在屏幕上下载一小段视频。 某些浏览器默认情况下也会执行此操作,因此,当您在页面上随机选择视频时,该视频已经加载了前几秒钟,并且可以开始检索更多视频。

YouTube在2012年发现的一件有趣的事情是,尝试将40秒钟以上的视频加载到缓冲存储器中会使大多数Flash插件崩溃。 YouTube不再使用Flash,我将在第5节中深入讨论它们当前的替代方案。

3.自适应比特率流

您是否曾经在YouTube上观看过视频并开始播放所有质量不佳的视频,例如240p (对我的240p工作人员大喊大叫) ,但是随着视频的进行,视频的质量可能会提高到720p或更高? 这种现象称为自适应比特率流(ABS),用于根据网络速度的质量提供最佳的用户体验。 YouTube知道,停止视频并重新加载不仅令人沮丧,而且可能导致用户退出该应用程序。 因此,他们准备为持续参与而牺牲一些品质。 我在计算机视觉课程中了解到的一件事是,即使从图像和声音中提取了重要的细节,人类也非常擅长正确地解释图像和声音的内容。 不相信我吗? 检查以下图像。

图2:图像压缩

您可以成功删除图像中96%的细节,并且仍然能够准确地根据所显示的内容进行上下文处理。 作为人类,这是一个非常重要的属性,YouTube和Netflix等流媒体服务使用此属性将高度压缩的内容流回给我们,从而节省了带宽和延迟。 这样可以最大程度地提高用户参与度和体验。 他们决定压缩图像并将其发送回的程度取决于自适应比特率流展示的一些因素。 看下面的图3中的图,

图3:自适应流图。 | 维基百科

随着时间的流逝,如果带宽增加,则YouTube可以发送高比特率的流(即更高质量的视频),因为网络拥塞加剧,例如您的弟弟决定下载整个Fortnite DLC,YouTube服务器通过降低正在发送的视频。 YouTube还会获取您的屏幕尺寸并进行调整,因此,如果您的屏幕为720p,则YouTube不会发送分辨率更高的视频(例如1080p或更高的视频),因为这不仅会给GPU / CPU带来压力,还会耗尽电池,但质量上不会有明显差异。

有趣的事实:

  • 比特率还取决于计算机的CPU能力和容量。 因此,即使您的网络速度很快,速度较慢/较旧的计算机也很难显示高质量的视频。
  • 大多数(如果不是全部)计算机在初次尝试访问媒体时自然会选择最低质量的比特率。 然后根据带宽质量进行改进。 有时您在Instagram上打开它时会看到此图像,它们会显示模糊的图像,并且随着带宽的提高,完整的图像将被还原。
  • YouTube将所有不同格式的视频保存在一台机器上。 从分布式系统的角度来看,这是不寻常的,因为您希望它可以分布在世界各地。 其背后的原因是,它避免了在世界各地的不同计算机上使用不同格式的问题,在这些计算机上,每个副本的检索都有其自身的延迟问题。

4. QUIC传输协议

QUIC是Google于2013年发布的开发的传输层网络协议。QUIC的想法是,它将TCP带来的面向连接的方法尝试将UDP所具有的少量往返时间的好处融合在一起。 如今,将近75%的连接使用TCP和传输层安全性(TLS)进行连接和安全性。 这种方法的问题在于,它需要3次往返,才能将数据实际发送给用户。 如果连接到同一原始服务器,则QUIC可以实现此零往返时间(RTT)。 另外,TCP的一个大问题是连接开始丢弃数据包的那一刻,TCP限制了该连接的速度,而其他则降低了速度以防止这种情况的发生。 QUIC通过将拥塞控制的角色转移到应用程序级别(对于您的计算机/浏览器,而不是实际的网络),来避免这种情况。 随着越来越多的网络开始采用该协议,该协议正在迅速发展。

图4:采用QUIC | OpenWave移动性

截至2016年,YouTube使其成为YouTube Android应用程序的事实上的协议。 网络层选择还有更多的想法。 尽管有益,但QUIC不会完全取代TCP / TLS,因为YouTube已找到方法,可以通过使用复杂的视频预提取技术来绕过TCP / TLS所带来的延迟问题,从而减少与TCP / TLS连接相关的弊端。 Santiago Bouzas的一篇文章报告说,QUIC带来的0 RTT受益于65%的Android设备和85%的台式机设备。

图5: YouTube正在使用QUIC

我在开普敦的笔记本电脑上进行了快速试用,并使用了名为cURL的工具来获取视频信息。 请注意,最后alt-svc: quic=":443"显示alt-svc: quic=":443" 。这表明QUIC正在用于通过保留TLS的端口…端口443来协商与YouTube的连接。

5. HTML5的兴起

如前所述,YouTube高度依赖Flash,但是随着HTML5成为主流,它带来了简单性和功能性,大大提高了效率。

  1. 跨源资源共享(CORS)-向任何Web开发人员询问有关CORS的信息,冷冷的寒气会使他们的脊梁滑落。 浏览器通常需要从其他服务器加载资源,例如图像,视频,字体等。尽管这很有用,但在安全性方面可能会出现问题。 如果您加载的页面从受感染或不安全的浏览器请求资源会怎样? 这是巨大的风险,而CORS是浏览器采取的高度严格的安全措施,可以防止这种情况的发生。 CORS确保如果您要向google.com查询某些信息,则运行google.com的服务器无法向未知服务器打开另一个请求并将其链接到该服务器。 在使用Flash之前,YouTube服务器需要访问并批准一项资源策略,以便该资源策略可以访问存储在YouTube众多服务器上的视频。 访问此策略文件将花费一些时间来解决导致延迟的问题。 HTML5解决了这一问题,因为对YouTube的请求现在可以在HTTP标头中包含CORS“策略”,并且服务器可以立即做出适当的响应,从而避免了访问基于Flash的请求所引用的策略的需求。
  2. 媒体源扩展名 (MSE)-Google开发者文档将MSE描述为一种基于JavaScript的API,使开发人员能够构建要播放的流。 如前所述,MSE支持自适应比特率流传输,并在视频中无缝插入广告。 它使用具有附加功能的源缓冲区,因此可以分别下载媒体块(前面提到)并彼此附加。

6.边缘节点(Google全局缓存或GGC)

GGC扩展了Google的基础架构,使其尽可能接近用户。 Wired报道说,一般来说,将来自世界各地的数百万个请求发送到有限数量的Google数据中心效率不高。 ISP和网络提供商,例如Comcast,AT&T和世界各地的其他公司,可以在其设施内部署Google提供的服务器,以利用高速的Google基础架构。

图6: Google的边缘节点| 谷歌

因此,如果您要在您所在地区流行的YouTube视频。 它很有可能来自您当地的ISP或网络提供商,而不是Google本身。 Google的流量管理系统将用户请求定向到提供最佳体验的边缘节点。 Google在全球范围内拥有其中的几种, 如图6(左)所示 。 来自特定区域的经常访问的(受欢迎的)内容将被缓存在发出请求的用户附近的GGC处。 内容分发网络(CDN)也通过将经常访问的内容存储在用户附近来以相同的方式工作。

有趣的事实:视频服务器选择策略使用复杂的算法来确定哪种方法最有效地将视频提供给客户。 这可能并不总是Edge位置离您最近。

结论

YouTube可以使用更多技术来优化其播放和流传输,但我只能尝试其中的几种。 YouTube之所以成为媒体巨头,是因为其易于使用和访问。 由于其无缝的效率,因此没有像YouTube这样的地球上的视频平台。 因此,下次您在播放时看到缓冲区时,还是想知道为什么图像质量突然变得更好。 您将确切地知道为什么!

附加链接

YouTube –每秒
编辑描述 www.everysecond.io