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