【问题标题】:Streaming video from OBS to rtmp server running on heroku and using node-media-server将视频从 OBS 流式传输到在 heroku 上运行并使用 node-media-server 的 rtmp 服务器
【发布时间】:2019-12-29 01:58:06
【问题描述】:

我一直在使用 react、redux、node media server 和 json server 开发这个类似 Twitch 的应用程序。它允许用户通过将其 OBS 配置到服务器 URL 来直接流式传输视频/音频,其中 Stream Key 等于在 react 应用程序中创建的流的 ID。可以在您正在查看的流的结束 URL 上找到。

你可以在https://github.com/XorinNebulas/Streamy查看我的完整回购

您还可以通过https://streamy-app.herokuapp.com/https://streamy-app.herokuapp.com/查看我在 Heroku 上当前部署的站点版本

这是我对位于 streams/rtmpserver/index.js 中的 node-media-server 的配置

const NodeMediaServer = require("node-media-server");

const HTTP_PORT = process.env.HTTP_PORT || 8000;

const config = {
  rtmp: {
    port: 1935,
    chunk_size: 60000,
    gop_cache: true,
    ping: 30,
    ping_timeout: 60
  },
  http: {
    port: HTTP_PORT,
    allow_origin: "*"
  }
};

var nms = new NodeMediaServer(config);
nms.run();

在本地运行项目时一切正常,我只需进入我的 OBS 流设置,使用 rtmp://localhost/live 的 URL,Stream Key 等于流的 ID。

但是,在将我的节点应用程序部署到 Heroku 之后,我不确定应该使用哪个服务器 URL。我还想指出 node-media-server 在 Heroku 上成功运行。使用heroku logs --tail 我回来了

[INFO] Node Media Server v2.1.2
[1] 8/23/2019 17:22:22 78 [INFO] Node Media Rtmp Server started on port: 1935
[1] 8/23/2019 17:22:22 78 [INFO] Node Media Http Server started on port: 8000
[1] 8/23/2019 17:22:22 78 [INFO] Node Media WebSocket Server started on port: 8000

到目前为止,我已经尝试了一些简单的方法,例如通过将 localhost 替换为我的网站名称 rtmp://streamy-app.herokuapp.com/live 来修改 OBS 中的 URL

我希望我的 OBS 开始发布到我在端口 1935 上部署的 Heroku 应用程序,但是在单击 OBS 中的开始流式传输后,我收到了这条消息

连接服务器失败

连接超时。确保您已配置有效的流式传输>服务并且没有防火墙阻止连接。

我真的很感激任何建议,我已经为此工作了几天。

【问题讨论】:

  • 如果它在端口 1935 上,您需要将 OBS 指向该端口。 rtmp://streamy-app.herokuapp.com:1935/live 通过不添加端口号,它只是假设您想要端口 80。
  • 感谢您的建议,但我似乎仍然收到相同的错误消息。我什至尝试禁用我的防火墙。也许这是 Heroku 不允许外部连接的问题?
  • 可能是防火墙问题。您是否还包括流名称? tmp://streamy-app.herokuapp.com:1935/live/streamname 或者直接在OBS中填写流名字段。
  • 不,但是我确实使用了等于流 id 的流密钥,然后我可以通过带有 url /live/${id}.flv 的 flv 检索它,但我的主要问题是首先尝试确保 OBS 流到我的 Heroku 应用程序。
  • 我不知道我在想什么。由于协议是 RTMP,因此您不需要 url 中的端口号。 OBS 中需要流密钥才能流式传输到您的 Heroku 应用程序。我刚刚用上面的代码创建了自己的实例,效果很好。

标签: node.js reactjs heroku rtmp


【解决方案1】:

我认为是因为 Heroku 不支持 RTMP 协议,无论端口是 1935 还是 80。所以即使 RTMP 服务器监听在 80,它也不起作用。

有一种解决方法,使用RTMPT、POST HTTP-FLV 或 POST HTTP-HLS,所有这些都是基于 HTTP(S) 的协议。使用服务器将 FLV/HLS 转换为其他直播流协议。它可能适用于heroku。

注意:据我所知,没有 nodejs RTMPT 或 POST HTTP-FLV/HLS 服务器,但有一些 c++ 服务器。我不知道有多少用户想在 heroku 上搭建直播服务器,但显然 docker(或类似 AWS LightSail)是一个合适的解决方案。

未来,我们可能会使用 HTTP/3、QUIC 或 WebTransport 以 HTTP/HTTPS 的方式发布直播。但是现在,2021.12,它不可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多