0

我有一个 Apache Web 服务器,其中有几个视频。我也有最终用户登录到我的服务器并流式传输这些视频。问题是其中一些视频非常大,有时用户的带宽无法支持。

这就是我想要做的:当用户流式传输视频时,我希望该视频根据他们的可用带宽实时转码。如果它们的带宽较低,请降低 fps 或 bps。如果它更高,请提高它等。

我怎样才能做到这一点?

4

1 回答 1

1

虽然实时转码方法是可能的,但更正常的做法可能是将视频预转码为多种不同的比特率格式,并允许客户端根据他们的要求选择从哪个格式请求视频的下一个“块”当前的网络状况。

这种方法称为自适应比特率流式传输,并使用 HLS 和 MPEG-DASH 等流式传输格式。

最终,这是处理开销和存储开销之间的权衡:

  • 实时转码方法要求您只存储一份视频副本以提供给用户,但它要求您在每次用户想要查看视频时对视频进行转码(除非您存储的转码对他们有效)。
  • ABR 方法要求您为要提供的每个比特率存储视频副本,但您只需进行一次转码(对于每个比特率)。

视频的预期观看配置文件使情况变得更加复杂 - 如果视频每年仅观看一两次,存储是一个更大的问题,如果您每天有 100,000 名用户观看同一视频,则处理更大的问题。

请注意,您描述的方法与实时 ABR 流非常相似 - 实时流将实时(或尽可能接近)转码为例如 5 个不同的比特率流,并且客户端将请求例如,10 秒块中的视频。客户端根据网络条件决定从哪个比特率流中获取下一个块。

与您的建议的主要区别在于所有比特率一直在产生,而不仅仅是客户当时请求的比特率。

在实践中,如果有足够大的客户群和广泛的网络条件,这两种方法实际上是相同的——也就是说,如果您有足够多的客户和足够不同的网络条件,那么无论如何您将创建全方位的低带宽和高带宽流。

于 2017-04-20T23:30:36.980 回答