nginx-rtmp从一个应用程序推送到另一个应用程序

nginx-rtmp从一个应用程序推送到另一个应用程序

我正在尝试使用 nginx-rtmp-module 推送 RTMP 流(在本手册) 从一个应用程序迁移到另一个应用程序。我的配置 (nginx.conf) 的一个最小示例如下所示。

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            record off;

            push rtmp://localhost:1935/source/$name;
        }

        application source {
            live on;
            record off;
        }
    }
}

我的流媒体设置(使用 OBS)将广播指向example.com/liveStreamKey ($name in nginx) 插口。现在,当尝试在 VLC 中观看流媒体时,URLrtmp://example.com/live/jackbox有效,但rtmp://example.com/source/jackbox无效。是我误解了push应该做什么,还是有其他问题?

如果有人需要有关设置的更多信息,请随时询问。

答案1

如果你将以下内容输入到 vlc 中,你可以看到它:“rtmp://example.com/source/$name”。如果你想使用 $name 作为变量,你需要将其从 rtmp push 中完全删除,因此你的设置将如下所示:

rtmp {
server {
    listen 1935;
    chunk_size 4096;

    application live {
        live on;
        record off;

        push rtmp://localhost:1935/source/;
    }

    application source {
        live on;
        record off;
    }
}
}

答案2

还有一种替代实现方法,允许您使用 FFmpeg 更明确地更改流名称:

ffmpeg -re -i rtmp://example.com/live/jackbox -c copy \
  -f flv rtmp://example.com/source/jackbox

您需要先配置两个独立的应用程序:

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            record off;
        }

        application source {
            live on;
            record off;
        }
    }
}

这种方法的优点是:

  1. 您可以更明确地指定流名称,从而允许您仅转发某些流。
  2. 您可以转发多个不同的流并将它们发送到多个不同的服务器。
  3. 您可以对高比特率流进行转码。

如果你觉得 FFmpeg 太难,你可以使用 SRS Stack 代替 FFmpeg,并结合 Nginx。你可以参考以下指南了解更多信息:

SRS 堆栈是一个开源解决方案,提供基于Web的用户界面,使操作变得简单且用户友好。

相关内容