我正在尝试使用 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/live
StreamKey ($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;
}
}
}
这种方法的优点是:
- 您可以更明确地指定流名称,从而允许您仅转发某些流。
- 您可以转发多个不同的流并将它们发送到多个不同的服务器。
- 您可以对高比特率流进行转码。
如果你觉得 FFmpeg 太难,你可以使用 SRS Stack 代替 FFmpeg,并结合 Nginx。你可以参考以下指南了解更多信息:
- 轻松将您的 RTSP IP 摄像机流式传输到 YouTube、Twitch 或 Facebook,它还允许您从 Nginx 提取 RTMP 或 HLS 流。
- 高效直播转码,减少带宽、节省成本,它允许您对来自 Nginx 的流进行转码。
SRS 堆栈是一个开源解决方案,提供基于Web的用户界面,使操作变得简单且用户友好。