NodeJS和RED 5媒体服务器通过RTMP

时间:2012-10-24 15:33:50

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

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

通常可以在HTML5和nodeJS / binaryJS中实现类似flash的解决方案来流式传输音频(独立于我们从中获取流数据的位置,例如webRTC或其他)。如果是这样,你会怎么做?

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

人们通常会这样做: 当使用多媒体流(即视频或音频)到服务器时,在getUserMedia()完全到达之前,肯定没有任何东西比当前时间点击败Flash一样 - 诚然可能take a while直到99%浏览器用户将完全使用它。

将数据流式传输到服务器的一般做法是使用客户端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后续和一般用户交互的更多控制
  • 更容易实现到服务器框架

更新 我和Malcontenti-Wilson先生谈过,他负责only node-rtmp package写的但是在8个月前停止了,因为写得不好而且他遇到了障碍。使用过这个或能够检查代码的人吗?

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

4 个答案:

答案 0 :(得分:2)

是的,但是你有一些问题。

1)Red5非常缺乏记录和错误。

2)rtmpe / rtmps

3)性能/可扩展性

4)1到3是你可以克服的事情,但并非没有非常密切地了解媒体分发和所有相关问题。当你完成时,你将成为那些真正了解它的800人之一。你必须走一条解决意外问题的漫长道路。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

WCS是Flash,WebRTC,SIP,Websockets和Wowza兼容协议的混合实现:RTSP,RTMP。

流转换方案: enter image description here

答案 3 :(得分:0)

这是一个古老的问题,但是,我正在为那些偶然发现此问题的人发布此替代方案。 节点媒体服务器是相当不错的媒体服务器,我曾在其中之一使用过它,它支持rtmp https://www.npmjs.com/package/node-media-server

它的git repo也相当活跃,事实上,在我将其用于poc之前,我已经进行了一些更改。代码也写得很好。 https://github.com/illuspas/Node-Media-Server

PS。它可以像OBS一样进行实时流式传输。