1

我对 rtmp 和 nginx 和 ubuntu 完全陌生,我只想使用 vps 将我的流重新流式传输到多个站点,如 twitch、youtube 等……它对我来说很好,但最近我的主要流媒体网站 aparat.com 改变了他的系统和他们不在 /usr/local/nginx/conf/nginx.conf 中使用 push 命令,我使用了这个:

application live {
live on;
record off;
push rtmp://live.cdn.asset.aparat.com:443/event/<stream key>;
}

它适用于 twitch、youtube 或混音器,但不适用于 aparat.com

不知道他们为什么给我这个并告诉我使用它:

application live {
live on;
record off;
hls off;
dash off;
wait_key on;
exec_publish ffmpeg -i rtmp://127.0.0.1/live/name -async 1 -vsync 1 -c copy -f flv "rtmp://rtmp.cdn.asset.aparat.com:443/event/<stream key>";
}

当我开始流式传输时,我在现场没有流式传输。我应该改变我强调的那行旁边的任何东西吗?我应该在我的 ubuntu 18.04.4 上安装任何东西吗?

请考虑一下我对那里的任何事情一无所知,我只是应付粘贴代码...

我已经安装了ffmpeg和stunnel并配置它们我也试试这个:

exec_publish ffmpeg -i rtmp://127.0.0.1/live/name -async 1 -vsync 1 -c copy -f flv "rtmp://live.cdn.asset.aparat.com:443/event/<stream key>";
exec_publish ffmpeg -i rtmp://127.0.0.1:19350/live/name -async 1 -vsync 1 -c copy -f flv "rtmp://live.cdn.asset.aparat.com:443/event/<stream key>";
exec_publish ffmpeg -i rtmp://127.0.0.1:19350/live/name -async 1 -vsync 1 -c copy -f flv "rtmp://rtmp.cdn.asset.aparat.com:443/event/<stream key>";

我应该说 twitch 和 youtube 一切正常,我也使用 OBS 流式传输游戏,当我直接流式传输到 aparat.com 并使用 rtmp://rtmp.cdn.asset.aparat.com:443/event 时一切都很好

4

1 回答 1

0

该服务建议使用以下命令:

exec_publish ffmpeg -i rtmp://127.0.0.1/live/name -async 1 -vsync 1 -c copy -f flv "rtmp://live.cdn.asset.aparat.com:443/event/<stream key>";

让我们理解上面的命令:

rtmp://127.0.0.1 /live/name - 这是你的 nginx 设置的一个块。所以你必须创建一个监听本地主机的服务器块,端口 1935,因为 1935 是默认的 rtmp 协议端口,或者你可以更改为任何其他端口并将此端口附加到上面的命令中,如下所示:

rtmp://127.0.0.1:port/live/name

rtmp://127.0.0.1/ live /name - 这是发布点和上面服务器块内的 nginx 发布块(此名称可以是您想要的任何名称)但它必须存在,否则 nginx 服务器将断开连接.

rtmp://127.0.0.1/live/ name - 这是您的流媒体名称(此名称可以是您想要的任何名称),如上面的发布名称。

好的。现在你有了一个新的 rtmp 服务器块,监听 localhost 连接,使用你想要的端口,你想要的发布名称和你想要的流名称。现在,在此块内,如果服务目标 (aparat) 需要,您必须使用 ffmeg 重新编码您的流媒体并将其发送到 stunnel 代理,或者只是将流推送到 stunnel 代理,因为该服务需要 RTMPS。像这样的东西:

rtmp {

   server {
      listen 127.0.0.1:1935;
      # or 127.0.0.1:yourPort;

      application live {
         live on;
         # i will push the stream name to the stunnel proxy, 
         # without re-encoded it because i believe you can adjust the broadcaster
         # software to send it as your service requires it.
         # Understand that stunnel proxy will be listening localhost connections
         # under the port 1936 or change it to your stunnel settings 
         push rtmp://127.0.0.1:1936/event/streamkey
      }
   }

}

现在,让我们了解一下 push stunnel 代理 url:

push rtmp://127.0.0.1:1936/event/streamkey

rtmp://127.0.0.1:1936 /event/streamkey - 这部分是 stunnel 将监听连接的 url,server(127.0.0.1) 和 port(1936)。

rtmp://127.0.0.1:1936/ event/streamkey - 这是 stunnel 在服务目标 (aparat) 上发布您的流的路径。

现在,stunnel 将简单地将 127.0.0.1:1936 替换为服务所需的主机和端口 (443),并使用 RTMPS 发送您的流。

下面,我对 stunnel.conf 的建议:

pid = /var/run/stunnel4/stunnel.pid
output = /var/log/stunnel4/stunnel.log

setuid = stunnel4
setgid = stunnel4

# https://www.stunnel.org/faq.html

socket = r:TCP_NODELAY=1
socket = l:TCP_NODELAY=1

debug = 4

[aparat-live]
client = yes
accept = 127.0.0.1:1936
connect = rtmp.cdn.asset.aparat.com:443
verifyChain = no

现在,在服务器上的默认 pusblish 块上,添加此行,替换远程服务建议的第一个命令:

push rtmp://127.0.0.1:1935/live/name;

默认发布块中的上述命令会将流推送到服务器块(localhost:1935),这会将流发送到 stunnel 代理。

了解您不需要新的服务器块将流直接发送到 stunnel 代理。这是使用您发布的命令对您的问题的解释。

您可以在默认发布块上用此命令替换该命令,它会将流发送到 stunnel 代理:

代替

exec_publish ffmpeg -i rtmp://127.0.0.1/live/name -async 1 -vsync 1 -c copy -f flv "rtmp://live.cdn.asset.aparat.com:443/event/<stream key>";

经过

push rtmp://127.0.0.1:1936/event/<streamkey>;

您只需要一个可以正常工作的 stunnel 代理。

完成,重启 nginx 和 stunnel 服务和快乐流。

于 2020-07-29T14:02:41.217 回答