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