Youtube / NetFlix如何播放视频?

时间:2016-02-07 17:18:37

标签: video youtube streaming rtmp netflix

我正在开展一个项目,我正在创建一个视频流媒体网络服务。到目前为止我创建的是一种将视频内容同步写入用户流的服务。但是,我的网络服务的工作方式与Youtube / Netflix的工作方式不同。

我只是想知道Youtube / Netflix如何播放视频。这些网站不会直接向用户发送视频内容'浏览器。我正在研究开发人员选项中的网络选项卡,并发现这两个网站都对Web API发出了新请求,并更改了范围标头。任何人都可以告诉我这是如何工作的。

1 个答案:

答案 0 :(得分:8)

从非常高的角度来说,客户端(浏览器,移动应用等)会从服务器请求视频。

由于视频很大且用户不想等到整个视频下载后再播放,大多数客户端都会在客户端有足够的视频时立即启动视频播放能够解码并开始播放。

大多数客户端和服务器现在至少支持HTTP流式传输:

  • 客户端会收到有关视频的信息,包括总文件大小(例如75,000字节)。
  • 客户端最初请求视频的子集 - 例如字节0 - 5000。
  • 客户端接收,解码并开始播放所接收的初始字节。
  • 随着播放的进行,客户端请求视频的下一部分 - 例如字节5001-10,000等等。

自适应比特率流建立在此基础上,以满足不同的网络条件:

  • 服务器包含相同视频的多个副本,以不同的比特率编码,以允许不同的网络速度(较高的比特率通常是更好的质量)。所有视频都被分成相等的长度(从时间上看)块 - 例如2秒钟。
  • 客户端请求有关视频的信息(例如,使用网页中的源URL)并接收索引'或者'显示'文件作为回应。此文件包含指向此视频的所有视频,音频,字幕流等的指针
  • 客户端从清单中列出的一个比特率流请求视频的第一个块。例如,它可能从开头的最低比特率开始,以确保视频快速启动,以防出现网络问题。
  • 如果第一个块成功下载,则客户端将在视频的下一个2秒内请求下一个最高比特率的块。
  • 客户端重复此操作直到达到最高比特率或者看到下载块的延迟,这意味着此比特率对于当前网络条件而言太高。
  • 客户端会在整个播​​放过程中继续监控连接,并根据网络状况逐步或降低比特率。

您实际上可以在YouTube,Netflix等中看到ABR效果:当您启动视频时,您会经常看到质量不如前30秒到一分钟,因为它会提高比特率。

YouTube还有一些很好的统计数据,您可以通过右键点击视频并查看“#s; nerds'”的统计信息来访问。