【问题标题】:Use avconv to live transcode video file based on bandwidth使用avconv根据带宽实时转码视频文件
【发布时间】:2017-04-20 20:53:49
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

    标签: video avconv transcode


    【解决方案1】:

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

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

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

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

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

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

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

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

    【讨论】:

    • 我认为存储可能会成为一个问题,所以我想选择第一个选项(尽管我不排除第二个选项)。最大的问题是我该怎么做?我知道 avconv 可以对文件进行转码,但我还没有弄清楚如何使用它根据客户端带宽实时进行文件转码。除非您知道其他软件可以做到这一点。
    • 这不会太容易,但是看看今天的玩家如何请求不同的比特率块并从那里构建你的设计可能会很好。如果可能在 dash.js 之类的开源播放器之一中查看此内容的最佳位置:github.com/Dash-Industry-Forum/dash.js
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    相关资源
    最近更新 更多