流媒体是某人在 Internet 上观看视频时使用的数据传输方法。这是一种每次传送一点视频文件的方法,通常从远程存储位置传送。通过在互联网上一次传输几秒钟的文件,客户端设备不必在开始播放之前下载整个视频。实时流媒体是通过 Internet 实时发送流媒体视频,而无需首先记录和存储。如今,电视广播、视频游戏流和社交媒体视频都可以进行直播。
将常规流媒体和实时流媒体之间的区别想象为演员背诵记忆独白和即兴演讲之间的区别。在前者中,内容是预先创建、存储,然后转发给观众的。在后者中,观众在演员创作内容的同时收到内容——就像在直播中一样。
直播一词通常是指广播直播流:一次发送给多个用户的一对多连接。Skype、FaceTime 和 Google Hangouts Meet 等视频会议技术适用于实时通信 (RTC) 协议,而不是一对多实时流广播使用的协议。
直播在技术层面是如何运作的?
这些是在直播中在幕后进行的主要步骤:压缩;编码;分割;内容交付网络 (CDN)分发;CDN缓存;解码;视频回放。
视频截取
实时流媒体从原始视频数据开始:摄像机捕获的视觉信息。在连接相机的计算设备中,这种视觉信息被表示为数字数据——换句话说,最深层次的 1 和 0。
压缩和编码
接下来,对分段的视频数据进行压缩和编码。通过去除冗余的视觉信息来压缩数据。例如,如果视频的第一帧显示一个人在灰色背景下说话,则不需要为具有相同背景的任何后续帧渲染灰色背景。
将视频压缩想象成在客厅中添加一件新家具。每次添加新椅子或边桌时,不必购买全新的家具。相反,可以保持房间布局大致相同,一次只更换一件,偶尔根据需要进行更大的重新布置。类似地,并不是视频流的每一帧都需要整体渲染——只是随着帧的变化而变化的部分,例如人嘴的运动。
“编码”是指将数据转换为新格式的过程。实时流媒体视频数据被编码为各种设备都能识别的可解释数字格式。常见的视频编码标准包括:H.264;H.265;VP9;AV1。
分割
视频包含大量数字信息,这就是为什么下载视频文件比下载简短的 PDF 或图像需要更长的时间。因为一次通过 Internet 发送所有视频数据是不切实际的,所以流式视频被分成几秒钟长的更小的片段。
CDN 分发和缓存
一旦直播流被分割、压缩和编码(所有这些只需要几秒钟),就需要提供给想要观看它的数十或数百万观众。为了在将流提供给不同位置的多个观众的同时以最小的延迟保持高质量,CDN 应该分发它。
CDN 是代表源服务器缓存和提供内容的分布式服务器网络。使用 CDN 可以提高性能,因为用户请求不再需要一直到达源服务器,而是可以由附近的 CDN 服务器处理。以这种方式处理请求和交付内容还可以减少源服务器的工作量。最后,CDN 可以有效地为世界各地的用户提供内容,因为他们的服务器位于世界各地,而不是集中在一个地理区域中。
CDN 还将缓存(临时保存)直播流的每个片段,因此大多数观众将从 CDN 缓存而不是从源服务器获取直播流。这实际上使实时流更接近实时,即使缓存的数据落后了几秒钟,因为它减少了往返源服务器的往返时间 (RTT) 。
解码和视频播放
CDN 将直播流发送给所有正在观看流的用户。每个用户的设备接收、解码和解压缩分段的视频数据。最后,用户设备上的媒体播放器(专用应用程序或浏览器中的视频播放器)将数据解释为视觉信息,然后播放视频。
一个例子
假设 Alice 在她的智能手机上开始直播,而住在该国另一边的 Bob 和 Alice 的另外几十个朋友一起在他的智能手机上收听直播。爱丽丝打开自己的智能手机摄像头并说:“你好,世界!”开始了直播。视频的“你好,世界”部分需要做什么才能到达该国另一端的 Bob 以及所有其他观看视频流的人?
首先,Alice 的智能手机将编码和压缩那一小段视频。如果 Alice 在她的厨房里拍摄直播,她的厨房墙被记录为视频的第一帧,由于背景没有改变,后续帧将忽略它。
现在,Alice 正在使用的应用程序会将她说的“Hello, world”的编码压缩版本发送到应用程序的 CDN。对 Bob 来说幸运的是,其中一个 CDN 服务器离他家只有几英里远,因此他的智能手机对直播第一段的请求几乎立即得到了答复。其他直播观看者可能会遇到比 Bob 更多或更少的延迟,具体取决于他们的地理位置。
Bob 的手机对视频片段进行解码并重构压缩数据,这样 Alice 的厨房墙就会出现在每一帧中。最后,就在爱丽丝在国家另一边的厨房里说“你好,世界”之后的几秒钟,她的脸出现在鲍勃的智能手机上,鲍勃看到并听到了她的问候。
为什么 CDN 对直播很重要?
带宽:网络上的任何给定点一次只能通过这么多数据;这种测量称为“带宽”。如果数据流到达网络上数据量超过容量的点,这称为“阻塞点”,因为数据传输被阻塞并减慢。阻塞点类似于当太多汽车试图使用单车道道路时可能发生交通减速的方式。
如果流的所有查看者都从其源点获取流数据,那么源服务器及其周围的网络基础设施就会成为阻塞点,流会变慢。但是,如果流传输的主要负担转移到 CDN,那么阻塞点就被消除了。
全球内容交付:因为 CDN 分布在世界各地,它们能够向全球受众交付内容。纽约的源服务器无法有效地向米兰的观众提供内容,尤其是视频等大量内容的情况。但是,CDN 可以从其网络上的任何点转发和提供内容,因此米兰观看来自纽约的直播流的人可以从米兰的服务器获取流,而不是一直等待它从新加载约克。
延迟和 RTT 减少:使用 CDN 在全球范围内交付内容通过减少 RTT(往返时间)来减少实时流观众的延迟。请求-响应往返在距离和时间方面都更短,因为观看者对直播流的请求不再需要到达流的原始源,流数据不再需要从起源,要么。这减少了延迟并有助于使直播更接近“直播”。
工作负载:回复用户对数据的请求会消耗服务器一些计算能力。回复许多用户对视频数据的请求可能会使单个服务器不堪重负。CDN 使用数十或数百台服务器,这些服务器可以将大部分工作负载从源服务器上转移出来并保持其正常运行。
缓存:CDN 缓存直播流的每个视频片段。然后,CDN 可以从缓存中传递段,而不是从源服务器获取数据。
从缓存中提供实时流似乎是一个矛盾:如果流是实时的,如何保存它并在几秒钟后交付它更快?虽然缓存的实时流确实会落后于实时,但这仍然比一直到源服务器要快。往返需要很长时间,以至于溪流会落后得更远。使用 CDN 缓存,用户体验到的延迟时间最短。