【问题标题】:Scaling nginx-rtmp livestreaming with ffmpeg transcoding使用 ffmpeg 转码扩展 nginx-rtmp 直播
【发布时间】:2018-10-07 10:41:52
【问题描述】:

我目前有一个使用多产 nginx-rtmp 库的功能性直播设置,并且我正在使用 ffmpeg 来提供我的直播的各种分辨率。

唯一的问题是,ffmpeg 只有 2 个输出会占用我大约 50% 的 CPU。我希望能够同时支持多达 20 个流媒体——按照目前的需求,这意味着我需要 10 倍于我目前拥有的 CPU 能力!

如何使用nginx-rtmpffmpeg 扩展我的转码设置?

rtmp {
server {
    listen 1935;

    application src {
        live on;
        exec_push ffmpeg -i rtmp://localhost/src/$name
            -c:v copy -preset:v ultrafast -b:v 512K -c:a copy -tune zerolatency -f flv rtmp://localhost/hls/$name_hi
            -c:v libx264 -preset:v ultrafast -s 852x480 -b:v 128K -c:a copy -tune zerolatency -f flv rtmp://localhost/hls/$name_low;

            # -c:v libx264 -s 852x480 -b:v 128K -c:a copy -tune zerolatency -f flv rtmp://localhost/hls/$name_low;
            # -c:v libx264 -s 1280x720 -b:v 256k -c:a copy -tune zerolatency -f flv rtmp://localhost/hls/$name_mid;
    }

    application hls {
        live on;
        hls on;
        hls_path /tmp/hls;

        # hls_fragment 1s;
        # hls_playlist_length 4s;
        hls_fragment 4s;
        hls_playlist_length 12s;
        hls_nested on;
        hls_variant _low BANDWIDTH=160000;
        # hls_variant _mid BANDWIDTH=320000;
        hls_variant _hi  BANDWIDTH=640000;
    }
}

}

【问题讨论】:

  • 你最后是如何解决这个问题的?表示您最终部署的解决方案。

标签: nginx ffmpeg rtmp http-live-streaming


【解决方案1】:

你不能不牺牲质量。如果有办法,ffmpeg 会默认启用它。您最好的选择是添加一个或两个硬件编码器,例如带有 nvenc 的 Nvidia 卡(确保您购买的是具有无限流的昂贵的,大多数限制为两个)。

【讨论】:

  • 感谢您的回复——基于云的解决方案怎么样?我在想 ECS + Fargate 可以根据需求扩展我的转码......不过我不确定这在实践中是什么样子。
  • 如果你走那条路,只需使用 mux.com 或 Zencoder 之类的服务。
  • 我担心使用服务对我来说太贵了...尽管在 AWS 上使用自动扩展,成本也很容易失控。
  • 我会更关心在一个流动性很大、工作流程非常复杂的市场中开发和维护视频系统。
  • 这很好。我想不使用服务的另一个好处是能够将我的视频服务与我的应用程序集成。例如,在直播后创建 VOD 时,能够将该 VOD 的 url 存储在我的应用程序数据库中。
猜你喜欢
  • 2018-10-26
  • 1970-01-01
  • 2023-04-10
  • 2014-08-30
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多