NodeJS和RED 5媒体服务器通过RTMP
这更多的是一个概念性的问题,而不是直接的“如何做到这一点”。
一般来说,可以通过HTML5和nodeJS / binaryJS实现类似Flash的解决scheme来stream式传输audio(独立于从哪里获取stream数据,例如webRTC或其他)。 如果是这样,你会怎么做呢?
在这里find的和从2010年开始只有一个关于stackoverflow的查询。自那时起,NodeJS和HTML5已经成长和成熟了。
人们通常做的事情是:当使用多媒体stream(即video或audio)到服务器时,在getUserMedia()完全到达之前,在当前时间点肯定没有什么比Flash 更快的 – 这实际上可能需要一段时间直到99浏览器用户的百分比将可以使用它。
将数据stream式传输到服务器的一般做法是使用客户端Flash或Flex应用程序,然后连接到像RED5 , FMS或Wowza这样的RTMP协议驱动的媒体服务器。 例如,通过RTMP发送麦克风input的客户端应用程序可能看起来像(简化版)
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上运行应用服务器(可能实现socketIO和binaryJS ),以捕获传入的RTMPstream。 就像是
//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来容易validation用户交互
- flash(通过RTMP)和getUserMedia()(通过二进制传输机制通过添加binaryJS和Mozilla的AudioAPI)
- 如果getUserMedia()得到完全支持,则可以轻松地删除Flash实现
- 一般来说,更多地控制rtmp跟进和用户交互
- 更容易实现到服务器框架
更新:我已经与Malcontenti-Wilson先生交谈过,他是唯一编写但是在8个月前停止的node-rtmp包 ,因为写得不好,而且他遇到了障碍。 任何使用过这个或能够检查代码的人?
更新2: Malcontenti-Wilson先生给我发了一封邮件,让我注意到node-mtrude (一种奇怪的名字),它正在做我们想要的东西。 有没有人使用这种包装?
是的,这是可能的,但是你有一些问题。
1)Red5是非常不完备的文件和错误。
2)rtmpe / rtmps
3)性能/可扩展性
4)1到3是你可以克服的事情,但不是没有了解媒体发布和所有相关的问题。 当你完成的时候,你会成为800人之一,真正理解它的人。 你将不得不走一条解决意外问题的漫长道路。
现在有一个叫做vertx的平台,可以在那里生产polygot 。 所以red5的jar可以包含在您的服务器端与现有的代码,并可以运行一个rtmpstream媒体服务器。 在客户端,你可以有像video.js或JW播放器播放stream回来,并已经得到了闪回的政策。 客户端发布,我不确定是否有任何基于JavaScript的RTMP实现可用。
WCS是Flash,WebRTC,SIP,Websockets和Wowza兼容协议的混合实现:RTSP,RTMP。
stream转换scheme: