首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在DO液滴上设置带有rtmp的节点媒体服务器

如何在DO液滴上设置带有rtmp的节点媒体服务器
EN

Stack Overflow用户
提问于 2021-06-24 13:30:01
回答 1查看 955关注 0票数 2

以下的所有文件

我在一个数字海洋液滴上托管我的RTMP服务器有困难。我有两个节点应用程序,其中一个只是用Hapi.js编写的API,运行在端口8000上。

第二个是运行在RTMP端口8888和1935上的节点-媒体服务器应用程序,我已经将其集成为Hapi.js插件,但它们作为单独的进程运行。我使用Nginx作为反向代理,将请求传递给节点应用程序,一切都很好。节点媒体服务器工作提供的所有端点。

但我想不出一种方法来访问我的节点-媒体服务器的1935年端口,并向它发送一个RTMP流。

在本地主机上,我使用像这个rtmp://localhost:1935/live/{stream_key}一样的OBS,但是对于托管的应用程序来说,同样的方式不起作用。

请告诉我如何接收从我的OBS到服务器的流。

也许我可以使用ngix-rtmp模块来接收流,然后将它推送到服务器上的节点-媒体服务器应用程序.

/etc/nginx/sites-available/default

代码语言:javascript
复制
upstream media {
   server 127.0.0.1:8888;
}


upstream main {
   server 127.0.0.1:8000;
}

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html/challenger;

    index index.html index.htm index.nginx-debian.html;

    server_name hellonode;

    location ^~ /assets/ {
        gzip_static on;
        expires 12h;
        add_header Cache-Control public;
  }

        location /main/  {
            proxy_pass          http://localhost:8000/;
            #proxy_http_version  1.1;
            #proxy_set_header    Host                $http_host;
            #proxy_set_header    Upgrade             $http_upgrade;
            #proxy_set_header    Connection          "Upgrade";
            #proxy_set_header    X-Real-IP           $proxy_protocol_addr;
            #proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
            #proxy_set_header    X-Forwarded-Proto   tcp;
            #proxy_set_header    X-NginX-Proxy       true;
        }

    location / {
        proxy_http_version 1.1;
        proxy_cache_bypass $http_upgrade;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_pass http://media;
    }
}

和节点媒体服务器应用程序(用作Hapi.js插件,在中称为Hapi.js插件)。

代码语言:javascript
复制
"use strict";

const { getStreamKeyFromStreamPath } = require("../app/services/live.service");

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

const ffmpegPath = require("@ffmpeg-installer/ffmpeg").path;

const connect = {
  name: "live",
  pkg: require("../../package"),
  async register(server, options) {
    const config = {
      logType: 3,
      rtmp: {
        port: 1935,
        chunk_size: 60000,
        gop_cache: true,
        ping: 30,
        ping_timeout: 60,
      },
      http: {
        port: process.env.MEDIA_SERVER_PORT || 8888,
        mediaroot: "./media",
        allow_origin: "*",
      },
      trans: {
        //   ffmpeg: "../../../ffmpeg/bin/ffmpeg.exe",
        ffmpeg: ffmpegPath,
        tasks: [
          {
            app: "live",
            hls: true,
            hlsFlags: "[hls_time=2:hls_list_size=3:hls_flags=delete_segments]",
            mp4: true,
            mp4Flags: "[movflags=frag_keyframe+empty_moov]",
          },
        ],
      },
    };

    const nms = new NodeMediaServer(config);

    nms.on("prePublish", async (id, StreamPath, args) => {
      let stream_key = getStreamKeyFromStreamPath(StreamPath);
      console.log(
        "[NodeEvent on prePublish]",
        `id=${id} StreamPath=${StreamPath} args=${JSON.stringify(args)}`
      );
    });

    nms.run();
  },
};

module.exports = connect;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-26 19:45:36

经过一番研究,我找到了解决办法。

解决方案是痛苦明显的,

所以节点媒体服务器应用程序在1935年端口上监听RTMP。因此,自然的解决方案是创建和配置允许TCP连接通过端口1935的防火墙。对于Ubuntu18.0液滴,下面的是诀窍。

首先,使用lsof -i :1935查找您的端口,然后允许通过sudo ufw allow 1935/tcp通过端口进行TCP连接。因此,如果节点-媒体服务器正在运行,恭喜!现在可以像这样使用OBS了。

注意:注意你的应用程序运行的主机。对我来说,localhost成功了,但是对于一些液滴配置,您可能需要将其设置为0.0.0.0

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68116756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档