这更像是一个概念性问题而不是直接“如何做到这一点”。
通常可以在HTML5和nodeJS / binaryJS中实现类似flash的解决方案来流式传输音频(独立于我们从中获取流数据的位置,例如webRTC或其他)。如果是这样,你会怎么做?
自2010年以来,只有一次查询stackoverflow found here及其版本。自那时起,NodeJS和HTML5已经发展壮大。
人们通常会这样做: 当使用多媒体流(即视频或音频)到服务器时,在getUserMedia()完全到达之前,肯定没有任何东西比当前时间点击败Flash一样 - 诚然可能take a while直到99%浏览器用户将完全使用它。
将数据流式传输到服务器的一般做法是使用客户端Flash或Flex应用程序,然后连接到RTMP协议支持的媒体服务器,如RED5,FMS或Wowza。例如,通过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上运行的应用服务器(可能实现socketIO和binaryJS)捕获传入的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来区分用户交互。
可能有什么好处:一般来说,采用这种方法似乎有点开销,但对我来说可能有优势,我也希望你对此发表评论。
更新 我和Malcontenti-Wilson先生谈过,他负责only node-rtmp package写的但是在8个月前停止了,因为写得不好而且他遇到了障碍。使用过这个或能够检查代码的人吗?
更新2: Malcontenti-Wilson先生只是给我发了一封邮件,让我注意node-mtrude(有点奇怪的名字),它正在做我们可能想要的事情。有没有人使用这种包装?
答案 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。
答案 3 :(得分:0)
这是一个古老的问题,但是,我正在为那些偶然发现此问题的人发布此替代方案。 节点媒体服务器是相当不错的媒体服务器,我曾在其中之一使用过它,它支持rtmp https://www.npmjs.com/package/node-media-server
它的git repo也相当活跃,事实上,在我将其用于poc之前,我已经进行了一些更改。代码也写得很好。 https://github.com/illuspas/Node-Media-Server
PS。它可以像OBS一样进行实时流式传输。