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

tox*_*e20 59 red5 rtmp audio-streaming node.js webrtc

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

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

从2010年开始,这里发现了一个关于stackoverflow的问题.从那时起,NodeJS和HTML5已经发展壮大.

人们通常做什么: 当使用多媒体流(即视频或音频)到服务器时,在当前时间点肯定没有任何东西可以击败闪存,直到getUserMedia()完全到达- 这可能需要一段时间直到99浏览器用户的百分比将完全使用它.

将数据流式传输到服务器的一般做法是使用客户端Flash或Flex应用程序,然后连接到RT5协议驱动的介质服务器,如RED5,FMSWowza.例如,通过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);
Run Code Online (Sandbox Code Playgroud)

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

我想做什么:nodeJS上运行一个app服务器(可能实现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);
});
Run Code Online (Sandbox Code Playgroud)

可能最好使用socketIO通过eventEmitters来区分用户交互.

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

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

更新: 我已经和Malcontenti-Wilson先生谈过了,他负责制作唯一的节点-rtmp软件包,该软件包已经写好但是在8个月前已经停止使用,因为它编写得不好而且遇到了障碍.使用过这个或能够检查代码的人?

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

Ste*_*tad 2

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

1) Red5 的文档严重不足且存在缺陷。

2)rtmpe/rtmps

3)性能/可扩展性

4) 1 到 3 是您可以克服的问题,但如果不非常深入地了解媒体分发及其所有相关问题,则无法克服。当您完成时,您将成为大约 800 名真正理解它的人之一。你将不得不走很长的路来解决意想不到的问题。

  • +1 on #1 - Red5 完全没有文档记录/已经过时,并且针对它提出的问题已经持续了数月,但他们不断发布从未解决未解决问题的版本。 (6认同)