Youtube/NetFlix如何播放视频?

Din*_*rma 4 youtube video streaming rtmp netflix

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

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

Mic*_*ick 10

在非常高级别的术语中,客户端(浏览器,移动应用程序等)从服务器请求视频.

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

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

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

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

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

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

YouTube还有一些很好的统计数据,您可以通过右键点击视频并查看"统计数据来获取书呆子"来访问这些统计数据.