【发布时间】:2017-04-20 20:53:49
【问题描述】:
我有一个 Apache Web 服务器,其中有几个视频。我也有最终用户登录到我的服务器并流式传输这些视频。问题是其中一些视频非常大,有时用户的带宽无法支持。
这就是我想做的事情:当用户流式传输视频时,我希望该视频根据他们的可用带宽实时转码。如果他们的带宽低,请降低 fps 或bps。如果它更高,请提高它等。
我该怎么做?
【问题讨论】:
我有一个 Apache Web 服务器,其中有几个视频。我也有最终用户登录到我的服务器并流式传输这些视频。问题是其中一些视频非常大,有时用户的带宽无法支持。
这就是我想做的事情:当用户流式传输视频时,我希望该视频根据他们的可用带宽实时转码。如果他们的带宽低,请降低 fps 或bps。如果它更高,请提高它等。
我该怎么做?
【问题讨论】:
虽然实时转码方法是可能的,但更正常的做法可能是将视频预转码为多种不同的比特率格式,并允许客户端选择从哪个格式请求下一个“块”视频根据他们当前的网络状况。
这种方法称为自适应比特率流式传输,并使用 HLS 和 MPEG-DASH 等流式传输格式。
最终,这是处理开销和存储开销之间的权衡:
视频的预期观看配置文件使情况变得更加复杂 - 如果视频一年只观看一到两次,存储是一个更大的问题,如果您每天有 100,000 名用户观看相同的视频,则处理更大的问题视频。
请注意,您描述的方法与实时 ABR 流非常相似 - 实时流将实时(或尽可能接近)转码为例如 5 个不同比特率的流和客户端将请求视频,例如 10 秒的块。客户端根据网络条件决定从哪个比特率流中获取下一个块。
与您的提议的主要区别在于,所有比特率都是一直在生成的,而不仅仅是客户当时请求的比特率。
在实践中,如果有足够大的客户群和广泛的网络条件,这两种方法实际上是相同的 - 即,如果您有足够多的客户和足够不同的网络条件,您将创建全方位的低带宽和高带宽流,无论如何。
【讨论】: