互联网上的流媒体视频是如何工作? - Quastor


Leandro Moreira是 Globo 的首席软件工程师,负责他们的实时视频流媒体平台和基础设施。
他写了一篇很棒的博客文章,介绍了视频如何在您的计算机上播放(自适应比特率流、HLS 等)、视频如何传送到您的计算机(CDN、多 CDN 等)以及如何处理电影背后的所有工程成数字视频(编解码器、容器、FFMPEG 等)。
下面是部分的摘要:
 
播放
当您遇到一个嵌入了视频播放器的网站时,幕后会发生很多事情。
您拥有播放器 UI,带有暂停/播放按钮、字幕控件、视频速度和其他选项。
玩家将支持围绕 DRM、广告注入、缩略图预览等的不同选项。
在幕后,现代视频平台将使用自适应比特率流从服务器流式传输视频。
自适应比特率流意味着服务器有多个不同版本的视频(称为再现),每个版本的显示大小(分辨率)和文件大小(比特率)都不同。
视频播放器将根据用户的屏幕尺寸和带宽动态选择最佳再现。它将选择最小化缓冲并提供最佳用户体验的再现。
 
HLS
HTTP Live Streaming (HLS)是 Apple 为基于 HTTP 的自适应比特率流设计的协议。它是互联网上最流行的流媒体格式。
基本概念是您将视频文件分成小段,每个段长 2-12 秒。
如果您有一个 2 小时长的视频,您可以将其分成 10 秒长的片段并最终得到 720 个片段。
每个段都是一个以.ts扩展名结尾的文件。这些文件按顺序编号,因此您会得到一个如下所示的目录:

segments/
    00001.ts
    00002.ts
    00003.ts
    00004.ts
    00005.ts

然后,播放器将在用户流式传输时下载并播放每个片段。如果用户失去网络连接,它还将保留段缓冲区。
同样,HLS 是一种自适应比特率流式传输协议,因此 Web 服务器将具有正在播放的视频的多个不同再现(版本)。
所有的演绎都将被分成相同长度的片段。因此,回到我们的 2 小时长视频示例,它可能有 720 个 1080p 的片段文件,720 个 720p 的片段文件,720 个 480p 的片段文件。
所有段文件都是有序的,每个文件长度为 10 秒。
然后,播放器将查看可用的带宽量,并做出最好的猜测,以确定它接下来应该下载哪个需要渲染的片段文件。
如果您在观看视频时网络连接变慢,播放器可以将您降级为下一个片段文件的较低质量渲染。
当您的连接变得更快时,播放器可以升级您的渲染级别。
 
MP4 和 WebM
另一种方法是采用 HTML<video>元素并添加直接指向 MP4 或 WebM 文件的“src”属性。
这称为伪流式下载或渐进式下载,其中视频文件被下载到用户设备上的物理驱动器。
通常,视频存储在网络浏览器的临时目录中,用户可以在后台下载文件时开始观看。
用户还可以跳转到视频中的特定点,播放器将使用字节范围请求来估计文件的哪个部分对应于用户试图寻找的视频中的位置。
MP4 和 WebM 播放效率低下的原因是它们不支持自适应比特率。
每个想要无缓冲观看文件的用户都必须拥有足够快的 Internet 连接,以比播放速度更快地下载文件。
因此,当您使用这些格式时,您必须在提供更高质量的视频文件与降低 Internet 连接速度要求之间做出权衡。
 
传送
向用户提供视频时,有两个主要组件

  • 源服务器
  • 内容交付网络

源服务器是事实的来源。这是开发人员上传原始视频文件的地方。
然后,CDN 将从源服务器中提取文件,并将该文件缓存在世界各地的一组互连服务器上(在靠近用户的位置)。
这样,当用户想要请求文件时,他们可以从 CDN 中的服务器进行请求。这比您的原始服务器将整个文件发送给您的所有用户要快得多(并且可扩展性更高)。
很多企业会选择 Multi-CDN 环境,负载分布在多个 CDN 之间。这通过为用户提供更多可供选择的服务器并提高您网站的可用性来改善用户体验。
你可以在这里阅读全文。