【问题标题】:NodeJS and RED 5 media server via RTMP通过 RTMP 的 NodeJS 和 RED 5 媒体服务器
【发布时间】:2012-10-14 16:31:51
【问题描述】:

这更像是一个概念性问题,而不是直接的“如何做到这一点”。

通常是否有可能实现类似 Flash 的解决方案来在 HTML5 和 nodeJS/binaryJS 中流式传输音频(与我们从哪里获取流数据,例如 webRTC 或其他)无关。如果是这样,你会怎么做?

stackoverflow found here 及其自 2010 年以来只有一次查询。从那时起,NodeJS 和 HTML5 已经发展成熟。

人们通常会做什么: 当使用多媒体流(即视频或音频)到服务器时,在getUserMedia() 完全到来之前,在当前时间点肯定没有什么能比 Flash 更好 - 老实说,在 99% 的浏览器用户之前可能take a while完全可以使用它。

将数据流式传输到服务器的一般做法是使用客户端 Flash 或 Flex 应用程序,然后连接到支持 RTMP 协议的媒体服务器,如RED5FMSWowza。例如,通过 RTMP 发送麦克风输入的客户端应用程序可能看起来像(简化版)

import flash.net.NetStream;

private var myMic:Microphone;
private var nc:NetConnection;
private var ns:NetStream

nc = new NetConnection();    
ns = new NetStream(nc);
nc.connect(rtmp://localhost/serverApp);
myMic = Microphone.getMicrophone();
ns.attachAudio(myMic);

与服务器应用程序一起,可以轻松地将数据流式传输到服务器。

我想做的事: 让应用服务器在nodeJS(可能实现socketIObinaryJS)上运行,以捕获传入的RTMP 流。类似的东西

//require
var rtmp = require('node-rtmp'),
var fs = require('fs');

//rtmp server address
var rtmpServer = 'rtmp://localhost';

//create a binary server listening that receives stream data
var RTMPServer = rtmp.RTMPServer();
var server = RTMPServer ({port: 1935});

server.on('connection', function(client){
 //check if user is allowed to do so
 rtmp.newStream(client.stream);
});

可能最好使用 socketIO 来区分通过 eventEmitters 进行的用户交互。

可能有什么优势:一般来说,采用这种方法似乎有点开销,但对我来说可能有优势,我也希望您对此发表评论。

  • 通过运行(例如)轻松验证用户交互express 和 socketIO
  • flash 的混合实现(通过 RTMP)和 getUserMedia()(通过添加 binaryJS 和 Mozilla AudioAPI 的二进制传输机制)
  • 如果完全支持 getUserMedia(),则可以轻松删除 flash 实现
  • 更好地控制 rtmp 跟进和一般用户交互
  • 更容易在服务器框架中实现

更新: 我已经与负责编写 only node-rtmp package 的 Malcontenti-Wilson 先生进行了交谈,该 only node-rtmp package 已在 8 个月前停止,因为它写得不好并且遇到了障碍。有人用过这个或者能查到代码吗?

更新 2: Malcontenti-Wilson 先生只是给我发了一封邮件,让我注意node-mtrude(有点奇怪的名字),它正在做我们可能想要的事情。有人用过这种包吗?

【问题讨论】:

标签: node.js audio-streaming red5 rtmp webrtc


【解决方案1】:

是的,这是可能的,但你有一些问题。

1) Red5 的文档严重不足且漏洞百出。

2) rtmpe/rtmps

3) 性能/可扩展性

4) 1 到 3 是您可以克服的问题,但必须非常深入地了解媒体分发及其所有相关问题。当你完成时,你将成为那里真正了解它的大约 800 人中的一员。你必须走很长的路才能解决意想不到的问题。

【讨论】:

  • +1 on #1 - Red5 完全没有文档记录/已过时,针对它的问题会持续数月,但他们不断发布从未解决未解决问题的版本。
  • 有据可查,有问题吗?尝试更新版本或购买商业服务器。抱怨而不提供解决方案对任何人都没有帮助。
  • Red5 有缺陷且无证,至少 2 年前是这样。但我想什么都没有改变,因为它的发展太慢了。我想您需要检查商业解决方案,其中一个非常便宜,一个月大约 50 美元,具有良好的可扩展性可能性(用 erlang 编写,而不是 java 编写)。
【解决方案2】:

现在有一个名为vertx 的平台可供使用,可以进行polygot 开发。因此 red5 jar 可以与现有代码一起包含在您的服务器端,并且可以运行 rtmp 流服务器。在客户端,您可以使用 video.js 或 JW 播放器之类的东西来播放流,并获得 Flash 回退策略。客户端发布,我不确定是否有任何基于 javascript 的 RTMP 实现可用。

【讨论】:

    【解决方案3】:

    WCS 是 Fl​​ash、WebRTC、SIP、Websockets 和 Wowza 兼容协议的混合实现:RTSP、RTMP。

    流转换方案:

    【讨论】:

      【解决方案4】:

      这是一个老问题,但是,我将这个替代方案发布给那些会偶然发现这个问题的人。 Node 媒体服务器 是一个非常好的媒体服务器,我在我的一个 poc 中使用过它,它支持 rtmp https://www.npmjs.com/package/node-media-server

      它的 git repo 也挺活泼的,其实在我的 poc 中使用之前我已经做了一些改动。而且代码也写得很好。 https://github.com/illuspas/Node-Media-Server

      附言。它与 OBS 的实时流媒体功能相得益彰。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-09
        • 2011-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-29
        • 1970-01-01
        • 2017-12-15
        相关资源
        最近更新 更多